Thread scheduler rewrite (#393)
* Started to rewrite the thread scheduler * Add a single core-like scheduling mode, enabled by default * Clear exclusive monitor on context switch * Add SetThreadActivity, misc fixes * Implement WaitForAddress and SignalToAddress svcs, misc fixes * Misc fixes (on SetActivity and Arbiter), other tweaks * Rebased * Add missing null check * Rename multicore key on config, fix UpdatePriorityInheritance * Make scheduling data MLQs private * nit: Ordering
This commit is contained in:
parent
33e2810ef3
commit
b8133c1997
57 changed files with 3262 additions and 1540 deletions
|
@ -64,7 +64,7 @@ namespace Ryujinx.HLE.HOS.Services.Android
|
|||
|
||||
private BufferEntry[] BufferQueue;
|
||||
|
||||
private ManualResetEvent WaitBufferFree;
|
||||
private AutoResetEvent WaitBufferFree;
|
||||
|
||||
private bool Disposed;
|
||||
|
||||
|
@ -88,7 +88,7 @@ namespace Ryujinx.HLE.HOS.Services.Android
|
|||
|
||||
BufferQueue = new BufferEntry[0x40];
|
||||
|
||||
WaitBufferFree = new ManualResetEvent(false);
|
||||
WaitBufferFree = new AutoResetEvent(false);
|
||||
}
|
||||
|
||||
public long ProcessParcelRequest(ServiceCtx Context, byte[] ParcelData, int Code)
|
||||
|
@ -220,6 +220,8 @@ namespace Ryujinx.HLE.HOS.Services.Android
|
|||
|
||||
BufferQueue[Slot].State = BufferState.Free;
|
||||
|
||||
WaitBufferFree.Set();
|
||||
|
||||
return MakeReplyParcel(Context, 0);
|
||||
}
|
||||
|
||||
|
@ -336,12 +338,9 @@ namespace Ryujinx.HLE.HOS.Services.Android
|
|||
{
|
||||
BufferQueue[Slot].State = BufferState.Free;
|
||||
|
||||
BinderEvent.WaitEvent.Set();
|
||||
BinderEvent.Signal();
|
||||
|
||||
lock (WaitBufferFree)
|
||||
{
|
||||
WaitBufferFree.Set();
|
||||
}
|
||||
WaitBufferFree.Set();
|
||||
}
|
||||
|
||||
private int GetFreeSlotBlocking(int Width, int Height)
|
||||
|
@ -350,19 +349,14 @@ namespace Ryujinx.HLE.HOS.Services.Android
|
|||
|
||||
do
|
||||
{
|
||||
lock (WaitBufferFree)
|
||||
if ((Slot = GetFreeSlot(Width, Height)) != -1)
|
||||
{
|
||||
if ((Slot = GetFreeSlot(Width, Height)) != -1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (Disposed)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
WaitBufferFree.Reset();
|
||||
if (Disposed)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
WaitBufferFree.WaitOne();
|
||||
|
@ -409,11 +403,7 @@ namespace Ryujinx.HLE.HOS.Services.Android
|
|||
{
|
||||
Disposed = true;
|
||||
|
||||
lock (WaitBufferFree)
|
||||
{
|
||||
WaitBufferFree.Set();
|
||||
}
|
||||
|
||||
WaitBufferFree.Set();
|
||||
WaitBufferFree.Dispose();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue