@@ -355,10 +355,42 @@ fn run_ui_cargo() {
355355#[ test]
356356fn compile_test ( ) {
357357 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+ }
362394}
363395
364396const RUSTFIX_COVERAGE_KNOWN_EXCEPTIONS : & [ & str ] = & [
0 commit comments