summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2013-02-04 20:57:08 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2013-02-04 20:57:08 -0600
commitd5ec631337c7dbcf5ceecdb2ec6fac9fdbdc644b (patch)
tree2058914f87d6f568d96951799f7b912f3e50a46c /Source/Core
parent03d9cca2fee67da0ca73e93bc2e867a02bb1a2bd (diff)
Make real wiimote speaker not cause massive input delays.
Fixes issue 5966.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp25
-rw-r--r--Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h3
2 files changed, 13 insertions, 15 deletions
diff --git a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp
index 2381793f30..ce08c7d0da 100644
--- a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp
+++ b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp
@@ -181,23 +181,23 @@ bool Wiimote::Read()
bool Wiimote::Write()
{
Report rpt;
- bool audio_written = false;
- if (m_audio_reports.Pop(rpt))
+ if (last_audio_report.GetTimeDifference() > 6 && m_audio_reports.Pop(rpt))
{
+ last_audio_report.Update();
+
IOWrite(rpt.first, rpt.second);
delete[] rpt.first;
- audio_written = true;
+ return true;
}
-
- if (m_write_reports.Pop(rpt))
+ else if (m_write_reports.Pop(rpt))
{
IOWrite(rpt.first, rpt.second);
delete[] rpt.first;
return true;
- }
+ }
- return audio_written;
+ return false;
}
// Returns the next report that should be sent
@@ -319,14 +319,9 @@ void Wiimote::ThreadFunc()
while (Write()) {}
Common::SleepCurrentThread(1);
#else
- bool read = false;
- while (Write() || (read = true, IsOpen() && Read()))
- {
- if (m_audio_reports.Size() && !read)
- Read();
- Common::SleepCurrentThread(m_audio_reports.Size() ? 5 : 2);
- read = false;
- }
+ bool const did_something = Write() || Read();
+ if (!did_something)
+ Common::SleepCurrentThread(1);
#endif
}
}
diff --git a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h
index 9fdb305a56..24fcea53e6 100644
--- a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h
+++ b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h
@@ -25,6 +25,7 @@
#include "ChunkFile.h"
#include "Thread.h"
#include "FifoQueue.h"
+#include "Timer.h"
#include "../Wiimote.h"
#include "../WiimoteEmu/WiimoteEmu.h"
@@ -103,6 +104,8 @@ private:
Common::FifoQueue<Report> m_read_reports;
Common::FifoQueue<Report> m_write_reports;
Common::FifoQueue<Report> m_audio_reports;
+
+ Common::Timer last_audio_report;
};
extern std::mutex g_refresh_lock;