summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authornitsuja <nitsuja-@hotmail.com>2012-01-07 20:22:48 -0800
committernitsuja <nitsuja-@hotmail.com>2012-01-07 20:22:48 -0800
commitdaefb3b550e27f291beb78aaea2bc9c9dc77ac78 (patch)
tree223136bf543a74c4f3109a3e8571fa5285c1edae /Source/Core
parentb33be736cd41292c964611385c1dc792364a1119 (diff)
a small thread synchronization speedup for dual core mode.
it's most noticeable in games where the CPU is running behind compared to the GPU.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Common/Src/StdThread.h2
-rw-r--r--Source/Core/VideoCommon/Src/Fifo.cpp16
2 files changed, 13 insertions, 5 deletions
diff --git a/Source/Core/Common/Src/StdThread.h b/Source/Core/Common/Src/StdThread.h
index 6e9e903561..661d87cfd1 100644
--- a/Source/Core/Common/Src/StdThread.h
+++ b/Source/Core/Common/Src/StdThread.h
@@ -279,7 +279,7 @@ namespace this_thread
inline void yield()
{
#ifdef _WIN32
- Sleep(0);
+ SwitchToThread();
#else
sleep(0);
#endif
diff --git a/Source/Core/VideoCommon/Src/Fifo.cpp b/Source/Core/VideoCommon/Src/Fifo.cpp
index 842ff49e78..7330169ddd 100644
--- a/Source/Core/VideoCommon/Src/Fifo.cpp
+++ b/Source/Core/VideoCommon/Src/Fifo.cpp
@@ -171,14 +171,22 @@ void RunGpuLoop()
CommandProcessor::isPossibleWaitingSetDrawDone = false;
}
- fifo.isGpuReadingData = false;
-
-
if (EmuRunningState)
- Common::YieldCPU();
+ {
+ if (fifo.isGpuReadingData)
+ {
+ fifo.isGpuReadingData = false;
+ Common::YieldCPU();
+ }
+ else
+ {
+ SLEEP(1);
+ }
+ }
else
{
// While the emu is paused, we still handle async request such as Savestates then sleep.
+ fifo.isGpuReadingData = false;
while (!EmuRunningState)
{
g_video_backend->PeekMessages();