@@ -355,10 +355,42 @@ fn run_ui_cargo() {
355
355
#[ test]
356
356
fn compile_test ( ) {
357
357
set_var ( "CLIPPY_DISABLE_DOCS_LINKS" , "true" ) ;
358
- run_ui ( ) ;
359
- run_ui_toml ( ) ;
360
- run_ui_cargo ( ) ;
361
- run_internal_tests ( ) ;
358
+ // The SPEEDTEST_* env variables can be used to check Clippy's performance on your PR. It runs the
359
+ // affected test 1000 times and gets the average.
360
+ if let Ok ( speedtest) = std:: env:: var ( "SPEEDTEST" ) {
361
+ println ! ( "----------- STARTING SPEEDTEST -----------" ) ;
362
+ let f;
363
+ match speedtest. as_str ( ) {
364
+ "ui" => f = run_ui as fn ( ) ,
365
+ "cargo" => f = run_ui_cargo as fn ( ) ,
366
+ "toml" => f = run_ui_toml as fn ( ) ,
367
+ "internal" => f = run_internal_tests as fn ( ) ,
368
+
369
+ _ => panic ! ( "unknown speedtest: {speedtest} || accepted speedtests are: [ui, cargo, toml, internal]" ) ,
370
+ }
371
+
372
+ let iterations;
373
+ if let Ok ( iterations_str) = std:: env:: var ( "SPEEDTEST_ITERATIONS" ) {
374
+ iterations = iterations_str
375
+ . parse :: < u64 > ( )
376
+ . unwrap_or_else ( |_| panic ! ( "Couldn't parse `{}`, please use a valid u64" , iterations_str) ) ;
377
+ } else {
378
+ iterations = 1000 ;
379
+ }
380
+
381
+ let mut sum = 0 ;
382
+ for _ in 0 ..iterations {
383
+ let start = std:: time:: Instant :: now ( ) ;
384
+ f ( ) ;
385
+ sum += start. elapsed ( ) . as_millis ( ) ;
386
+ }
387
+ println ! ( "average {} time: {} millis." , speedtest. to_uppercase( ) , sum / 1000 ) ;
388
+ } else {
389
+ run_ui ( ) ;
390
+ run_ui_toml ( ) ;
391
+ run_ui_cargo ( ) ;
392
+ run_internal_tests ( ) ;
393
+ }
362
394
}
363
395
364
396
const RUSTFIX_COVERAGE_KNOWN_EXCEPTIONS : & [ & str ] = & [
0 commit comments