diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2018-09-19 12:16:20 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-09-19 12:16:20 -0300 |
| commit | 99b2692425ff4045f103cde0745624b9b41d6fe6 (patch) | |
| tree | 3d41d69a65257f5dd6000b3b85d97e10904ed29e /Ryujinx.HLE/HOS/Kernel | |
| parent | fae097408e5ef28848e97022766017e540b0da37 (diff) | |
Fix performance regression caused by the new scheduler changes (#422)
* Call interrupt less often, remove some leftovers from the old scheduler code
* Remove unneeded attribute
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel')
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/KCoreContext.cs | 10 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/SchedulerThread.cs | 48 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/SvcThread.cs | 2 |
3 files changed, 4 insertions, 56 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/KCoreContext.cs b/Ryujinx.HLE/HOS/Kernel/KCoreContext.cs index 70fe1a61..51f27e2a 100644 --- a/Ryujinx.HLE/HOS/Kernel/KCoreContext.cs +++ b/Ryujinx.HLE/HOS/Kernel/KCoreContext.cs @@ -28,7 +28,10 @@ namespace Ryujinx.HLE.HOS.Kernel Thread.LastScheduledTicks = (uint)Environment.TickCount; } - ContextSwitchNeeded = true; + if (SelectedThread != CurrentThread) + { + ContextSwitchNeeded = true; + } } public void UpdateCurrentThread() @@ -58,10 +61,5 @@ namespace Ryujinx.HLE.HOS.Kernel CurrentThread.Context.Execute(); } } - - public void RemoveThread(KThread Thread) - { - //TODO. - } } }
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Kernel/SchedulerThread.cs b/Ryujinx.HLE/HOS/Kernel/SchedulerThread.cs deleted file mode 100644 index bab7b03e..00000000 --- a/Ryujinx.HLE/HOS/Kernel/SchedulerThread.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Threading; - -namespace Ryujinx.HLE.HOS.Kernel -{ - class SchedulerThread : IDisposable - { - public KThread Thread { get; private set; } - - public SchedulerThread Next { get; set; } - - public bool IsActive { get; set; } - - public AutoResetEvent WaitSync { get; private set; } - public ManualResetEvent WaitActivity { get; private set; } - public AutoResetEvent WaitSched { get; private set; } - - public SchedulerThread(KThread Thread) - { - this.Thread = Thread; - - IsActive = true; - - WaitSync = new AutoResetEvent(false); - - WaitActivity = new ManualResetEvent(true); - - WaitSched = new AutoResetEvent(false); - } - - public void Dispose() - { - Dispose(true); - } - - protected virtual void Dispose(bool Disposing) - { - if (Disposing) - { - WaitSync.Dispose(); - - WaitActivity.Dispose(); - - WaitSched.Dispose(); - } - } - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Kernel/SvcThread.cs b/Ryujinx.HLE/HOS/Kernel/SvcThread.cs index aa6e551b..dc296b06 100644 --- a/Ryujinx.HLE/HOS/Kernel/SvcThread.cs +++ b/Ryujinx.HLE/HOS/Kernel/SvcThread.cs @@ -81,8 +81,6 @@ namespace Ryujinx.HLE.HOS.Kernel CurrentThread.Exit(); System.Scheduler.StopThread(CurrentThread); - - System.Scheduler.CoreContexts[CurrentThread.CurrentCore].RemoveThread(CurrentThread); } private void SvcSleepThread(AThreadState ThreadState) |
