• Daniel Latypov's avatar
    kunit: tool: actually track how long it took to run tests · 5f6aa6d8
    Daniel Latypov authored
    This is a long standing bug in kunit tool.
    Since these files were added, run_kernel() has always yielded lines.
    
    That means, the call to run_kernel() returns before the kernel finishes
    executing tests, potentially before a single line of output is even
    produced.
    
    So code like this
      time_start = time.time()
      result = linux.run_kernel(...)
      time_end = time.time()
    
    would only measure the time taken for python to give back the generator
    object.
    
    From a caller's perspective, the only way to know the kernel has exited
    is for us to consume all the output from the `result` generator object.
    Alternatively, we could change run_kernel() to try and do its own book
    keeping and return the total time, but that doesn't seem worth it.
    
    This change makes us record `time_end` after we're done parsing all the
    output (which should mean we've consumed all of it, or errored out).
    That means we're including in the parsing time as well, but that should
    be quite small, and it's better than claiming it took 0s to run tests.
    
    Let's use this as an example:
    $ ./tools/testing/kunit/kunit.py run --kunitconfig=lib/kunit example
    
    Before:
    Elapsed time: 7.684s total, 0.001s configuring, 4.692s building, 0.000s running
    
    After:
    Elapsed time: 6.283s total, 0.001s configuring, 3.202s building, 3.079s running
    Signed-off-by: default avatarDaniel Latypov <dlatypov@google.com>
    Reviewed-by: default avatarDavid Gow <davidgow@google.com>
    Reviewed-by: default avatarBrendan Higgins <brendanhiggins@google.com>
    Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
    5f6aa6d8
kunit.py 14.3 KB