mirror of
https://github.com/monero-project/monero.git
synced 2024-11-17 16:27:39 +00:00
epee: add nanosecond timer and pause/restart profiling macros
Nanosecond timer precision won't work on Windows, but we don't care since I'm using that just for profiling incremental code paths, but a Windows coder is welcome to add it if there's a way.
This commit is contained in:
parent
ab594cfee9
commit
bda8c5983b
2 changed files with 17 additions and 5 deletions
|
@ -48,17 +48,17 @@ namespace epee
|
||||||
namespace misc_utils
|
namespace misc_utils
|
||||||
{
|
{
|
||||||
|
|
||||||
inline uint64_t get_tick_count()
|
inline uint64_t get_ns_count()
|
||||||
{
|
{
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
return ::GetTickCount64();
|
return ::GetTickCount64() * 1000000;
|
||||||
#elif defined(WIN32)
|
#elif defined(WIN32)
|
||||||
static LARGE_INTEGER pcfreq = {0};
|
static LARGE_INTEGER pcfreq = {0};
|
||||||
LARGE_INTEGER ticks;
|
LARGE_INTEGER ticks;
|
||||||
if (!pcfreq.QuadPart)
|
if (!pcfreq.QuadPart)
|
||||||
QueryPerformanceFrequency(&pcfreq);
|
QueryPerformanceFrequency(&pcfreq);
|
||||||
QueryPerformanceCounter(&ticks);
|
QueryPerformanceCounter(&ticks);
|
||||||
ticks.QuadPart *= 1000; /* we want msec */
|
ticks.QuadPart *= 1000000000; /* we want nsec */
|
||||||
return ticks.QuadPart / pcfreq.QuadPart;
|
return ticks.QuadPart / pcfreq.QuadPart;
|
||||||
#elif defined(__MACH__)
|
#elif defined(__MACH__)
|
||||||
clock_serv_t cclock;
|
clock_serv_t cclock;
|
||||||
|
@ -68,16 +68,21 @@ namespace misc_utils
|
||||||
clock_get_time(cclock, &mts);
|
clock_get_time(cclock, &mts);
|
||||||
mach_port_deallocate(mach_task_self(), cclock);
|
mach_port_deallocate(mach_task_self(), cclock);
|
||||||
|
|
||||||
return (mts.tv_sec * 1000) + (mts.tv_nsec/1000000);
|
return (mts.tv_sec * 1000000000) + (mts.tv_nsec);
|
||||||
#else
|
#else
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
if(clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
|
if(clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return (ts.tv_sec * 1000) + (ts.tv_nsec/1000000);
|
return (ts.tv_sec * 1000000000) + (ts.tv_nsec);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline uint64_t get_tick_count()
|
||||||
|
{
|
||||||
|
return get_ns_count() / 1000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
inline int call_sys_cmd(const std::string& cmd)
|
inline int call_sys_cmd(const std::string& cmd)
|
||||||
{
|
{
|
||||||
|
|
|
@ -57,8 +57,15 @@ namespace epee
|
||||||
|
|
||||||
|
|
||||||
#define TIME_MEASURE_START(var_name) uint64_t var_name = epee::misc_utils::get_tick_count();
|
#define TIME_MEASURE_START(var_name) uint64_t var_name = epee::misc_utils::get_tick_count();
|
||||||
|
#define TIME_MEASURE_PAUSE(var_name) var_name = epee::misc_utils::get_tick_count() - var_name;
|
||||||
|
#define TIME_MEASURE_RESTART(var_name) var_name = epee::misc_utils::get_tick_count() - var_name;
|
||||||
#define TIME_MEASURE_FINISH(var_name) var_name = epee::misc_utils::get_tick_count() - var_name;
|
#define TIME_MEASURE_FINISH(var_name) var_name = epee::misc_utils::get_tick_count() - var_name;
|
||||||
|
|
||||||
|
#define TIME_MEASURE_NS_START(var_name) uint64_t var_name = epee::misc_utils::get_ns_count();
|
||||||
|
#define TIME_MEASURE_NS_PAUSE(var_name) var_name = epee::misc_utils::get_ns_count() - var_name;
|
||||||
|
#define TIME_MEASURE_NS_RESTART(var_name) var_name = epee::misc_utils::get_ns_count() - var_name;
|
||||||
|
#define TIME_MEASURE_NS_FINISH(var_name) var_name = epee::misc_utils::get_ns_count() - var_name;
|
||||||
|
|
||||||
namespace profile_tools
|
namespace profile_tools
|
||||||
{
|
{
|
||||||
struct local_call_account
|
struct local_call_account
|
||||||
|
|
Loading…
Reference in a new issue