summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tests/integration/bench_tests.rs6
-rw-r--r--cli/tests/testdata/bench/pass.json.out28
-rw-r--r--cli/tools/bench.rs63
3 files changed, 69 insertions, 28 deletions
diff --git a/cli/tests/integration/bench_tests.rs b/cli/tests/integration/bench_tests.rs
index 7953bef34..15a86ee9d 100644
--- a/cli/tests/integration/bench_tests.rs
+++ b/cli/tests/integration/bench_tests.rs
@@ -178,6 +178,12 @@ itest!(bench_with_malformed_config {
output: "bench/collect_with_malformed_config.out",
});
+itest!(json_output {
+ args: "bench --json bench/pass.ts",
+ exit_code: 0,
+ output: "bench/pass.json.out",
+});
+
#[test]
fn recursive_permissions_pledge() {
let output = util::deno_cmd()
diff --git a/cli/tests/testdata/bench/pass.json.out b/cli/tests/testdata/bench/pass.json.out
new file mode 100644
index 000000000..73daa7202
--- /dev/null
+++ b/cli/tests/testdata/bench/pass.json.out
@@ -0,0 +1,28 @@
+Check file:///[WILDCARD]testdata/bench/pass.ts
+{
+ "runtime": "Deno/[WILDCARD]",
+ "cpu": "[WILDCARD]",
+ "benches": [
+ {
+ "origin": "file:///[WILDCARD]testdata/bench/pass.ts",
+ "group": null,
+ "name": "bench0",
+ "baseline": false,
+ "results": [
+ {
+ "ok": {
+ "n": [WILDCARD],
+ "min": [WILDCARD],
+ "max": [WILDCARD],
+ "avg": [WILDCARD],
+ "p75": [WILDCARD],
+ "p99": [WILDCARD],
+ "p995": [WILDCARD],
+ "p999": [WILDCARD]
+ }
+ }
+ ]
+ },
+[WILDCARD]
+ ]
+}
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<String>,
- name: String,
- baseline: bool,
- result: BenchResult,
+ benches: Vec<JsonReporterBench>,
}
-impl JsonReporterResult {
- fn new(
- origin: String,
- group: Option<String>,
- 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<JsonReporterResult>);
+struct JsonReporterBench {
+ origin: String,
+ group: Option<String>,
+ name: String,
+ baseline: bool,
+ results: Vec<BenchResult>,
+}
+
+#[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()],
+ });
+ }
}
}