summaryrefslogtreecommitdiff
path: root/src/common/wall_clock.cpp
diff options
context:
space:
mode:
authorGravatar liamwhite2024-01-25 14:19:01 -0500
committerGravatar GitHub2024-01-25 14:19:01 -0500
commitd45561ace069024f47ed710d1165b607644d1ec3 (patch)
treea316f59c5a722dc15fe5c49b3641d9801c264970 /src/common/wall_clock.cpp
parentMerge pull request #12781 from goldenx86/dozen (diff)
parentRework time service to fix time passing offline. (diff)
downloadyuzu-d45561ace069024f47ed710d1165b607644d1ec3.tar.gz
yuzu-d45561ace069024f47ed710d1165b607644d1ec3.tar.xz
yuzu-d45561ace069024f47ed710d1165b607644d1ec3.zip
Merge pull request #12499 from Kelebek1/time
Rework time services
Diffstat (limited to 'src/common/wall_clock.cpp')
-rw-r--r--src/common/wall_clock.cpp32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/common/wall_clock.cpp b/src/common/wall_clock.cpp
index 012fdc1e0..e14bf3e65 100644
--- a/src/common/wall_clock.cpp
+++ b/src/common/wall_clock.cpp
@@ -18,42 +18,40 @@ namespace Common {
18 18
19class StandardWallClock final : public WallClock { 19class StandardWallClock final : public WallClock {
20public: 20public:
21 explicit StandardWallClock() : start_time{SteadyClock::Now()} {} 21 explicit StandardWallClock() {}
22 22
23 std::chrono::nanoseconds GetTimeNS() const override { 23 std::chrono::nanoseconds GetTimeNS() const override {
24 return SteadyClock::Now() - start_time; 24 return std::chrono::duration_cast<std::chrono::nanoseconds>(
25 std::chrono::system_clock::now().time_since_epoch());
25 } 26 }
26 27
27 std::chrono::microseconds GetTimeUS() const override { 28 std::chrono::microseconds GetTimeUS() const override {
28 return static_cast<std::chrono::microseconds>(GetHostTicksElapsed() / NsToUsRatio::den); 29 return std::chrono::duration_cast<std::chrono::microseconds>(
30 std::chrono::system_clock::now().time_since_epoch());
29 } 31 }
30 32
31 std::chrono::milliseconds GetTimeMS() const override { 33 std::chrono::milliseconds GetTimeMS() const override {
32 return static_cast<std::chrono::milliseconds>(GetHostTicksElapsed() / NsToMsRatio::den); 34 return std::chrono::duration_cast<std::chrono::milliseconds>(
35 std::chrono::system_clock::now().time_since_epoch());
33 } 36 }
34 37
35 u64 GetCNTPCT() const override { 38 s64 GetCNTPCT() const override {
36 return GetHostTicksElapsed() * NsToCNTPCTRatio::num / NsToCNTPCTRatio::den; 39 return GetUptime() * NsToCNTPCTRatio::num / NsToCNTPCTRatio::den;
37 } 40 }
38 41
39 u64 GetGPUTick() const override { 42 s64 GetGPUTick() const override {
40 return GetHostTicksElapsed() * NsToGPUTickRatio::num / NsToGPUTickRatio::den; 43 return GetUptime() * NsToGPUTickRatio::num / NsToGPUTickRatio::den;
41 } 44 }
42 45
43 u64 GetHostTicksNow() const override { 46 s64 GetUptime() const override {
44 return static_cast<u64>(SteadyClock::Now().time_since_epoch().count()); 47 return std::chrono::duration_cast<std::chrono::nanoseconds>(
45 } 48 std::chrono::steady_clock::now().time_since_epoch())
46 49 .count();
47 u64 GetHostTicksElapsed() const override {
48 return static_cast<u64>(GetTimeNS().count());
49 } 50 }
50 51
51 bool IsNative() const override { 52 bool IsNative() const override {
52 return false; 53 return false;
53 } 54 }
54
55private:
56 SteadyClock::time_point start_time;
57}; 55};
58 56
59std::unique_ptr<WallClock> CreateOptimalClock() { 57std::unique_ptr<WallClock> CreateOptimalClock() {