summaryrefslogtreecommitdiff
path: root/src/common/profiler.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/profiler.h')
-rw-r--r--src/common/profiler.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/common/profiler.h b/src/common/profiler.h
index 53c4f6eaf..3e967b4bc 100644
--- a/src/common/profiler.h
+++ b/src/common/profiler.h
@@ -18,8 +18,26 @@ namespace Profiling {
18#define ENABLE_PROFILING 1 18#define ENABLE_PROFILING 1
19#endif 19#endif
20 20
21using Duration = std::chrono::nanoseconds; 21#if defined(_MSC_VER) && _MSC_VER <= 1800 // MSVC 2013
22// MSVC up to 2013 doesn't use QueryPerformanceCounter for high_resolution_clock, so it has bad
23// precision. We manually implement a clock based on QPC to get good results.
24
25struct QPCClock {
26 using duration = std::chrono::microseconds;
27 using time_point = std::chrono::time_point<QPCClock>;
28 using rep = duration::rep;
29 using period = duration::period;
30 static const bool is_steady = false;
31
32 static time_point now();
33};
34
35using Clock = QPCClock;
36#else
22using Clock = std::chrono::high_resolution_clock; 37using Clock = std::chrono::high_resolution_clock;
38#endif
39
40using Duration = Clock::duration;
23 41
24/** 42/**
25 * Represents a timing category that measured time can be accounted towards. Should be declared as a 43 * Represents a timing category that measured time can be accounted towards. Should be declared as a