diff options
Diffstat (limited to 'Ryujinx.HLE/HOS/Horizon.cs')
-rw-r--r-- | Ryujinx.HLE/HOS/Horizon.cs | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/Ryujinx.HLE/HOS/Horizon.cs b/Ryujinx.HLE/HOS/Horizon.cs index 7de9bdf3..b93ebc03 100644 --- a/Ryujinx.HLE/HOS/Horizon.cs +++ b/Ryujinx.HLE/HOS/Horizon.cs @@ -10,6 +10,8 @@ using Ryujinx.Audio.Integration; using Ryujinx.Audio.Output; using Ryujinx.Audio.Renderer.Device; using Ryujinx.Audio.Renderer.Server; +using Ryujinx.Cpu; +using Ryujinx.Cpu.Jit; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS.Kernel; using Ryujinx.HLE.HOS.Kernel.Memory; @@ -57,6 +59,9 @@ namespace Ryujinx.HLE.HOS internal Switch Device { get; private set; } + internal ITickSource TickSource { get; } + internal ICpuEngine CpuEngine { get; } + internal SurfaceFlinger SurfaceFlinger { get; private set; } internal AudioManager AudioManager { get; private set; } internal AudioOutputManager AudioOutputManager { get; private set; } @@ -121,7 +126,11 @@ namespace Ryujinx.HLE.HOS public Horizon(Switch device) { + TickSource = new TickSource(KernelConstants.CounterFrequency); + CpuEngine = new JitEngine(TickSource); + KernelContext = new KernelContext( + TickSource, device, device.Memory, device.Configuration.MemoryConfiguration.ToKernelMemorySize(), @@ -215,40 +224,40 @@ namespace Ryujinx.HLE.HOS internalOffset = new TimeSpanType(-internalOffset.NanoSeconds); // First init the standard steady clock - TimeServiceManager.Instance.SetupStandardSteadyClock(null, clockSourceId, systemTime, internalOffset, TimeSpanType.Zero, false); - TimeServiceManager.Instance.SetupStandardLocalSystemClock(null, new SystemClockContext(), systemTime.ToSeconds()); + TimeServiceManager.Instance.SetupStandardSteadyClock(TickSource, clockSourceId, systemTime, internalOffset, TimeSpanType.Zero, false); + TimeServiceManager.Instance.SetupStandardLocalSystemClock(TickSource, new SystemClockContext(), systemTime.ToSeconds()); if (NxSettings.Settings.TryGetValue("time!standard_network_clock_sufficient_accuracy_minutes", out object standardNetworkClockSufficientAccuracyMinutes)) { TimeSpanType standardNetworkClockSufficientAccuracy = new TimeSpanType((int)standardNetworkClockSufficientAccuracyMinutes * 60000000000); // The network system clock needs a valid system clock, as such we setup this system clock using the local system clock. - TimeServiceManager.Instance.StandardLocalSystemClock.GetClockContext(null, out SystemClockContext localSytemClockContext); + TimeServiceManager.Instance.StandardLocalSystemClock.GetClockContext(TickSource, out SystemClockContext localSytemClockContext); TimeServiceManager.Instance.SetupStandardNetworkSystemClock(localSytemClockContext, standardNetworkClockSufficientAccuracy); } - TimeServiceManager.Instance.SetupStandardUserSystemClock(null, false, SteadyClockTimePoint.GetRandom()); + TimeServiceManager.Instance.SetupStandardUserSystemClock(TickSource, false, SteadyClockTimePoint.GetRandom()); // FIXME: TimeZone should be init here but it's actually done in ContentManager TimeServiceManager.Instance.SetupEphemeralNetworkSystemClock(); - DatabaseImpl.Instance.InitializeDatabase(LibHacHorizonManager.SdbClient); + DatabaseImpl.Instance.InitializeDatabase(TickSource, LibHacHorizonManager.SdbClient); HostSyncpoint = new NvHostSyncpt(device); SurfaceFlinger = new SurfaceFlinger(device); - InitializeAudioRenderer(); + InitializeAudioRenderer(TickSource); InitializeServices(); } - private void InitializeAudioRenderer() + private void InitializeAudioRenderer(ITickSource tickSource) { AudioManager = new AudioManager(); AudioOutputManager = new AudioOutputManager(); AudioInputManager = new AudioInputManager(); - AudioRendererManager = new AudioRendererManager(); + AudioRendererManager = new AudioRendererManager(tickSource); AudioRendererManager.SetVolume(Device.Configuration.AudioVolume); AudioDeviceSessionRegistry = new VirtualDeviceSessionRegistry(); @@ -492,12 +501,12 @@ namespace Ryujinx.HLE.HOS if (pause && !IsPaused) { Device.AudioDeviceDriver.GetPauseEvent().Reset(); - ARMeilleure.State.ExecutionContext.SuspendCounter(); + TickSource.Suspend(); } else if (!pause && IsPaused) { Device.AudioDeviceDriver.GetPauseEvent().Set(); - ARMeilleure.State.ExecutionContext.ResumeCounter(); + TickSource.Resume(); } } IsPaused = pause; |