From d5f053dabfadb2a62a4cc6b89a6b7bf64ce3c460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 23 Feb 2023 12:59:23 +0100 Subject: feat(bench): change --json output format (#17888) Closes https://github.com/denoland/deno/issues/17775 --- cli/tools/bench.rs | 63 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 28 deletions(-) (limited to 'cli/tools') diff --git a/cli/tools/bench.rs b/cli/tools/bench.rs index cd6e91c9f..578b72adf 100644 --- a/cli/tools/bench.rs +++ b/cli/tools/bench.rs @@ -133,41 +133,37 @@ pub trait BenchReporter { } #[derive(Debug, Serialize)] -struct JsonReporterResult { +struct JsonReporterOutput { runtime: String, cpu: String, - origin: String, - group: Option, - name: String, - baseline: bool, - result: BenchResult, + benches: Vec, } -impl JsonReporterResult { - fn new( - origin: String, - group: Option, - name: String, - baseline: bool, - result: BenchResult, - ) -> Self { +impl Default for JsonReporterOutput { + fn default() -> Self { Self { runtime: format!("{} {}", get_user_agent(), env!("TARGET")), cpu: mitata::cpu::name(), - origin, - group, - name, - baseline, - result, + benches: vec![], } } } #[derive(Debug, Serialize)] -struct JsonReporter(Vec); +struct JsonReporterBench { + origin: String, + group: Option, + name: String, + baseline: bool, + results: Vec, +} + +#[derive(Debug, Serialize)] +struct JsonReporter(JsonReporterOutput); + impl JsonReporter { fn new() -> Self { - Self(vec![]) + Self(Default::default()) } } @@ -190,13 +186,24 @@ impl BenchReporter for JsonReporter { fn report_output(&mut self, _output: &str) {} fn report_result(&mut self, desc: &BenchDescription, result: &BenchResult) { - self.0.push(JsonReporterResult::new( - desc.origin.clone(), - desc.group.clone(), - desc.name.clone(), - desc.baseline, - result.clone(), - )); + let maybe_bench = self.0.benches.iter_mut().find(|bench| { + bench.origin == desc.origin + && bench.group == desc.group + && bench.name == desc.name + && bench.baseline == desc.baseline + }); + + if let Some(bench) = maybe_bench { + bench.results.push(result.clone()); + } else { + self.0.benches.push(JsonReporterBench { + origin: desc.origin.clone(), + group: desc.group.clone(), + name: desc.name.clone(), + baseline: desc.baseline, + results: vec![result.clone()], + }); + } } } -- cgit v1.2.3