File: compile_time.rs

package info (click to toggle)
rustc 1.85.0%2Bdfsg3-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, sid, trixie
  • size: 893,396 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,051; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (41 lines) | stat: -rw-r--r-- 1,184 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use std::time::{Duration, Instant};

use xshell::{cmd, Shell};

#[test]
fn fixed_cost_compile_times() {
    let sh = Shell::new().unwrap();

    let _p = sh.push_dir("tests/data");
    let baseline = compile_bench(&sh, "baseline");
    let _ducted = compile_bench(&sh, "ducted");
    let xshelled = compile_bench(&sh, "xshelled");
    let ratio = (xshelled.as_millis() as f64) / (baseline.as_millis() as f64);
    assert!(1.0 < ratio && ratio < 10.0);

    fn compile_bench(sh: &Shell, name: &str) -> Duration {
        let _p = sh.push_dir(name);
        let cargo_build = cmd!(sh, "cargo build -q");
        cargo_build.read().unwrap();

        let n = 5;
        let mut times = Vec::new();
        for _ in 0..n {
            sh.remove_path("./target").unwrap();
            let start = Instant::now();
            cargo_build.read().unwrap();
            let elapsed = start.elapsed();
            times.push(elapsed);
        }

        times.sort();
        times.remove(0);
        times.pop();
        let total = times.iter().sum::<Duration>();
        let average = total / (times.len() as u32);

        eprintln!("compiling {name}: {average:?}");

        total
    }
}