using Ryujinx.HLE.HOS.Kernel.Threading;
namespace Ryujinx.HLE.HOS.Services.Time.Clock
{
class StandardUserSystemClockCore : SystemClockCore
private StandardLocalSystemClockCore _localSystemClockCore;
private StandardNetworkSystemClockCore _networkSystemClockCore;
private bool _autoCorrectionEnabled;
private static StandardUserSystemClockCore _instance;
public static StandardUserSystemClockCore Instance
get
if (_instance == null)
_instance = new StandardUserSystemClockCore(StandardLocalSystemClockCore.Instance, StandardNetworkSystemClockCore.Instance);
}
return _instance;
public StandardUserSystemClockCore(StandardLocalSystemClockCore localSystemClockCore, StandardNetworkSystemClockCore networkSystemClockCore) : base(localSystemClockCore.GetSteadyClockCore())
_localSystemClockCore = localSystemClockCore;
_networkSystemClockCore = networkSystemClockCore;
_autoCorrectionEnabled = false;
public override ResultCode Flush(SystemClockContext context)
return ResultCode.NotImplemented;
public override ResultCode GetSystemClockContext(KThread thread, out SystemClockContext context)
ResultCode result = ApplyAutomaticCorrection(thread, false);
context = new SystemClockContext();
if (result == ResultCode.Success)
return _localSystemClockCore.GetSystemClockContext(thread, out context);
return result;
public override ResultCode SetSystemClockContext(SystemClockContext context)
private ResultCode ApplyAutomaticCorrection(KThread thread, bool autoCorrectionEnabled)
ResultCode result = ResultCode.Success;
if (_autoCorrectionEnabled != autoCorrectionEnabled && _networkSystemClockCore.IsClockSetup(thread))
result = _networkSystemClockCore.GetSystemClockContext(thread, out SystemClockContext context);
_localSystemClockCore.SetSystemClockContext(context);
public ResultCode SetAutomaticCorrectionEnabled(KThread thread, bool autoCorrectionEnabled)
ResultCode result = ApplyAutomaticCorrection(thread, autoCorrectionEnabled);
_autoCorrectionEnabled = autoCorrectionEnabled;
public bool IsAutomaticCorrectionEnabled()
return _autoCorrectionEnabled;