summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorsnek <snek@deno.com>2024-11-08 23:20:24 +0100
committerGitHub <noreply@github.com>2024-11-08 23:20:24 +0100
commit73fbd61bd016eebbf2776dc94c15a26bf39668d6 (patch)
treec7e5f4ee47f94f2279e745b1825959f82a66a22d /cli
parentd4f1bd3dacf54c4625eef7828341b39286ead8cb (diff)
fix: performance.timeOrigin (#26787)
`performance.timeOrigin` was being set from when JS started executing, but `op_now` measures from an `std::time::Instant` stored in `OpState`, which is created at a completely different time. This caused `performance.timeOrigin` to be very incorrect. This PR corrects the origin and also cleans up some of the timer code. Compared to `Date.now()`, `performance`'s time origin is now consistently within 5us (0.005ms) of system time. ![image](https://github.com/user-attachments/assets/0a7be04a-4f6d-4816-bd25-38a2e6136926)
Diffstat (limited to 'cli')
-rw-r--r--cli/ops/bench.rs4
1 files changed, 2 insertions, 2 deletions
diff --git a/cli/ops/bench.rs b/cli/ops/bench.rs
index 79a7ddef0..1f4a4bd9b 100644
--- a/cli/ops/bench.rs
+++ b/cli/ops/bench.rs
@@ -2,7 +2,6 @@
use std::sync::atomic::AtomicUsize;
use std::sync::atomic::Ordering;
-use std::time;
use deno_core::error::generic_error;
use deno_core::error::type_error;
@@ -13,6 +12,7 @@ use deno_core::ModuleSpecifier;
use deno_core::OpState;
use deno_runtime::deno_permissions::ChildPermissionsArg;
use deno_runtime::deno_permissions::PermissionsContainer;
+use deno_runtime::deno_web::StartTime;
use tokio::sync::mpsc::UnboundedSender;
use uuid::Uuid;
@@ -148,7 +148,7 @@ fn op_dispatch_bench_event(state: &mut OpState, #[serde] event: BenchEvent) {
#[op2(fast)]
#[number]
fn op_bench_now(state: &mut OpState) -> Result<u64, std::num::TryFromIntError> {
- let ns = state.borrow::<time::Instant>().elapsed().as_nanos();
+ let ns = state.borrow::<StartTime>().elapsed().as_nanos();
let ns_u64 = u64::try_from(ns)?;
Ok(ns_u64)
}