summaryrefslogtreecommitdiff
path: root/Source/Core/Common/PerformanceCounter.cpp
diff options
context:
space:
mode:
authorcomex <comexk@gmail.com>2014-11-03 22:36:32 -0500
committercomex <comexk@gmail.com>2014-11-03 22:36:32 -0500
commit9cba7878718d7184b53f0f453b016f20ccbe7a1f (patch)
tree3a7bc743696b5eff37f52878c920cb1f43b69a05 /Source/Core/Common/PerformanceCounter.cpp
parent507104186c6346f752780f58017c87540be87c4e (diff)
parent641e820257d19a341e6fe0b5623d70a7893b07e5 (diff)
Merge pull request #1408 from randomstuff/perf
Profiling: measure time on non-Windows/POSIX using clock_gettime
Diffstat (limited to 'Source/Core/Common/PerformanceCounter.cpp')
-rw-r--r--Source/Core/Common/PerformanceCounter.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/Source/Core/Common/PerformanceCounter.cpp b/Source/Core/Common/PerformanceCounter.cpp
new file mode 100644
index 0000000000..64a9a0b20a
--- /dev/null
+++ b/Source/Core/Common/PerformanceCounter.cpp
@@ -0,0 +1,48 @@
+// Copyright 2013 Dolphin Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#if !defined(_WIN32)
+
+#include <cstdint>
+#include <ctime>
+
+#include <unistd.h>
+
+#include "Common/CommonTypes.h"
+#include "Common/PerformanceCounter.h"
+
+#if defined(_POSIX_TIMERS) && _POSIX_TIMERS > 0
+#if defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK>0
+#define DOLPHIN_CLOCK CLOCK_MONOTONIC
+#else
+#define DOLPHIN_CLOCK CLOCK_REALTIME
+#endif
+#endif
+
+bool QueryPerformanceCounter(u64* out)
+{
+#if defined(_POSIX_TIMERS) && _POSIX_TIMERS > 0
+ timespec tp;
+ if (clock_gettime(DOLPHIN_CLOCK, &tp))
+ return false;
+ *out = (u64) tp.tv_nsec + (u64) 1000000000 * (u64) tp.tv_sec;
+ return true;
+#else
+ *out = 0;
+ return false;
+#endif
+}
+
+bool QueryPerformanceFrequency(u64* out)
+{
+#if defined(_POSIX_TIMERS) && _POSIX_TIMERS > 0
+ *out = 1000000000;
+ return true;
+#else
+ *out = 1;
+ return false;
+#endif
+}
+
+#endif