aboutsummaryrefslogtreecommitdiff
path: root/node_modules/w3c-hr-time/lib/calculate-clock-offset.js
diff options
context:
space:
mode:
authorJoel Kronqvist <work.joelkronqvist@pm.me>2022-03-11 20:46:06 +0200
committerJoel Kronqvist <work.joelkronqvist@pm.me>2022-03-11 20:46:06 +0200
commit080c5819d87b933816d724a83f3bf4f1686770a7 (patch)
tree4a2ccc68b27edf7d4cbc586c932cc7542b655e19 /node_modules/w3c-hr-time/lib/calculate-clock-offset.js
parent5ac7049a9d30733165cc212dee308163c2a14644 (diff)
parentd003b82235a9329f912522a2f70aa950dfce4998 (diff)
downloadLYLLRuoka-080c5819d87b933816d724a83f3bf4f1686770a7.tar.gz
LYLLRuoka-080c5819d87b933816d724a83f3bf4f1686770a7.zip
Merge branch 'master' of https://github.com/JoelHMikael/FoodJS
Updating remote changes
Diffstat (limited to 'node_modules/w3c-hr-time/lib/calculate-clock-offset.js')
-rw-r--r--node_modules/w3c-hr-time/lib/calculate-clock-offset.js39
1 files changed, 39 insertions, 0 deletions
diff --git a/node_modules/w3c-hr-time/lib/calculate-clock-offset.js b/node_modules/w3c-hr-time/lib/calculate-clock-offset.js
new file mode 100644
index 0000000..8659d30
--- /dev/null
+++ b/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;
+}