busperf/
lib.rs

1use crate::{
2    analyze::{SimulationData, analyzer::Analyzer},
3    show::OutputType,
4};
5use std::{error::Error, io::Write};
6
7pub mod analyze;
8pub mod show;
9use libbusperf::bus_usage::BusData;
10
11/// Run visualization.
12///
13/// If any analyzer has not yet been run it will be run. Then visualization of type `type_` will be run.
14pub fn run_visualization(
15    mut analyzers: Vec<Box<dyn Analyzer>>,
16    type_: OutputType,
17    out: &mut impl Write,
18    simulation_data: &mut SimulationData,
19    trace_path: String,
20    verbose: bool,
21    skipped_stats: &[String],
22) -> Result<(), Box<dyn Error>> {
23    use crate::show::show_data;
24
25    let usages = analyzers
26        .iter_mut()
27        .filter_map(|a| {
28            if !a.finished_analysis()
29                && let Err(e) = a.analyze(simulation_data, verbose)
30            {
31                use owo_colors::OwoColorize;
32                eprintln!(
33                    "{} {} {}",
34                    "[Error] failed to analyze:".bright_red(),
35                    a.bus_name(),
36                    e.bright_red()
37                );
38            }
39            a.get_results().cloned().map(|usage| BusData {
40                usage,
41                signals: a.get_signals().into_iter().cloned().collect(),
42            })
43        })
44        .collect();
45
46    show_data(usages, trace_path, None, type_, out, verbose, skipped_stats)?;
47    Ok(())
48}