genode/repos/base/run/timer_accuracy.run
Norman Feske bf62d6b896 Move timer from os to base repository
Since the timer and timeout handling is part of the base library (the
dynamic linker), it belongs to the base repository.

Besides moving the timer and its related infrastructure (alarm, timeout
libs, tests) to the base repository, this patch also moves the timer
from the 'drivers' subdirectory directly to 'src' and disamibuates the
timer's build locations for the various kernels. Otherwise the different
timer implementations could interfere with each other when using one
build directory with multiple kernels.

Note that this patch changes the include paths for the former os/timer,
os/alarm.h, os/duration.h, and os/timed_semaphore.h to base/.

Issue #3101
2019-01-14 12:33:57 +01:00

71 lines
1.9 KiB
Plaintext

# build program images
build { core init timer test/timer_accuracy }
# create directory where boot files are written to
create_boot_directory
# define XML configuration for init
install_config {
<config prio_levels="2">
<parent-provides>
<service name="ROM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
</parent-provides>
<default-route>
<any-service><parent/><any-child/></any-service>
</default-route>
<default caps="100"/>
<start name="timer" priority="0">
<resource name="RAM" quantum="1M"/>
<resource name="CPU" quantum="5"/>
<provides><service name="Timer"/></provides>
</start>
<start name="test-timer_accuracy" priority="-1">
<resource name="RAM" quantum="10M"/>
</start>
</config>
}
# build boot files from source binaries
build_boot_image { core ld.lib.so init timer test-timer_accuracy }
# configure Qemu
append qemu_args " -nographic"
set err_cnt 0
set test_timeout 20
set rounds 9
# wait for initial tic
run_genode_until {\[init -> test-timer_accuracy\].*\n} $test_timeout
set serial_id [output_spawn_id]
# measure the delays between the following tics
for {set i 1} {$i <= $rounds} {incr i} {
set start_time($i) [clock milliseconds]
run_genode_until {\[init -> test-timer_accuracy\].*\n} $test_timeout $serial_id
set end_time($i) [clock milliseconds]
}
# print results and count errors
foreach i [lsort [array names start_time]] {
set class "Good:"
set test_result [expr $end_time($i) - $start_time($i)]
set host_result [expr $i * 1000]
set result_diff [expr abs($test_result - $host_result)]
if {[expr $result_diff > 500]} {
set class "Bad: "
set err_cnt [expr $err_cnt + 1]
}
puts "$class round $i, host measured $host_result ms, test measured $test_result ms"
}
# check the error count
if {[expr $err_cnt > 0]} {
puts "Test failed because of $err_cnt errors"
exit -1
}