9 #ifdef PLATFORM_WINDOWS
17 #ifdef PLATFORM_WINDOWS
19 min_timer_resolution ()
21 static UINT min_res_ms = 0;
26 set_min_timer_resolution ()
30 if (timeGetDevCaps(&caps,
sizeof(TIMECAPS)) != TIMERR_NOERROR) {
31 cerr <<
"Could not get timer device capabilities..." << endl;
33 if (timeBeginPeriod(caps.wPeriodMin) != TIMERR_NOERROR) {
34 cerr <<
"Could not set minimum timer resolution to: " << caps.wPeriodMin <<
"ms" << endl;
38 cerr <<
"Multimedia timer resolution set to: " << caps.wPeriodMin <<
"ms" << endl;
39 min_timer_resolution() = caps.wPeriodMin;
47 reset_timer_resolution ()
49 if (min_timer_resolution()) {
50 if (timeEndPeriod(min_timer_resolution()) != TIMERR_NOERROR) {
51 cerr <<
"Could not reset timer resolution" << endl;
54 cerr <<
"Multimedia timer resolution reset" << endl;
67 std::ostringstream oss;
68 oss << name <<
" Load.";
80 }
while (timing.
elapsed () < load_usecs);
82 oss <<
"Expected = " << load_usecs;
83 oss <<
", Elapsed = " << timing.
elapsed ();
92 cerr <<
"Timing Summary: " << m_current_test_name << endl;
94 if (m_idle_timing_data.size()) {
95 cerr <<
"Idle Timing: " << m_idle_timing_data.summary();
97 if (m_fast_timing_data.size()) {
98 cerr <<
"Fast Timing: " << m_fast_timing_data.summary();
100 if (m_rapid1_timing_data.size()) {
101 cerr <<
"Rapid1 Timing: " << m_rapid1_timing_data.summary();
103 if (m_rapid2_timing_data.size()) {
104 cerr <<
"Rapid2 Timing: " << m_rapid2_timing_data.summary();
119 m_fast_timing_data.add_interval ();
123 simulate_load (
"Rapid1", 4000);
137 m_rapid1_timing_data.add_interval ();
139 simulate_load (
"Rapid1", rapid1_timer_usecs () * 0.5);
141 simulate_load (
"Rapid1", 2000);
148 on_rapid1_timeout ();
155 m_rapid2_timing_data.add_interval ();
157 simulate_load (
"Rapid2", rapid2_timer_usecs () * 0.5);
159 simulate_load (
"Rapid2", 2000);
166 on_rapid2_timeout ();
173 m_idle_timing_data.add_interval ();
175 simulate_load (
"Idle", rapid2_timer_usecs ());
183 cerr <<
"Quit Handler" << endl;
191 m_idle_timing_data.reset ();
192 m_fast_timing_data.reset ();
193 m_rapid1_timing_data.reset ();
194 m_rapid2_timing_data.reset ();
200 m_idle_timing_data.start_timing ();
201 m_fast_timing_data.start_timing ();
202 m_rapid1_timing_data.start_timing ();
203 m_rapid2_timing_data.start_timing ();
244 connect_quit_timeout ();
246 m_main = Glib::MainLoop::create (m_context);
253 m_current_test_name =
"testGlibTimeoutSources";
254 _testGlibTimeoutSources ();
260 m_context = Glib::MainContext::create ();
262 GSource * second_timeout_source = g_timeout_source_new (second_timer_ms ());
266 g_source_attach (second_timeout_source, m_context->gobj());
268 if (m_connect_idle) {
269 connect_idle_handler ();
270 reset_timing_run_main ();
273 GSource * fast_timeout_source = g_timeout_source_new (fast_timer_ms ());
277 g_source_attach (fast_timeout_source, m_context->gobj());
280 reset_timing_run_main ();
282 GSource * rapid1_timeout_source = g_timeout_source_new (rapid1_timer_ms ());
286 g_source_attach (rapid1_timeout_source, m_context->gobj());
289 reset_timing_run_main ();
291 GSource * rapid2_timeout_source = g_timeout_source_new (rapid2_timer_ms ());
295 g_source_attach (rapid2_timeout_source, m_context->gobj());
298 reset_timing_run_main ();
301 g_source_destroy (second_timeout_source);
302 g_source_unref (second_timeout_source);
304 g_source_destroy (fast_timeout_source);
305 g_source_unref (fast_timeout_source);
307 g_source_destroy (rapid1_timeout_source);
308 g_source_unref (rapid1_timeout_source);
310 g_source_destroy (rapid2_timeout_source);
311 g_source_unref (rapid2_timeout_source);
317 m_current_test_name =
"testGlibmmSignalTimeouts";
318 _testGlibmmSignalTimeouts ();
324 m_context = Glib::MainContext::get_default ();
328 if (m_connect_idle) {
329 connect_idle_handler ();
330 reset_timing_run_main ();
335 reset_timing_run_main ();
339 reset_timing_run_main ();
343 reset_timing_run_main ();
349 m_current_test_name =
"testGlibmmTimeoutSources";
350 _testGlibmmTimeoutSources ();
356 m_context = Glib::MainContext::create ();
358 const Glib::RefPtr<Glib::TimeoutSource> second_source = Glib::TimeoutSource::create(second_timer_ms());
361 second_source->attach(m_context);
363 if (m_connect_idle) {
364 connect_idle_handler ();
365 reset_timing_run_main ();
368 const Glib::RefPtr<Glib::TimeoutSource> fast_source = Glib::TimeoutSource::create(fast_timer_ms());
371 fast_source->attach(m_context);
373 reset_timing_run_main ();
375 const Glib::RefPtr<Glib::TimeoutSource> rapid1_source = Glib::TimeoutSource::create(rapid1_timer_ms());
378 rapid1_source->attach(m_context);
380 reset_timing_run_main ();
382 const Glib::RefPtr<Glib::TimeoutSource> rapid2_source = Glib::TimeoutSource::create(rapid2_timer_ms());
385 rapid2_source->attach(m_context);
387 reset_timing_run_main ();
393 const Glib::RefPtr<Glib::IdleSource> idle_source = Glib::IdleSource::create();
396 idle_source->attach(m_context);
402 const Glib::RefPtr<Glib::TimeoutSource> quit_source = Glib::TimeoutSource::create(test_length_ms());
405 quit_source->attach(m_context);
411 m_current_test_name =
"testTimers";
418 m_context = Glib::MainContext::create ();
423 if (m_connect_idle) {
424 connect_idle_handler ();
426 reset_timing_run_main();
432 reset_timing_run_main();
437 reset_timing_run_main();
442 reset_timing_run_main();
448 m_current_test_name =
"testTimersIdleFrequency";
449 _testTimersIdleFrequency ();
455 m_block_idle =
false;
456 m_connect_idle =
true;
460 m_block_idle =
false;
461 m_connect_idle =
false;
467 m_current_test_name =
"testTimersBlockIdle";
468 _testTimersBlockIdle ();
475 m_connect_idle =
true;
479 m_block_idle =
false;
480 m_connect_idle =
false;
483 #ifdef PLATFORM_WINDOWS
485 TimerTest::testGlibTimeoutSourcesHR ()
487 CPPUNIT_ASSERT(set_min_timer_resolution());
489 m_current_test_name =
"testGlibTimeoutSourcesHR";
490 _testGlibTimeoutSources ();
492 CPPUNIT_ASSERT(reset_timer_resolution());
496 TimerTest::testGlibmmSignalTimeoutsHR ()
498 CPPUNIT_ASSERT(set_min_timer_resolution());
500 m_current_test_name =
"testGlibmmSignalTimeoutsHR";
501 _testGlibmmSignalTimeouts ();
503 CPPUNIT_ASSERT(reset_timer_resolution());
507 TimerTest::testGlibmmTimeoutSourcesHR ()
509 CPPUNIT_ASSERT(set_min_timer_resolution());
511 m_current_test_name =
"testGlibmmTimeoutSourcesHR";
512 _testGlibmmTimeoutSources ();
514 CPPUNIT_ASSERT(reset_timer_resolution());
518 TimerTest::testTimersHR ()
520 CPPUNIT_ASSERT(set_min_timer_resolution());
522 m_current_test_name =
"testTimersHR";
525 CPPUNIT_ASSERT(reset_timer_resolution());
529 TimerTest::testTimersIdleFrequencyHR ()
531 CPPUNIT_ASSERT(set_min_timer_resolution());
533 m_current_test_name =
"testTimersIdleFrequencyHR";
534 _testTimersIdleFrequency ();
536 CPPUNIT_ASSERT(reset_timer_resolution());
540 TimerTest::testTimersBlockIdleHR ()
542 CPPUNIT_ASSERT(set_min_timer_resolution());
544 m_current_test_name =
"testTimersIdleFrequencyHR";
545 _testTimersBlockIdle ();
547 CPPUNIT_ASSERT(reset_timer_resolution());
static void simulate_load(const std::string &name, guint64 time_usecs)
void testGlibmmSignalTimeouts()
void testTimersIdleFrequency()
sigc::connection connect(const sigc::slot< void > &slot)
void testGlibmmTimeoutSources()
void testGlibTimeoutSources()
void connect_quit_timeout()
static gboolean _fast_timeout_handler(void *)
bool on_rapid1_timeout_glibmm()
void testTimersBlockIdle()
static gboolean _second_timeout_handler(void *)
void connect_idle_handler()
CPPUNIT_TEST_SUITE_REGISTRATION(TimerTest)
static gboolean _rapid1_timeout_handler(void *)
static gboolean _rapid2_timeout_handler(void *)
void _testGlibmmTimeoutSources()
bool on_fast_timeout_glibmm()
uint64_t elapsed() const
Elapsed time in microseconds.
void _testTimersBlockIdle()
void _testGlibTimeoutSources()
void reset_timing_run_main()
bool on_second_timeout_glibmm()
bool on_rapid2_timeout_glibmm()
void _testTimersIdleFrequency()
void _testGlibmmSignalTimeouts()