in src/data/java_profile.rs [205:245]
fn finish_data_collection(&mut self, params: &CollectorParams) -> Result<()> {
for child in ASPROF_CHILDREN.lock().unwrap().iter() {
signal::kill(Pid::from_raw(child.id() as i32), params.signal)?;
}
trace!("Waiting for asprof profile collection to complete...");
while ASPROF_CHILDREN.lock().unwrap().len() > 0 {
match ASPROF_CHILDREN.lock().unwrap().pop().unwrap().wait() {
Err(e) => {
error!("'asprof' did not exit successfully: {}", e);
return Ok(());
}
Ok(_) => trace!("'asprof' executed successfully."),
}
}
let data_dir = params.data_dir.clone();
for key in self.process_map.keys() {
let mut html_path = data_dir.clone();
html_path.push(format!("{}-java-flamegraph-{}.html", params.run_name, key));
let html_loc = html_path.to_str().unwrap();
let tmp_loc = format!(
"{}/{}-java-flamegraph-{}.html",
params.tmp_dir.display(),
params.run_name,
key
);
fs::copy(tmp_loc.clone(), html_loc).ok();
}
let mut jps_map = File::create(
data_dir
.clone()
.join(format!("{}-jps-map.json", params.run_name)),
)?;
write!(jps_map, "{}", serde_json::to_string(&self.process_map)?)?;
Ok(())
}