MCPcopy Create free account
hub / github.com/PerroEngine/Perro / bench_command

Function bench_command

perro_source/devtools/perro_cli/src/bench.rs:13–73  ·  view source on GitHub ↗
(args: &[String], cwd: &Path)

Source from the content-addressed store, hash-verified

11const BENCH_NAME: &str = "perro_script_bench";
12
13pub(crate) fn bench_command(args: &[String], cwd: &Path) -> Result<(), String> {
14 let project_dir = parse_flag_value(args, "--path")
15 .map(|p| resolve_local_path(&p, cwd))
16 .or_else(|| find_project_root(cwd))
17 .unwrap_or_else(|| cwd.to_path_buf());
18 let project_dir = project_dir.canonicalize().unwrap_or(project_dir);
19 if !project_dir.join("project.toml").exists() {
20 return Err(format!(
21 "invalid --path `{}` for bench. Use project root (directory containing project.toml).",
22 project_dir.display()
23 ));
24 }
25
26 let filters = parse_multi_flag(args, "--script");
27 let methods = parse_multi_flag(args, "--method");
28 let vars = parse_multi_flag(args, "--var");
29 let bench_args = passthrough_args(args);
30
31 log_step("Syncing Bench Scripts");
32 ensure_source_overrides(&project_dir)
33 .map_err(|err| format!("failed to refresh source overrides: {err}"))?;
34 sync_scripts(&project_dir).map_err(|err| format!("failed to sync scripts: {err}"))?;
35 ensure_scripts_bench_manifest(&project_dir)?;
36 write_script_bench_harness(&project_dir, &filters, &methods, &vars)?;
37 log_done("Bench Scripts Synced");
38
39 log_note("Running Criterion Script Bench");
40 let project_cfg = load_project_toml(&project_dir)
41 .map_err(|err| format!("failed to load project.toml: {err}"))?;
42 let scripts_crate = project_dir.join(".perro").join("scripts");
43 let target_dir = project_dir.join("target");
44 let mut cmd = Command::new("cargo");
45 cmd.arg("bench")
46 .arg("--bench")
47 .arg(BENCH_NAME)
48 .env("CARGO_TARGET_DIR", &target_dir)
49 .current_dir(&scripts_crate);
50 if project_cfg.steam.enabled {
51 cmd.arg("--features").arg("steamworks");
52 }
53 if bench_args.is_empty() {
54 cmd.arg("--").arg("--sample-size").arg("10");
55 } else {
56 cmd.arg("--");
57 cmd.args(bench_args);
58 }
59 let status = cmd.status().map_err(|err| {
60 format!(
61 "failed to run cargo bench from {}: {err}",
62 scripts_crate.display()
63 )
64 })?;
65 if !status.success() {
66 return Err(format!(
67 "cargo bench failed with exit code {:?}",
68 status.code()
69 ));
70 }

Callers 1

mainFunction · 0.85

Calls 15

find_project_rootFunction · 0.85
parse_multi_flagFunction · 0.85
log_stepFunction · 0.85
ensure_source_overridesFunction · 0.85
sync_scriptsFunction · 0.85
log_doneFunction · 0.85
log_noteFunction · 0.85
load_project_tomlFunction · 0.85
joinMethod · 0.80
parse_flag_valueFunction · 0.70

Tested by

no test coverage detected