fn get_line_data()

in src/data/interrupts.rs [259:282]


fn get_line_data(values: Vec<InterruptData>, key: String) -> Result<String> {
    let key_values = get_key_data(values, key);
    let mut end_values = Vec::new();
    let mut prev_data_map = HashMap::new();
    let time_zero = key_values[0].time;
    for cpu_data in &key_values[0].per_cpu {
        prev_data_map.insert(cpu_data.cpu, cpu_data.count);
    }
    for data in key_values {
        let mut end_value = data.clone();
        end_value.set_time(data.time - time_zero);
        for cpu_data in &mut end_value.per_cpu {
            cpu_data.count -= prev_data_map.get(&cpu_data.cpu).ok_or(
                PDError::VisualizerInterruptLineCPUCountError(format!("{}", cpu_data.cpu)),
            )?;
        }
        end_values.push(end_value);
        prev_data_map.clear();
        for cpu_data in data.per_cpu {
            prev_data_map.insert(cpu_data.cpu, cpu_data.count);
        }
    }
    Ok(serde_json::to_string(&end_values)?)
}