1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- "use strict";
- // Actual implementation of the Performance class.
- const clockIsAccurate = require("./clock-is-accurate");
- const calculateClockOffset = require("./calculate-clock-offset");
- const { hrtime, toMS } = require("./utils");
- const kTimeOrigin = Symbol("time origin");
- const kTimeOriginTimestamp = Symbol("time origin timestamp");
- class Performance {
- constructor() {
- // Time origin.
- const timeOrigin = hrtime();
- this[kTimeOrigin] = timeOrigin;
- if (clockIsAccurate) {
- // Let |t1| be the DOMHighResTimeStamp representing the high resolution Unix time at which the global monotonic
- // clock is zero. This has to be calculated for every Performance object to account for clock drifts.
- const t1 = calculateClockOffset();
- // Let |t2| be the DOMHighResTimeStamp representing the high resolution time value of the global monotonic clock
- // at global's time origin.
- const t2 = toMS(timeOrigin);
- // Return the sum of |t1| and |t2|.
- this[kTimeOriginTimestamp] = t1 + t2;
- } else {
- // Clock isn't accurate enough. Use millisecond accuracy per spec.
- const cur = Date.now();
- this[kTimeOriginTimestamp] = cur;
- }
- }
- // The timeOrigin getter actually returns the time origin timestamp, not the raw time origin.
- get timeOrigin() {
- return this[kTimeOriginTimestamp];
- }
- now() {
- const diff = toMS(hrtime(this[kTimeOrigin]));
- return clockIsAccurate ? diff : Math.round(diff);
- }
- toJSON() {
- return {
- timeOrigin: this.timeOrigin
- };
- }
- }
- module.exports = { Performance };
|