Under linux, use the much faster CLOCK_REALTIME_COARSE clock by default (SPDLOG_CLOCK_COARSE is defined in common.h)

This commit is contained in:
gabi 2015-01-29 00:19:37 +02:00
parent e85a3cc33b
commit fb67e571f5
3 changed files with 30 additions and 17 deletions

View File

@ -36,6 +36,14 @@
#define SPDLOG_NOEXCEPT
#endif
// under linux, use the much faster CLOCK_REALTIME_COARSE clock.
// this clock is less accurate - resolution is 1ms under i386 and x86_64.
// comment to use the regular (and slower) clock
#ifdef __linux__
#define SPDLOG_CLOCK_COARSE
#endif
namespace spdlog
{

View File

@ -26,9 +26,6 @@
#include <type_traits>
#include "../common.h"
#include "../logger.h"
#ifdef SPDLOG_CLOCK_COARSE
#include <time.h>
#endif
// Line logger class - aggregates operator<< calls to fast ostream
@ -67,15 +64,7 @@ public:
if (_enabled)
{
_log_msg.logger_name = _callback_logger->name();
#ifndef SPDLOG_CLOCK_COARSE
_log_msg.time = log_clock::now();
#else
timespec ts;
::clock_gettime(CLOCK_REALTIME_COARSE, &ts);
_log_msg.time = std::chrono::time_point<log_clock, typename log_clock::duration>(
std::chrono::duration_cast<typename log_clock::duration>(
std::chrono::seconds(ts.tv_sec) + std::chrono::nanoseconds(ts.tv_nsec)));
#endif
_log_msg.time = os::now();
_callback_logger->_log_msg(_log_msg);
}
}
@ -83,7 +72,7 @@ public:
//
// Support for format string with variadic args
//
void write(const char* what)
{
@ -106,7 +95,7 @@ public:
}
}
//
// Support for operator<<
//
@ -194,7 +183,7 @@ public:
_log_msg.raw << what;
return *this;
}
//Support user types which implements operator<<
template<typename T>
line_logger& operator<<(const T& what)
@ -204,7 +193,7 @@ public:
return *this;
}
void disable()
{
_enabled = false;

View File

@ -23,7 +23,6 @@
/*************************************************************************/
#pragma once
#include<string>
#include<cstdio>
#include<ctime>
@ -35,6 +34,8 @@
# include <Windows.h>
#endif
#include "..\common.h"
namespace spdlog
{
namespace details
@ -42,6 +43,21 @@ namespace details
namespace os
{
inline spdlog::log_clock::time_point now()
{
#ifdef SPDLOG_CLOCK_COARSE
timespec ts;
::clock_gettime(CLOCK_REALTIME_COARSE, &ts);
return std::chrono::time_point<log_clock, typename log_clock::duration>(
std::chrono::duration_cast<typename log_clock::duration>(
std::chrono::seconds(ts.tv_sec) + std::chrono::nanoseconds(ts.tv_nsec)));
#else
return log_clock::now();
#endif
}
inline std::tm localtime(const std::time_t &time_tt)
{