vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Tue May 24 22:09:34 2016 +0300| [1012171ff5d0da68e48e1a010c018e4bdeae957a] | committer: Rémi Denis-Courmont
test: robustify timer test > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1012171ff5d0da68e48e1a010c018e4bdeae957a --- src/test/timer.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/test/timer.c b/src/test/timer.c index 2525bf8..fa0a4fd 100644 --- a/src/test/timer.c +++ b/src/test/timer.c @@ -34,6 +34,7 @@ struct timer_data { vlc_timer_t timer; vlc_mutex_t lock; + vlc_cond_t wait; unsigned count; }; @@ -43,6 +44,7 @@ static void callback (void *ptr) vlc_mutex_lock (&data->lock); data->count += 1 + vlc_timer_getoverrun (data->timer); + vlc_cond_signal (&data->wait); vlc_mutex_unlock (&data->lock); } @@ -50,9 +52,11 @@ static void callback (void *ptr) int main (void) { struct timer_data data; + mtime_t ts; int val; vlc_mutex_init (&data.lock); + vlc_cond_init (&data.wait); data.count = 0; val = vlc_timer_create (&data.timer, callback, &data); @@ -70,28 +74,38 @@ int main (void) assert (val == 0); /* Relative timer */ + ts = mdate (); vlc_timer_schedule (data.timer, false, 1, CLOCK_FREQ / 100); - msleep (CLOCK_FREQ / 10); + vlc_mutex_lock (&data.lock); - data.count += vlc_timer_getoverrun (data.timer); - printf ("Count = %u\n", data.count); - assert (data.count >= 10); + while (data.count <= 10) + vlc_cond_wait(&data.wait, &data.lock); + + ts = mdate () - ts; + printf ("%u iterations in %"PRId64" us\n", data.count, ts); data.count = 0; vlc_mutex_unlock (&data.lock); + assert(ts >= (CLOCK_FREQ / 10)); + vlc_timer_schedule (data.timer, false, 0, 0); /* Absolute timer */ - mtime_t now = mdate (); + ts = mdate (); + + vlc_timer_schedule (data.timer, true, ts + CLOCK_FREQ / 10, + CLOCK_FREQ / 100); - vlc_timer_schedule (data.timer, true, now, CLOCK_FREQ / 100); - msleep (CLOCK_FREQ / 10); vlc_mutex_lock (&data.lock); - data.count += vlc_timer_getoverrun (data.timer); - printf ("Count = %u\n", data.count); - assert (data.count >= 10); + while (data.count <= 10) + vlc_cond_wait(&data.wait, &data.lock); + + ts = mdate () - ts; + printf ("%u iterations in %"PRId64" us\n", data.count, ts); vlc_mutex_unlock (&data.lock); + assert(ts >= (CLOCK_FREQ / 5)); vlc_timer_destroy (data.timer); + vlc_cond_destroy (&data.wait); vlc_mutex_destroy (&data.lock); return 0; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
