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
11pub 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}