diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2020-07-17 01:22:13 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-17 14:22:13 +1000 |
| commit | 20774dab14ca8362e716ce87f975be7ea77beead (patch) | |
| tree | c2d3c7b6abd154648d414d1e01ebf1684efc054c /Ryujinx.HLE/HOS/Kernel/Threading | |
| parent | 88619d71b8e4840218c68b712aa184098d2dbccf (diff) | |
Improve kernel WaitSynchronization syscall implementation (#1362)
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/Threading')
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs | 3 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs | 8 |
2 files changed, 10 insertions, 1 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs b/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs index fa9b669e..22610b22 100644 --- a/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs +++ b/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs @@ -1,4 +1,5 @@ using Ryujinx.HLE.HOS.Kernel.Common; +using System; using System.Collections.Generic; namespace Ryujinx.HLE.HOS.Kernel.Threading @@ -12,7 +13,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading _context = context; } - public KernelResult WaitFor(KSynchronizationObject[] syncObjs, long timeout, out int handleIndex) + public KernelResult WaitFor(Span<KSynchronizationObject> syncObjs, long timeout, out int handleIndex) { handleIndex = 0; diff --git a/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs b/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs index 754a1e53..d4603178 100644 --- a/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs +++ b/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs @@ -12,6 +12,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading { class KThread : KSynchronizationObject, IKFutureSchedulerObject { + public const int MaxWaitSyncObjects = 64; + private int _hostThreadRunning; public Thread HostThread { get; private set; } @@ -39,6 +41,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading public ulong TlsAddress => _tlsAddress; public ulong TlsDramAddress { get; private set; } + public KSynchronizationObject[] WaitSyncObjects { get; } + public int[] WaitSyncHandles { get; } + public long LastScheduledTime { get; set; } public LinkedListNode<KThread>[] SiblingsPerCore { get; private set; } @@ -96,6 +101,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading _scheduler = KernelContext.Scheduler; _schedulingData = KernelContext.Scheduler.SchedulingData; + WaitSyncObjects = new KSynchronizationObject[MaxWaitSyncObjects]; + WaitSyncHandles = new int[MaxWaitSyncObjects]; + SiblingsPerCore = new LinkedListNode<KThread>[KScheduler.CpuCoresCount]; _mutexWaiters = new LinkedList<KThread>(); |
