blob: 2b7c33060e1610ebdf20fe3f0bc6c73ddd98bc92 [file] [log] [blame]
# Copyright 2011 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Check timers behavior
#
import time
def one_pass(helper):
helper.wait_output("=== Timer calibration ===")
res = helper.wait_output(
"back-to-back get_time : (?P<lat>[0-9]+) us", use_re=True
)["lat"]
minlat = int(res)
helper.trace("get_time latency %d us\n" % minlat)
helper.wait_output("sleep 1s")
t0 = time.time()
second = helper.wait_output(
"done. delay = (?P<second>[0-9]+) us", use_re=True
)["second"]
t1 = time.time()
secondreal = t1 - t0
secondlat = int(second) - 1000000
helper.trace(
"1s timer latency %d us / real time %f s\n" % (secondlat, secondreal)
)
us = {}
for pow2 in range(7):
delay = 1 << (7 - pow2)
us[delay] = helper.wait_output(
"%d us => (?P<us>[0-9]+) us" % delay, use_re=True
)["us"]
helper.wait_output("Done.")
return minlat, secondlat, secondreal
def test(helper):
one_pass(helper)
helper.ec_command("reboot")
helper.wait_output("--- UART initialized")
# get the timing results on the second pass
# to avoid binary translation overhead
minlat, secondlat, secondreal = one_pass(helper)
# check that the timings somewhat make sense
if minlat > 220 or secondlat > 500 or abs(secondreal - 1.0) > 0.200:
helper.fail(
"imprecise timings "
+ "(get_time %d us sleep %d us / real time %.3f s)"
% (minlat, secondlat, secondreal)
)
return True # PASS !