diff options
author | Minteck <contact@minteck.org> | 2023-01-10 14:54:04 +0100 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2023-01-10 14:54:04 +0100 |
commit | 99c1d9af689e5325f3cf535c4007b3aeb8325229 (patch) | |
tree | e663b3c2ebdbd67c818ac0c5147f0ce1d2463cda /school/node_modules/w3c-hr-time/lib/calculate-clock-offset.js | |
parent | 9871b03912fc28ad38b4037ebf26a78aa937baba (diff) | |
download | pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.gz pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.bz2 pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.zip |
Update - This is an automated commit
Diffstat (limited to 'school/node_modules/w3c-hr-time/lib/calculate-clock-offset.js')
-rw-r--r-- | school/node_modules/w3c-hr-time/lib/calculate-clock-offset.js | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/school/node_modules/w3c-hr-time/lib/calculate-clock-offset.js b/school/node_modules/w3c-hr-time/lib/calculate-clock-offset.js new file mode 100644 index 0000000..8659d30 --- /dev/null +++ b/school/node_modules/w3c-hr-time/lib/calculate-clock-offset.js @@ -0,0 +1,39 @@ +"use strict"; + +// This files implements the calculation of the offset between the global monotonic clock and UNIX time. This value is +// known as |t1| in the calculation of "time origin timestamp" in the spec. This value needs to be calculated once and +// can be used in all subsequent Performance instances. +// +// However, if the clock is not fast enough, the export is undefined to signify that we should use Date.now() to get the +// time origin timestamp with millisecond accuracy, per spec. + +const { getGlobalMonotonicClockMS } = require("./global-monotonic-clock"); +const clockIsAccurate = require("./clock-is-accurate"); + +// This function assumes the clock is accurate. +function calculateClockOffset() { + const start = Date.now(); + let cur = start; + // Limit the iterations, just in case we're running in an environment where Date.now() has been mocked and is + // constant. + for (let i = 0; i < 1e6 && cur === start; i++) { + cur = Date.now(); + } + + // At this point |cur| "just" became equal to the next millisecond -- the unseen digits after |cur| are approximately + // all 0, and |cur| is the closest to the actual value of the UNIX time. Now, get the current global monotonic clock + // value and do the remaining calculations. + + return cur - getGlobalMonotonicClockMS(); +} + +if (clockIsAccurate) { + // Warm up the function. + calculateClockOffset(); + calculateClockOffset(); + calculateClockOffset(); + + module.exports = calculateClockOffset; +} else { + module.exports = undefined; +} |