about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-07-02 15:48:50 +0000
committerbors <bors@rust-lang.org>2023-07-02 15:48:50 +0000
commitea4ca225fb3b22ea8c7dbc0cde87b29f003d85e6 (patch)
tree2d3fae90bdc94a4e9fda3e6cfeb703046685e152 /tests
parent83d0682d5e40efebc6e06510a7012b8fd01b6c51 (diff)
parent57923c3720fad870b1edeed1dbe74f990b431288 (diff)
downloadrust-ea4ca225fb3b22ea8c7dbc0cde87b29f003d85e6.tar.gz
rust-ea4ca225fb3b22ea8c7dbc0cde87b29f003d85e6.zip
Auto merge of #10920 - blyxyas:speedtest, r=llogiq
Add `SPEEDTEST`

In the `master` branch, we currently don't have any way to test the performance of a single lint in changes.
This PR adds `SPEEDTEST`, the environment variable which lets you do a speed test on a lint / category of tests with various configuration options.

Maybe we should merge this with `lintcheck` :thinking:
See the book page for more information.

changelog:none
Diffstat (limited to 'tests')
-rw-r--r--tests/compile-test.rs45
1 files changed, 39 insertions, 6 deletions
diff --git a/tests/compile-test.rs b/tests/compile-test.rs
index dce6f2fc272..d37151b19b6 100644
--- a/tests/compile-test.rs
+++ b/tests/compile-test.rs
@@ -217,12 +217,45 @@ fn main() {
     }
 
     set_var("CLIPPY_DISABLE_DOCS_LINKS", "true");
-    run_ui();
-    run_ui_toml();
-    run_ui_cargo();
-    run_internal_tests();
-    rustfix_coverage_known_exceptions_accuracy();
-    ui_cargo_toml_metadata();
+    // The SPEEDTEST_* env variables can be used to check Clippy's performance on your PR. It runs the
+    // affected test 1000 times and gets the average.
+    if let Ok(speedtest) = std::env::var("SPEEDTEST") {
+        println!("----------- STARTING SPEEDTEST -----------");
+        let f = match speedtest.as_str() {
+            "ui" => run_ui as fn(),
+            "cargo" => run_ui_cargo as fn(),
+            "toml" => run_ui_toml as fn(),
+            "internal" => run_internal_tests as fn(),
+            "rustfix-coverage-known-exceptions-accuracy" => rustfix_coverage_known_exceptions_accuracy as fn(),
+            "ui-cargo-toml-metadata" => ui_cargo_toml_metadata as fn(),
+
+            _ => panic!("unknown speedtest: {speedtest} || accepted speedtests are: [ui, cargo, toml, internal]"),
+        };
+
+        let iterations;
+        if let Ok(iterations_str) = std::env::var("SPEEDTEST_ITERATIONS") {
+            iterations = iterations_str
+                .parse::<u64>()
+                .unwrap_or_else(|_| panic!("Couldn't parse `{iterations_str}`, please use a valid u64"));
+        } else {
+            iterations = 1000;
+        }
+
+        let mut sum = 0;
+        for _ in 0..iterations {
+            let start = std::time::Instant::now();
+            f();
+            sum += start.elapsed().as_millis();
+        }
+        println!("average {} time: {} millis.", speedtest.to_uppercase(), sum / 1000);
+    } else {
+        run_ui();
+        run_ui_toml();
+        run_ui_cargo();
+        run_internal_tests();
+        rustfix_coverage_known_exceptions_accuracy();
+        ui_cargo_toml_metadata();
+    }
 }
 
 const RUSTFIX_COVERAGE_KNOWN_EXCEPTIONS: &[&str] = &[