Horizon: Impl Prepo, Fixes bugs, Clean things (#4220)

* Horizon: Impl Prepo, Fixes bugs, Clean things

* remove ToArray()

* resultCode > status

* Remove old services

* Addresses gdkchan's comments and more cleanup

* Addresses Gdkchan's feedback 2

* Reorganize services, make sure service are loaded before guest

Co-Authored-By: gdkchan <5624669+gdkchan@users.noreply.github.com>

* Create interfaces for lm and sm

Co-authored-by: gdkchan <5624669+gdkchan@users.noreply.github.com>
This commit is contained in:
Ac_K 2023-01-08 13:13:39 +01:00 committed by GitHub
parent 3ffceab1fb
commit 550747eac6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
83 changed files with 1106 additions and 880 deletions

View file

@ -1,22 +1,58 @@
using Ryujinx.Horizon.LogManager;
using Ryujinx.Horizon.Prepo;
using System.Collections.Generic;
using System.Threading;
namespace Ryujinx.Horizon
{
public static class ServiceTable
public class ServiceTable
{
public static IEnumerable<ServiceEntry> GetServices(HorizonOptions options)
private int _readyServices;
private int _totalServices;
private readonly ManualResetEvent _servicesReadyEvent = new(false);
public IEnumerable<ServiceEntry> GetServices(HorizonOptions options)
{
List<ServiceEntry> entries = new List<ServiceEntry>();
List<ServiceEntry> entries = new();
void RegisterService<T>() where T : IService
{
entries.Add(new ServiceEntry(T.Main, options));
entries.Add(new ServiceEntry(T.Main, this, options));
}
RegisterService<LmMain>();
RegisterService<PrepoMain>();
_totalServices = entries.Count;
return entries;
}
internal void SignalServiceReady()
{
if (Interlocked.Increment(ref _readyServices) == _totalServices)
{
_servicesReadyEvent.Set();
}
}
public void WaitServicesReady()
{
_servicesReadyEvent.WaitOne();
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
_servicesReadyEvent.Dispose();
}
}
public void Dispose()
{
Dispose(true);
}
}
}
}