use crate::utils::types::cpu_report::CPUBenchmarkReport;
use rumtk_core::strings::RUMString;
use rumtk_core::types::{RUMBuffer, RUMDeserialize, RUMSerialize};
use rumtk_web::RUMWebTemplate;
use std::convert::{From, TryFrom};
use std::fmt::Debug;
mod meta;
mod basic_report;
mod flamegraph;
mod cpu_report;
pub use basic_report::*;
pub use flamegraph::*;
pub use meta::*;
type ReportRawResults<'a> = (&'a RUMBuffer, &'a RUMBuffer, &'a RUMBuffer, &'a RUMBuffer);
#[derive(Default, Debug, RUMDeserialize, RUMSerialize, RUMWebTemplate)]
#[template(
source = "
{{meta|safe}}
{{report|safe}}
{{visualization|safe}}
{{cpu_summary|safe}}
{{cpu_cache|safe}}
",
ext = "html"
)]
pub struct BenchmarkReport {
pub meta: BenchmarkMeta,
pub report: BasicBenchmarkReport,
pub visualization: FlamegraphBenchmarkVisualizer,
pub cpu_summary: CPUBenchmarkReport,
pub cpu_cache: CPUBenchmarkReport,
}
impl<'a> TryFrom<ReportRawResults<'a>> for BenchmarkReport {
type Error = RUMString;
fn try_from(data: ReportRawResults) -> Result<Self, Self::Error>
{
let (raw_report, raw_visualization, cpu_summary, cpu_cache) = data;
let report = BasicBenchmarkReport::try_from(raw_report)?;
let visualization = FlamegraphBenchmarkVisualizer::try_from(raw_visualization)?;
let cpu_summary = CPUBenchmarkReport::try_from(cpu_summary)?;
let cpu_cache = CPUBenchmarkReport::try_from(cpu_cache)?;
Ok(Self {
meta: BenchmarkMeta::new()?,
report,
visualization,
cpu_summary,
cpu_cache
})
}
}