diff options
| author | 2023-10-29 13:50:55 +0000 | |
|---|---|---|
| committer | 2024-01-24 04:26:55 +0000 | |
| commit | e4915fb7d2077584a11a15141bc81d28ed2b0125 (patch) | |
| tree | 1783055dc2e98eaf9099e8e7b194b55f8f607747 /src/common/wall_clock.cpp | |
| parent | Merge pull request #12678 from german77/settings_impl (diff) | |
| download | yuzu-e4915fb7d2077584a11a15141bc81d28ed2b0125.tar.gz yuzu-e4915fb7d2077584a11a15141bc81d28ed2b0125.tar.xz yuzu-e4915fb7d2077584a11a15141bc81d28ed2b0125.zip | |
Rework time service to fix time passing offline.
Diffstat (limited to 'src/common/wall_clock.cpp')
| -rw-r--r-- | src/common/wall_clock.cpp | 32 |
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 | ||
| 19 | class StandardWallClock final : public WallClock { | 19 | class StandardWallClock final : public WallClock { |
| 20 | public: | 20 | public: |
| 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 | |||
| 55 | private: | ||
| 56 | SteadyClock::time_point start_time; | ||
| 57 | }; | 55 | }; |
| 58 | 56 | ||
| 59 | std::unique_ptr<WallClock> CreateOptimalClock() { | 57 | std::unique_ptr<WallClock> CreateOptimalClock() { |