aboutsummaryrefslogtreecommitdiff
path: root/engines/testbed/misc.cpp
diff options
context:
space:
mode:
authorNeeraj Kumar2010-06-28 12:58:14 +0000
committerNeeraj Kumar2010-06-28 12:58:14 +0000
commitef1ba0ea15435d178da7a834a487caf4ff8ef9e5 (patch)
tree1b0604022f1bf3a8359fe6700de6c8bc2d6c589c /engines/testbed/misc.cpp
parentcf3d5c27742bf1591ea91b05eb18e600c6ce332c (diff)
downloadscummvm-rg350-ef1ba0ea15435d178da7a834a487caf4ff8ef9e5.tar.gz
scummvm-rg350-ef1ba0ea15435d178da7a834a487caf4ff8ef9e5.tar.bz2
scummvm-rg350-ef1ba0ea15435d178da7a834a487caf4ff8ef9e5.zip
added code to test timers and mutexes, some issues with mutexes present although
svn-id: r50444
Diffstat (limited to 'engines/testbed/misc.cpp')
-rw-r--r--engines/testbed/misc.cpp45
1 files changed, 41 insertions, 4 deletions
diff --git a/engines/testbed/misc.cpp b/engines/testbed/misc.cpp
index 9c722e41a3..11dd7c1510 100644
--- a/engines/testbed/misc.cpp
+++ b/engines/testbed/misc.cpp
@@ -23,6 +23,7 @@
*/
#include "testbed/misc.h"
+#include "common/timer.h"
namespace Testbed {
@@ -34,6 +35,25 @@ void MiscTests::getHumanReadableFormat(TimeDate &td, Common::String &date) {
return;
}
+void MiscTests::timerCallback(void *arg) {
+ // Increment arg which actually points to an int
+ // arg must point to a static data, threads otherwise have their own stack
+ int &ptrToNumTimesExecuted = *((int *) arg);
+ ptrToNumTimesExecuted++;
+ printf("LOG: Inside the timed process!\n");
+}
+
+void MiscTests::criticalSection(void *arg) {
+ SharedVars &sv = *((SharedVars *) arg);
+
+ printf("Before: %d %d\n", sv.first, sv.second);
+ sv.first++;
+ g_system->delayMillis(3000);
+ printf("After waking up: %d %d\n", sv.first, sv.second);
+ sv.second *= sv.first;
+ printf("Finally: %d %d\n", sv.first, sv.second);
+}
+
bool MiscTests::testDateTime() {
TimeDate t1, t2;
g_system->getTimeAndDate(t1);
@@ -70,16 +90,33 @@ bool MiscTests::testDateTime() {
}
bool MiscTests::testTimers() {
- return true;
+ static int numTimesExecuted = 0;
+ if (g_system->getTimerManager()->installTimerProc(timerCallback, 100000, &numTimesExecuted)) {
+ g_system->delayMillis(150);
+ printf("LOG: Timed Process Invoked %d times\n", numTimesExecuted);
+ g_system->getTimerManager()->removeTimerProc(timerCallback);
+
+ if (1 == numTimesExecuted) {
+ return true;
+ }
+ }
+ return false;
}
bool MiscTests::testMutexes() {
- return true;
+ static SharedVars sv = {1, 1, g_system->createMutex()};
+
+ if (g_system->getTimerManager()->installTimerProc(criticalSection, 100000, &sv)) {
+ g_system->delayMillis(150);
+ criticalSection(&sv);
+ g_system->getTimerManager()->removeTimerProc(criticalSection);
+ }
+ return false;
}
MiscTestSuite::MiscTestSuite() {
- addTest("Date/time", &MiscTests::testDateTime);
- addTest("Timers", &MiscTests::testTimers);
+ // addTest("Date/time", &MiscTests::testDateTime);
+ // addTest("Timers", &MiscTests::testTimers);
addTest("Mutexes", &MiscTests::testMutexes);
}
const char *MiscTestSuite::getName() const {