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
This commit is contained in:
parent
fae097408e
commit
99b2692425
7 changed files with 33 additions and 66 deletions
|
@ -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.
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -356,7 +356,10 @@ namespace Ryujinx.HLE.HOS
|
|||
{
|
||||
if (sender is AThread Thread)
|
||||
{
|
||||
Threads.TryRemove(Thread.ThreadState.Tpidr, out KThread KernelThread);
|
||||
if (Threads.TryRemove(Thread.ThreadState.Tpidr, out KThread KernelThread))
|
||||
{
|
||||
Device.System.Scheduler.RemoveThread(KernelThread);
|
||||
}
|
||||
}
|
||||
|
||||
if (Threads.Count == 0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue