SystemClockCore.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using Ryujinx.HLE.HOS.Kernel.Threading;
  2. namespace Ryujinx.HLE.HOS.Services.Time.Clock
  3. {
  4. abstract class SystemClockCore
  5. {
  6. private SteadyClockCore _steadyClockCore;
  7. private SystemClockContext _context;
  8. public SystemClockCore(SteadyClockCore steadyClockCore)
  9. {
  10. _steadyClockCore = steadyClockCore;
  11. _context = new SystemClockContext();
  12. _context.SteadyTimePoint.ClockSourceId = steadyClockCore.GetClockSourceId();
  13. }
  14. public virtual SteadyClockCore GetSteadyClockCore()
  15. {
  16. return _steadyClockCore;
  17. }
  18. public virtual ResultCode GetSystemClockContext(KThread thread, out SystemClockContext context)
  19. {
  20. context = _context;
  21. return ResultCode.Success;
  22. }
  23. public virtual ResultCode SetSystemClockContext(SystemClockContext context)
  24. {
  25. _context = context;
  26. return ResultCode.Success;
  27. }
  28. public abstract ResultCode Flush(SystemClockContext context);
  29. public bool IsClockSetup(KThread thread)
  30. {
  31. ResultCode result = GetSystemClockContext(thread, out SystemClockContext context);
  32. if (result == ResultCode.Success)
  33. {
  34. SteadyClockCore steadyClockCore = GetSteadyClockCore();
  35. SteadyClockTimePoint steadyClockTimePoint = steadyClockCore.GetCurrentTimePoint(thread);
  36. return steadyClockTimePoint.ClockSourceId == context.SteadyTimePoint.ClockSourceId;
  37. }
  38. return false;
  39. }
  40. }
  41. }