diff options
author | Vic (Chun-Ju) Yang <victoryang@chromium.org> | 2014-01-08 11:09:59 +0800 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-01-09 20:26:10 +0000 |
commit | 94172eba44f741204566cd6548f625169f11c589 (patch) | |
tree | 0f64fbcd3ba9f3ef48ef1335058fcdbd16ba7e9b /test/timer_dos.c | |
parent | b6f8f36aa426b84d673464a15b37df669ecad57c (diff) | |
download | chrome-ec-94172eba44f741204566cd6548f625169f11c589.tar.gz |
Fix and enable timer_dos test
This adds golden wake count for each task and check at the end of the
test. The golden wake count is calculated with the seeds and the pseudo
random number generator.
BUG=chrome-os-partner:23800
TEST=Pass the test
BRANCH=None
Change-Id: I7e90336b3f0b0355795ada7baf7c052a047ee302
Signed-off-by: Vic (Chun-Ju) Yang <victoryang@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/181734
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'test/timer_dos.c')
-rw-r--r-- | test/timer_dos.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/test/timer_dos.c b/test/timer_dos.c index f941adea51..0c0f48c0a2 100644 --- a/test/timer_dos.c +++ b/test/timer_dos.c @@ -17,11 +17,28 @@ #define TEST_TIME (3 * SECOND) +#define ERROR_MARGIN 5 + +static int calculate_golden(uint32_t seed) +{ + int golden = 0; + uint32_t elapsed = 0; + while (1) { + elapsed += PERIOD_US(seed); + ++golden; + if (elapsed >= TEST_TIME) + return golden; + seed = prng(seed); + } +} + int task_timer(void *seed) { - uint32_t num = (uint32_t)seed; + uint32_t num = (uint32_t)(uintptr_t)seed; + int golden_cnt = calculate_golden(num); task_id_t id = task_get_current(); timestamp_t start; + int cnt = 0; while (1) { task_wait_event(-1); @@ -33,9 +50,19 @@ int task_timer(void *seed) /* Wait for a "random" period */ task_wait_event(PERIOD_US(num)); ccprintf("%01d\n", id); + cnt++; /* next pseudo random delay */ num = prng(num); } + ccprintf("Task %d: Count=%d Golden=%d\n", id, cnt, golden_cnt); + cnt -= golden_cnt; + if (cnt < 0) + cnt = -cnt; + if (cnt > ERROR_MARGIN) { + ccprintf("Count differs from Golden by more than %d!\n", + ERROR_MARGIN); + test_fail(); + } } return EC_SUCCESS; @@ -43,8 +70,11 @@ int task_timer(void *seed) void run_test(void) { + wait_for_task_started(); task_wake(TASK_ID_TMRD); task_wake(TASK_ID_TMRC); task_wake(TASK_ID_TMRB); task_wake(TASK_ID_TMRA); + usleep(TEST_TIME + SECOND); + test_pass(); } |