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

Function mem_profile_command

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

Source from the content-addressed store, hash-verified

20
21pub(crate) fn mem_profile_command(args: &[String], cwd: &Path) -> Result<(), String> {
22 let release = args.iter().any(|a| a == "--release");
23 let csv_name = parse_optional_flag_value(args, "--csv")
24 .map(|raw| PathBuf::from(raw.unwrap_or_else(|| "memory_profile.csv".to_string())));
25 let project_dir = parse_flag_value(args, "--path")
26 .map(|p| resolve_local_path(&p, cwd))
27 .unwrap_or_else(|| cwd.to_path_buf());
28 let project_dir = project_dir.canonicalize().unwrap_or(project_dir);
29 let project_cfg = load_project_toml(&project_dir)
30 .map_err(|err| format!("failed to load project.toml: {err}"))?;
31 let profiling_dir = ensure_profiling_output_dir(&project_dir)?;
32 let csv_path = profiling_dir.join(
33 csv_name
34 .as_ref()
35 .and_then(|name| name.file_name())
36 .unwrap_or_else(|| std::ffi::OsStr::new("memory_profile.csv")),
37 );
38 fs::OpenOptions::new()
39 .create(true)
40 .append(true)
41 .open(&csv_path)
42 .map_err(|err| {
43 format!(
44 "failed to initialize memory profile csv {}: {err}",
45 csv_path.display()
46 )
47 })?;
48 update_workspace_vscode_linked_projects(&workspace_root(), &project_dir)?;
49 update_project_vscode_linked_projects(&project_dir)?;
50 ensure_source_overrides(&project_dir)
51 .map_err(|err| format!("failed to refresh source overrides: {err}"))?;
52
53 log_step("Building Scripts");
54 compile_scripts_with_profile(&project_dir, ScriptsBuildProfile::Debug).map_err(|err| {
55 format!(
56 "scripts pipeline failed for {}: {err}",
57 project_dir.display()
58 )
59 })?;
60 log_done("Scripts Built");
61
62 let dev_runner_dir = project_dir.join(".perro").join("dev_runner");
63 let target_dir = project_dir.join("target");
64 log_step("Building Dev Runner");
65
66 let mut build_cmd = Command::new("cargo");
67 build_cmd.arg("build").env("CARGO_TARGET_DIR", &target_dir);
68 if release {
69 build_cmd.arg("--release");
70 }
71 build_cmd.current_dir(&dev_runner_dir);
72 let mut features = vec!["mem_profile"];
73 if project_cfg.steam.enabled {
74 features.push("steamworks");
75 }
76 build_cmd.arg("--features").arg(features.join(","));
77 let build_status = build_cmd.status().map_err(|err| {
78 format!(
79 "failed to build project dev runner from {}: {err}",

Callers 1

mainFunction · 0.85

Calls 15

load_project_tomlFunction · 0.85
ensure_source_overridesFunction · 0.85
log_stepFunction · 0.85
log_doneFunction · 0.85
log_noteFunction · 0.85
anyMethod · 0.80
joinMethod · 0.80

Tested by

no test coverage detected