1 // Copyright 2019 yuzu emulator team
2 // Licensed under GPLv2 or any later version
3 // Refer to the license.txt file included.
4 
5 #pragma once
6 
7 #include "core/hle/service/time/clock_types.h"
8 #include "core/hle/service/time/steady_clock_core.h"
9 
10 namespace Core {
11 class System;
12 }
13 
14 namespace Service::Time::Clock {
15 
16 class StandardSteadyClockCore final : public SteadyClockCore {
17 public:
GetTimePoint(Core::System & system)18     SteadyClockTimePoint GetTimePoint(Core::System& system) override {
19         return {GetCurrentRawTimePoint(system).ToSeconds(), GetClockSourceId()};
20     }
21 
GetInternalOffset()22     TimeSpanType GetInternalOffset() const override {
23         return internal_offset;
24     }
25 
SetInternalOffset(TimeSpanType value)26     void SetInternalOffset(TimeSpanType value) override {
27         internal_offset = value;
28     }
29 
30     TimeSpanType GetCurrentRawTimePoint(Core::System& system) override;
31 
SetSetupValue(TimeSpanType value)32     void SetSetupValue(TimeSpanType value) {
33         setup_value = value;
34     }
35 
36 private:
37     TimeSpanType setup_value{};
38     TimeSpanType internal_offset{};
39     TimeSpanType cached_raw_time_point{};
40 };
41 
42 } // namespace Service::Time::Clock
43