aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Kernel/Threading/KCoreContext.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2020-12-09 19:20:05 -0300
committerGitHub <noreply@github.com>2020-12-09 19:20:05 -0300
commit48278905d1470f89be31668c738397f569af156a (patch)
tree2e35b0695b33c8eb723f5948e3f6f040d84cfe76 /Ryujinx.HLE/HOS/Kernel/Threading/KCoreContext.cs
parent3484265d37732b32951709e5abfa52a260db349d (diff)
Rewrite scheduler context switch code (#1786)
* Rewrite scheduler context switch code * Fix race in UnmapIpcRestorePermission * Fix thread exit issue that could leave the scheduler in a invalid state * Change context switch method to not wait on guest thread, remove spin wait, use SignalAndWait to pass control * Remove multi-core setting (it is always on now) * Re-enable assert * Remove multicore from default config and schema * Fix race in KTimeManager
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/Threading/KCoreContext.cs')
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Threading/KCoreContext.cs79
1 files changed, 0 insertions, 79 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/Threading/KCoreContext.cs b/Ryujinx.HLE/HOS/Kernel/Threading/KCoreContext.cs
deleted file mode 100644
index 0aa12b0d..00000000
--- a/Ryujinx.HLE/HOS/Kernel/Threading/KCoreContext.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using Ryujinx.Common;
-
-namespace Ryujinx.HLE.HOS.Kernel.Threading
-{
- class KCoreContext
- {
- private KScheduler _scheduler;
-
- private HleCoreManager _coreManager;
-
- public bool ContextSwitchNeeded { get; private set; }
-
- public long LastContextSwitchTime { get; private set; }
-
- public long TotalIdleTimeTicks { get; private set; } //TODO
-
- public KThread CurrentThread { get; private set; }
- public KThread SelectedThread { get; private set; }
-
- public KCoreContext(KScheduler scheduler, HleCoreManager coreManager)
- {
- _scheduler = scheduler;
- _coreManager = coreManager;
- }
-
- public void SelectThread(KThread thread)
- {
- SelectedThread = thread;
-
- if (SelectedThread != CurrentThread)
- {
- ContextSwitchNeeded = true;
- }
- }
-
- public void UpdateCurrentThread()
- {
- ContextSwitchNeeded = false;
-
- LastContextSwitchTime = PerformanceCounter.ElapsedMilliseconds;
-
- CurrentThread = SelectedThread;
-
- if (CurrentThread != null)
- {
- long currentTime = PerformanceCounter.ElapsedMilliseconds;
-
- CurrentThread.TotalTimeRunning += currentTime - CurrentThread.LastScheduledTime;
- CurrentThread.LastScheduledTime = currentTime;
- }
- }
-
- public void ContextSwitch()
- {
- ContextSwitchNeeded = false;
-
- LastContextSwitchTime = PerformanceCounter.ElapsedMilliseconds;
-
- if (CurrentThread != null)
- {
- _coreManager.Reset(CurrentThread.HostThread);
- }
-
- CurrentThread = SelectedThread;
-
- if (CurrentThread != null)
- {
- long currentTime = PerformanceCounter.ElapsedMilliseconds;
-
- CurrentThread.TotalTimeRunning += currentTime - CurrentThread.LastScheduledTime;
- CurrentThread.LastScheduledTime = currentTime;
-
- _coreManager.Set(CurrentThread.HostThread);
-
- CurrentThread.Execute();
- }
- }
- }
-} \ No newline at end of file