aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2018-09-18 20:36:43 -0300
committerGitHub <noreply@github.com>2018-09-18 20:36:43 -0300
commitb8133c19971c7a2026af803003fafedbdb70488e (patch)
tree84f4630e897ccd3f77b86051241a22a6cf45193d /Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs
parent33e2810ef36fe0cf613aecd4c609f425aed02539 (diff)
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
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs')
-rw-r--r--Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs36
1 files changed, 13 insertions, 23 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs b/Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs
index a8493758..dcdf5d17 100644
--- a/Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs
+++ b/Ryujinx.HLE/HOS/Services/Vi/NvFlinger.cs
@@ -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;
- }
-
- if (Disposed)
- {
- break;
- }
+ 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();
}
}