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)
This commit is contained in:
snek 2024-11-08 23:20:24 +01:00 committed by GitHub
parent d4f1bd3dac
commit 73fbd61bd0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 73 additions and 44 deletions

View file

@ -27,7 +27,6 @@ const {
ArrayPrototypeForEach,
ArrayPrototypeIncludes,
ArrayPrototypeMap,
DateNow,
Error,
ErrorPrototype,
FunctionPrototypeBind,
@ -642,7 +641,7 @@ function bootstrapMainRuntime(runtimeOptions, warmup = false) {
removeImportedOps();
performance.setTimeOrigin(DateNow());
performance.setTimeOrigin();
globalThis_ = globalThis;
// Remove bootstrapping data from the global scope
@ -858,7 +857,7 @@ function bootstrapWorkerRuntime(
7: nodeDebug,
} = runtimeOptions;
performance.setTimeOrigin(DateNow());
performance.setTimeOrigin();
globalThis_ = globalThis;
// Remove bootstrapping data from the global scope