summaryrefslogtreecommitdiff
path: root/src/common/x64/native_clock.h
diff options
context:
space:
mode:
authorGravatar David2020-06-28 01:34:07 +1000
committerGravatar GitHub2020-06-28 01:34:07 +1000
commit0ea4a8bcc4bca14bb7c65b248ed1899d2e7167cf (patch)
treea83acb1e779b98d31fa54389bae4be5669573a41 /src/common/x64/native_clock.h
parentMerge pull request #4097 from kevinxucs/kevinxucs/device-pixel-scaling-float (diff)
parentCommon: Fix non-conan build (diff)
downloadyuzu-0ea4a8bcc4bca14bb7c65b248ed1899d2e7167cf.tar.gz
yuzu-0ea4a8bcc4bca14bb7c65b248ed1899d2e7167cf.tar.xz
yuzu-0ea4a8bcc4bca14bb7c65b248ed1899d2e7167cf.zip
Merge pull request #3396 from FernandoS27/prometheus-1
Implement SpinLocks, Fibers and a Host Timer
Diffstat (limited to 'src/common/x64/native_clock.h')
-rw-r--r--src/common/x64/native_clock.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/common/x64/native_clock.h b/src/common/x64/native_clock.h
new file mode 100644
index 000000000..b58cf9f5a
--- /dev/null
+++ b/src/common/x64/native_clock.h
@@ -0,0 +1,41 @@
1// Copyright 2020 yuzu Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <optional>
8
9#include "common/spin_lock.h"
10#include "common/wall_clock.h"
11
12namespace Common {
13
14namespace X64 {
15class NativeClock : public WallClock {
16public:
17 NativeClock(u64 emulated_cpu_frequency, u64 emulated_clock_frequency, u64 rtsc_frequency);
18
19 std::chrono::nanoseconds GetTimeNS() override;
20
21 std::chrono::microseconds GetTimeUS() override;
22
23 std::chrono::milliseconds GetTimeMS() override;
24
25 u64 GetClockCycles() override;
26
27 u64 GetCPUCycles() override;
28
29private:
30 u64 GetRTSC();
31
32 SpinLock rtsc_serialize{};
33 u64 last_measure{};
34 u64 accumulated_ticks{};
35 u64 rtsc_frequency;
36};
37} // namespace X64
38
39u64 EstimateRDTSCFrequency();
40
41} // namespace Common