mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-03 16:39:01 -06:00 
			
		
		
		
	Deglobalize System: Time
This commit is contained in:
		@@ -7,8 +7,8 @@
 | 
			
		||||
namespace Service::Time {
 | 
			
		||||
 | 
			
		||||
Time::Time(std::shared_ptr<Module> time, std::shared_ptr<SharedMemory> shared_memory,
 | 
			
		||||
           const char* name)
 | 
			
		||||
    : Module::Interface(std::move(time), std::move(shared_memory), name) {
 | 
			
		||||
           Core::System& system, const char* name)
 | 
			
		||||
    : Module::Interface(std::move(time), std::move(shared_memory), system, name) {
 | 
			
		||||
    // clang-format off
 | 
			
		||||
    static const FunctionInfo functions[] = {
 | 
			
		||||
        {0, &Time::GetStandardUserSystemClock, "GetStandardUserSystemClock"},
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ class SharedMemory;
 | 
			
		||||
class Time final : public Module::Interface {
 | 
			
		||||
public:
 | 
			
		||||
    explicit Time(std::shared_ptr<Module> time, std::shared_ptr<SharedMemory> shared_memory,
 | 
			
		||||
                  const char* name);
 | 
			
		||||
                  Core::System& system, const char* name);
 | 
			
		||||
    ~Time() override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -126,8 +126,8 @@ private:
 | 
			
		||||
 | 
			
		||||
class ISteadyClock final : public ServiceFramework<ISteadyClock> {
 | 
			
		||||
public:
 | 
			
		||||
    ISteadyClock(std::shared_ptr<SharedMemory> shared_memory)
 | 
			
		||||
        : ServiceFramework("ISteadyClock"), shared_memory(shared_memory) {
 | 
			
		||||
    ISteadyClock(std::shared_ptr<SharedMemory> shared_memory, Core::System& system)
 | 
			
		||||
        : ServiceFramework("ISteadyClock"), shared_memory(shared_memory), system(system) {
 | 
			
		||||
        static const FunctionInfo functions[] = {
 | 
			
		||||
            {0, &ISteadyClock::GetCurrentTimePoint, "GetCurrentTimePoint"},
 | 
			
		||||
        };
 | 
			
		||||
@@ -150,12 +150,13 @@ private:
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    SteadyClockTimePoint GetCurrentTimePoint() const {
 | 
			
		||||
        const auto& core_timing = Core::System::GetInstance().CoreTiming();
 | 
			
		||||
        const auto& core_timing = system.CoreTiming();
 | 
			
		||||
        const auto ms = Core::Timing::CyclesToMs(core_timing.GetTicks());
 | 
			
		||||
        return {static_cast<u64_le>(ms.count() / 1000), {}};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    std::shared_ptr<SharedMemory> shared_memory;
 | 
			
		||||
    Core::System& system;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class ITimeZoneService final : public ServiceFramework<ITimeZoneService> {
 | 
			
		||||
@@ -290,7 +291,7 @@ void Module::Interface::GetStandardSteadyClock(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
 | 
			
		||||
    rb.Push(RESULT_SUCCESS);
 | 
			
		||||
    rb.PushIpcInterface<ISteadyClock>(shared_memory);
 | 
			
		||||
    rb.PushIpcInterface<ISteadyClock>(shared_memory, system);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Module::Interface::GetTimeZoneService(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
@@ -325,7 +326,7 @@ void Module::Interface::GetClockSnapshot(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const auto& core_timing = Core::System::GetInstance().CoreTiming();
 | 
			
		||||
    const auto& core_timing = system.CoreTiming();
 | 
			
		||||
    const auto ms = Core::Timing::CyclesToMs(core_timing.GetTicks());
 | 
			
		||||
    const SteadyClockTimePoint steady_clock_time_point{static_cast<u64_le>(ms.count() / 1000), {}};
 | 
			
		||||
 | 
			
		||||
@@ -407,8 +408,10 @@ void Module::Interface::SetStandardUserSystemClockAutomaticCorrectionEnabled(
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Module::Interface::Interface(std::shared_ptr<Module> time,
 | 
			
		||||
                             std::shared_ptr<SharedMemory> shared_memory, const char* name)
 | 
			
		||||
    : ServiceFramework(name), time(std::move(time)), shared_memory(std::move(shared_memory)) {}
 | 
			
		||||
                             std::shared_ptr<SharedMemory> shared_memory, Core::System& system,
 | 
			
		||||
                             const char* name)
 | 
			
		||||
    : ServiceFramework(name), time(std::move(time)), shared_memory(std::move(shared_memory)),
 | 
			
		||||
      system(system) {}
 | 
			
		||||
 | 
			
		||||
Module::Interface::~Interface() = default;
 | 
			
		||||
 | 
			
		||||
@@ -416,9 +419,11 @@ void InstallInterfaces(Core::System& system) {
 | 
			
		||||
    auto time = std::make_shared<Module>();
 | 
			
		||||
    auto shared_mem = std::make_shared<SharedMemory>(system);
 | 
			
		||||
 | 
			
		||||
    std::make_shared<Time>(time, shared_mem, "time:a")->InstallAsService(system.ServiceManager());
 | 
			
		||||
    std::make_shared<Time>(time, shared_mem, "time:s")->InstallAsService(system.ServiceManager());
 | 
			
		||||
    std::make_shared<Time>(std::move(time), shared_mem, "time:u")
 | 
			
		||||
    std::make_shared<Time>(time, shared_mem, system, "time:a")
 | 
			
		||||
        ->InstallAsService(system.ServiceManager());
 | 
			
		||||
    std::make_shared<Time>(time, shared_mem, system, "time:s")
 | 
			
		||||
        ->InstallAsService(system.ServiceManager());
 | 
			
		||||
    std::make_shared<Time>(std::move(time), shared_mem, system, "time:u")
 | 
			
		||||
        ->InstallAsService(system.ServiceManager());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -80,7 +80,8 @@ public:
 | 
			
		||||
    class Interface : public ServiceFramework<Interface> {
 | 
			
		||||
    public:
 | 
			
		||||
        explicit Interface(std::shared_ptr<Module> time,
 | 
			
		||||
                           std::shared_ptr<SharedMemory> shared_memory, const char* name);
 | 
			
		||||
                           std::shared_ptr<SharedMemory> shared_memory, Core::System& system,
 | 
			
		||||
                           const char* name);
 | 
			
		||||
        ~Interface() override;
 | 
			
		||||
 | 
			
		||||
        void GetStandardUserSystemClock(Kernel::HLERequestContext& ctx);
 | 
			
		||||
@@ -97,6 +98,7 @@ public:
 | 
			
		||||
    protected:
 | 
			
		||||
        std::shared_ptr<Module> time;
 | 
			
		||||
        std::shared_ptr<SharedMemory> shared_memory;
 | 
			
		||||
        Core::System& system;
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user