diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2022-05-30 18:58:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-30 19:58:44 +0200 |
commit | f0dd751190b3859033a97a3ce3c44ed02aa0da0a (patch) | |
tree | 9b77213346cc782a929b02327f7e2b98669a008c /cli/ops/bench.rs | |
parent | 787e794027bbb2f13980db483f83f7a05fed3078 (diff) |
refactor(bench): Allocate IDs for benches (#14757)
Diffstat (limited to 'cli/ops/bench.rs')
-rw-r--r-- | cli/ops/bench.rs | 52 |
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(); |