保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
"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 };