summaryrefslogtreecommitdiffstats
path: root/src/common/profiler.h
diff options
context:
space:
mode:
authorYuri Kunde Schlesner <yuriks@yuriks.net>2015-02-15 18:49:27 +0100
committerYuri Kunde Schlesner <yuriks@yuriks.net>2015-03-02 01:47:14 +0100
commitdc8a3f8bc842df1b3eeeb5a283556ac644ab3183 (patch)
tree82bc4d610bd0b77ba6f2ac4e514e68d1c251b251 /src/common/profiler.h
parentAdd profiling infrastructure and widget (diff)
downloadyuzu-dc8a3f8bc842df1b3eeeb5a283556ac644ab3183.tar
yuzu-dc8a3f8bc842df1b3eeeb5a283556ac644ab3183.tar.gz
yuzu-dc8a3f8bc842df1b3eeeb5a283556ac644ab3183.tar.bz2
yuzu-dc8a3f8bc842df1b3eeeb5a283556ac644ab3183.tar.lz
yuzu-dc8a3f8bc842df1b3eeeb5a283556ac644ab3183.tar.xz
yuzu-dc8a3f8bc842df1b3eeeb5a283556ac644ab3183.tar.zst
yuzu-dc8a3f8bc842df1b3eeeb5a283556ac644ab3183.zip
Diffstat (limited to '')
-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 {
#define ENABLE_PROFILING 1
#endif
-using Duration = std::chrono::nanoseconds;
+#if defined(_MSC_VER) && _MSC_VER <= 1800 // MSVC 2013
+// MSVC up to 2013 doesn't use QueryPerformanceCounter for high_resolution_clock, so it has bad
+// precision. We manually implement a clock based on QPC to get good results.
+
+struct QPCClock {
+ using duration = std::chrono::microseconds;
+ using time_point = std::chrono::time_point<QPCClock>;
+ using rep = duration::rep;
+ using period = duration::period;
+ static const bool is_steady = false;
+
+ static time_point now();
+};
+
+using Clock = QPCClock;
+#else
using Clock = std::chrono::high_resolution_clock;
+#endif
+
+using Duration = Clock::duration;
/**
* Represents a timing category that measured time can be accounted towards. Should be declared as a