summaryrefslogtreecommitdiff
path: root/cli/ops/bench.rs
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2022-05-30 18:58:44 +0100
committerGitHub <noreply@github.com>2022-05-30 19:58:44 +0200
commitf0dd751190b3859033a97a3ce3c44ed02aa0da0a (patch)
tree9b77213346cc782a929b02327f7e2b98669a008c /cli/ops/bench.rs
parent787e794027bbb2f13980db483f83f7a05fed3078 (diff)
refactor(bench): Allocate IDs for benches (#14757)
Diffstat (limited to 'cli/ops/bench.rs')
-rw-r--r--cli/ops/bench.rs52
1 files changed, 51 insertions, 1 deletions
diff --git a/cli/ops/bench.rs b/cli/ops/bench.rs
index e028aa6b1..1c62452d4 100644
--- a/cli/ops/bench.rs
+++ b/cli/ops/bench.rs
@@ -1,4 +1,6 @@
+use crate::tools::bench::BenchDescription;
use crate::tools::bench::BenchEvent;
+use crate::tools::test::TestFilter;
use deno_core::error::generic_error;
use deno_core::error::AnyError;
use deno_core::op;
@@ -8,22 +10,32 @@ use deno_core::OpState;
use deno_runtime::permissions::create_child_permissions;
use deno_runtime::permissions::ChildPermissionsArg;
use deno_runtime::permissions::Permissions;
+use serde::Deserialize;
+use serde::Serialize;
+use std::sync::atomic::AtomicUsize;
+use std::sync::atomic::Ordering;
use std::time;
use tokio::sync::mpsc::UnboundedSender;
use uuid::Uuid;
-pub fn init(sender: UnboundedSender<BenchEvent>, unstable: bool) -> Extension {
+pub fn init(
+ sender: UnboundedSender<BenchEvent>,
+ filter: TestFilter,
+ unstable: bool,
+) -> Extension {
Extension::builder()
.ops(vec![
op_pledge_test_permissions::decl(),
op_restore_test_permissions::decl(),
op_get_bench_origin::decl(),
+ op_register_bench::decl(),
op_dispatch_bench_event::decl(),
op_bench_now::decl(),
op_bench_check_unstable::decl(),
])
.state(move |state| {
state.put(sender.clone());
+ state.put(filter.clone());
state.put(Unstable(unstable));
Ok(())
})
@@ -97,6 +109,44 @@ fn op_get_bench_origin(state: &mut OpState) -> String {
state.borrow::<ModuleSpecifier>().to_string()
}
+#[derive(Debug, Deserialize)]
+#[serde(rename_all = "camelCase")]
+struct BenchInfo {
+ name: String,
+ origin: String,
+ baseline: bool,
+ group: Option<String>,
+}
+
+#[derive(Debug, Serialize)]
+#[serde(rename_all = "camelCase")]
+struct BenchRegisterResult {
+ id: usize,
+ filtered_out: bool,
+}
+
+static NEXT_ID: AtomicUsize = AtomicUsize::new(0);
+
+#[op]
+fn op_register_bench(
+ state: &mut OpState,
+ info: BenchInfo,
+) -> Result<BenchRegisterResult, AnyError> {
+ let id = NEXT_ID.fetch_add(1, Ordering::SeqCst);
+ let filter = state.borrow::<TestFilter>().clone();
+ let filtered_out = !filter.includes(&info.name);
+ let description = BenchDescription {
+ id,
+ name: info.name,
+ origin: info.origin,
+ baseline: info.baseline,
+ group: info.group,
+ };
+ let sender = state.borrow::<UnboundedSender<BenchEvent>>().clone();
+ sender.send(BenchEvent::Register(description)).ok();
+ Ok(BenchRegisterResult { id, filtered_out })
+}
+
#[op]
fn op_dispatch_bench_event(state: &mut OpState, event: BenchEvent) {
let sender = state.borrow::<UnboundedSender<BenchEvent>>().clone();