aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Kernel
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2018-09-19 12:16:20 -0300
committerGitHub <noreply@github.com>2018-09-19 12:16:20 -0300
commit99b2692425ff4045f103cde0745624b9b41d6fe6 (patch)
tree3d41d69a65257f5dd6000b3b85d97e10904ed29e /Ryujinx.HLE/HOS/Kernel
parentfae097408e5ef28848e97022766017e540b0da37 (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.cs10
-rw-r--r--Ryujinx.HLE/HOS/Kernel/SchedulerThread.cs48
-rw-r--r--Ryujinx.HLE/HOS/Kernel/SvcThread.cs2
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)