33use std:: fs:: File ;
44use std:: io;
55use std:: io:: prelude:: Write ;
6+ use std:: time:: Instant ;
67
78use super :: {
89 bench:: fmt_bench_samples,
@@ -14,7 +15,7 @@ use super::{
1415 options:: { Options , OutputFormat } ,
1516 run_tests,
1617 test_result:: TestResult ,
17- time:: TestExecTime ,
18+ time:: { TestExecTime , TestSuiteExecTime } ,
1819 types:: { NamePadding , TestDesc , TestDescAndFn } ,
1920} ;
2021
@@ -49,6 +50,7 @@ pub struct ConsoleTestState {
4950 pub allowed_fail : usize ,
5051 pub filtered_out : usize ,
5152 pub measured : usize ,
53+ pub exec_time : Option < TestSuiteExecTime > ,
5254 pub metrics : MetricMap ,
5355 pub failures : Vec < ( TestDesc , Vec < u8 > ) > ,
5456 pub not_failures : Vec < ( TestDesc , Vec < u8 > ) > ,
@@ -72,6 +74,7 @@ impl ConsoleTestState {
7274 allowed_fail : 0 ,
7375 filtered_out : 0 ,
7476 measured : 0 ,
77+ exec_time : None ,
7578 metrics : MetricMap :: new ( ) ,
7679 failures : Vec :: new ( ) ,
7780 not_failures : Vec :: new ( ) ,
@@ -277,7 +280,14 @@ pub fn run_tests_console(opts: &TestOpts, tests: Vec<TestDescAndFn>) -> io::Resu
277280 } ;
278281 let mut st = ConsoleTestState :: new ( opts) ?;
279282
283+ // Prevent the usage of `Instant` in some cases:
284+ // - It's currently not supported for wasm targets.
285+ // - We disable it for miri because it's not available when isolation is enabled.
286+ let is_instant_supported = !cfg ! ( target_arch = "wasm32" ) && !cfg ! ( miri) ;
287+
288+ let start_time = is_instant_supported. then ( Instant :: now) ;
280289 run_tests ( opts, tests, |x| on_test_event ( & x, & mut st, & mut * out) ) ?;
290+ st. exec_time = start_time. map ( |t| TestSuiteExecTime ( t. elapsed ( ) ) ) ;
281291
282292 assert ! ( st. current_test_count( ) == st. total) ;
283293
0 commit comments