aboutsummaryrefslogtreecommitdiff
path: root/node_modules/w3c-hr-time/lib/clock-is-accurate.js
diff options
context:
space:
mode:
authorJoel Kronqvist <joel.h.kronqvist@gmail.com>2022-03-05 19:02:27 +0200
committerJoel Kronqvist <joel.h.kronqvist@gmail.com>2022-03-05 19:02:27 +0200
commit5d309ff52cd399a6b71968a6b9a70c8ac0b98981 (patch)
tree360f7eb50f956e2367ef38fa1fc6ac7ac5258042 /node_modules/w3c-hr-time/lib/clock-is-accurate.js
parentb500a50f1b97d93c98b36ed9a980f8188d648147 (diff)
downloadLYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.tar.gz
LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.zip
Added node_modules for the updating to work properly.
Diffstat (limited to 'node_modules/w3c-hr-time/lib/clock-is-accurate.js')
-rw-r--r--node_modules/w3c-hr-time/lib/clock-is-accurate.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/node_modules/w3c-hr-time/lib/clock-is-accurate.js b/node_modules/w3c-hr-time/lib/clock-is-accurate.js
new file mode 100644
index 0000000..920b499
--- /dev/null
+++ b/node_modules/w3c-hr-time/lib/clock-is-accurate.js
@@ -0,0 +1,61 @@
+"use strict";
+
+const { hrtime } = require("./utils");
+
+// The HR-TIME spec calls for 5-μs accuracy. Check that we have that in both hrtime() and Date.now().
+
+function testClockAccuracy() {
+ // Test hrtime() first. The check is simpler and more stable, and we use hrtime() to measure Date.now()'s performance.
+ const roundTrip = hrtime(hrtime());
+ if (roundTrip[0] > 1 || roundTrip[1] > 5e3 * 2) {
+ return false;
+ }
+
+ // Test Date.now() twice: first with a looser bound (10 μs) but with a smaller run time to filter out very bad
+ // Date.now() performance, and then with a tighter bound (5 μs) to check we have the accuracy we need.
+ let times;
+ // eslint-disable-next-line no-unused-vars
+ let cur;
+ let start;
+ let end;
+
+ times = 100;
+ start = hrtime();
+ while (times-- > 0) {
+ cur = Date.now();
+ }
+ end = hrtime(start);
+ if ((end[0] * 1e9 + end[1]) > 1000000) {
+ return false;
+ }
+
+ times = 10000;
+ start = hrtime();
+ while (times-- > 0) {
+ cur = Date.now();
+ }
+ end = hrtime(start);
+ if ((end[0] * 1e9 + end[1]) > 50000000) {
+ return false;
+ }
+
+ return true;
+}
+
+// Warm up the function.
+testClockAccuracy();
+testClockAccuracy();
+testClockAccuracy();
+
+const TIMES = 5;
+const THRESHOLD = 0.6 * TIMES;
+let accurates = 0;
+for (let i = 0; i < TIMES; i++) {
+ if (testClockAccuracy()) {
+ accurates++;
+ }
+}
+
+const isAccurate = accurates >= THRESHOLD;
+
+module.exports = isAccurate;