summaryrefslogtreecommitdiff
path: root/Source/Core/Common/PerformanceCounter.cpp
diff options
context:
space:
mode:
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