mirror of
https://github.com/denoland/deno.git
synced 2025-09-26 12:19:12 +00:00
fix(node): add reset method to event loop delay histogram (#28788)
Fixes https://github.com/denoland/deno/issues/28767 Don't love the `RefCell`, but don't really see a (safe) way around it.
This commit is contained in:
parent
9bc3b07819
commit
6d33141d8d
1 changed files with 20 additions and 14 deletions
|
@ -1,6 +1,7 @@
|
|||
// Copyright 2018-2025 the Deno authors. MIT license.
|
||||
|
||||
use std::cell::Cell;
|
||||
use std::cell::RefCell;
|
||||
|
||||
use deno_core::op2;
|
||||
use deno_core::GarbageCollected;
|
||||
|
@ -13,7 +14,7 @@ pub enum PerfHooksError {
|
|||
}
|
||||
|
||||
pub struct EldHistogram {
|
||||
eld: tokio_eld::EldHistogram<u64>,
|
||||
eld: RefCell<tokio_eld::EldHistogram<u64>>,
|
||||
started: Cell<bool>,
|
||||
}
|
||||
|
||||
|
@ -29,7 +30,7 @@ impl EldHistogram {
|
|||
#[cppgc]
|
||||
pub fn new(#[smi] resolution: u32) -> Result<EldHistogram, PerfHooksError> {
|
||||
Ok(EldHistogram {
|
||||
eld: tokio_eld::EldHistogram::new(resolution as usize)?,
|
||||
eld: RefCell::new(tokio_eld::EldHistogram::new(resolution as usize)?),
|
||||
started: Cell::new(false),
|
||||
})
|
||||
}
|
||||
|
@ -43,7 +44,7 @@ impl EldHistogram {
|
|||
return false;
|
||||
}
|
||||
|
||||
self.eld.start();
|
||||
self.eld.borrow().start();
|
||||
self.started.set(true);
|
||||
|
||||
true
|
||||
|
@ -58,79 +59,84 @@ impl EldHistogram {
|
|||
return false;
|
||||
}
|
||||
|
||||
self.eld.stop();
|
||||
self.eld.borrow().stop();
|
||||
self.started.set(false);
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
#[fast]
|
||||
fn reset(&self) {
|
||||
self.eld.borrow_mut().reset();
|
||||
}
|
||||
|
||||
// Returns the value at the given percentile.
|
||||
//
|
||||
// `percentile` ∈ (0, 100]
|
||||
#[fast]
|
||||
#[number]
|
||||
fn percentile(&self, percentile: f64) -> u64 {
|
||||
self.eld.value_at_percentile(percentile)
|
||||
self.eld.borrow().value_at_percentile(percentile)
|
||||
}
|
||||
|
||||
// Returns the value at the given percentile as a bigint.
|
||||
#[fast]
|
||||
#[bigint]
|
||||
fn percentile_big_int(&self, percentile: f64) -> u64 {
|
||||
self.eld.value_at_percentile(percentile)
|
||||
self.eld.borrow().value_at_percentile(percentile)
|
||||
}
|
||||
|
||||
// The number of samples recorded by the histogram.
|
||||
#[getter]
|
||||
#[number]
|
||||
fn count(&self) -> u64 {
|
||||
self.eld.len()
|
||||
self.eld.borrow().len()
|
||||
}
|
||||
|
||||
// The number of samples recorded by the histogram as a bigint.
|
||||
#[getter]
|
||||
#[bigint]
|
||||
fn count_big_int(&self) -> u64 {
|
||||
self.eld.len()
|
||||
self.eld.borrow().len()
|
||||
}
|
||||
|
||||
// The maximum recorded event loop delay.
|
||||
#[getter]
|
||||
#[number]
|
||||
fn max(&self) -> u64 {
|
||||
self.eld.max()
|
||||
self.eld.borrow().max()
|
||||
}
|
||||
|
||||
// The maximum recorded event loop delay as a bigint.
|
||||
#[getter]
|
||||
#[bigint]
|
||||
fn max_big_int(&self) -> u64 {
|
||||
self.eld.max()
|
||||
self.eld.borrow().max()
|
||||
}
|
||||
|
||||
// The mean of the recorded event loop delays.
|
||||
#[getter]
|
||||
fn mean(&self) -> f64 {
|
||||
self.eld.mean()
|
||||
self.eld.borrow().mean()
|
||||
}
|
||||
|
||||
// The minimum recorded event loop delay.
|
||||
#[getter]
|
||||
#[number]
|
||||
fn min(&self) -> u64 {
|
||||
self.eld.min()
|
||||
self.eld.borrow().min()
|
||||
}
|
||||
|
||||
// The minimum recorded event loop delay as a bigint.
|
||||
#[getter]
|
||||
#[bigint]
|
||||
fn min_big_int(&self) -> u64 {
|
||||
self.eld.min()
|
||||
self.eld.borrow().min()
|
||||
}
|
||||
|
||||
// The standard deviation of the recorded event loop delays.
|
||||
#[getter]
|
||||
fn stddev(&self) -> f64 {
|
||||
self.eld.stdev()
|
||||
self.eld.borrow().stdev()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue