in src/data/perf_stat.rs [492:536]
fn process_raw_data(&mut self, buffer: Data) -> Result<ProcessedData> {
let mut perf_stat = PerfStat::new();
let raw_value = match buffer {
Data::PerfStatRaw(ref value) => value,
_ => panic!("Invalid Data type in raw file"),
};
let reader = BufReader::new(raw_value.data.as_bytes());
for line in reader.lines() {
let line = line?;
let line_str: Vec<&str> = line.split(';').collect();
// CPU and Stat name
let mut cpu_and_name: Vec<&str> = line_str[0].split_whitespace().collect();
let cpu = cpu_and_name[0].parse::<u64>();
cpu_and_name.remove(0);
let stat_name = cpu_and_name.join(" ");
// Numerators
let nr_split: Vec<&str> = line_str[1].split_whitespace().collect();
let mut nr_value: u64 = 0;
for nr in nr_split {
nr_value += nr.parse::<u64>()?;
}
// Denominators
let dr_split: Vec<&str> = line_str[2].split_whitespace().collect();
let mut dr_value: u64 = 0;
for dr in dr_split {
dr_value += dr.parse::<u64>()?;
}
let scale: u64 = line_str[3].parse::<u64>()?;
let named_stat = NamedStat {
time: raw_value.time,
name: stat_name.to_string(),
nr_value,
dr_value,
scale,
};
perf_stat.add_named_stat(cpu?, named_stat);
}
let processed_data = ProcessedData::PerfStat(perf_stat);
Ok(processed_data)
}