summaryrefslogtreecommitdiff
path: root/school/node_modules/w3c-hr-time/lib/clock-is-accurate.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2023-01-10 14:54:04 +0100
committerMinteck <contact@minteck.org>2023-01-10 14:54:04 +0100
commit99c1d9af689e5325f3cf535c4007b3aeb8325229 (patch)
treee663b3c2ebdbd67c818ac0c5147f0ce1d2463cda /school/node_modules/w3c-hr-time/lib/clock-is-accurate.js
parent9871b03912fc28ad38b4037ebf26a78aa937baba (diff)
downloadpluralconnect-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/clock-is-accurate.js')
-rw-r--r--school/node_modules/w3c-hr-time/lib/clock-is-accurate.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/school/node_modules/w3c-hr-time/lib/clock-is-accurate.js b/school/node_modules/w3c-hr-time/lib/clock-is-accurate.js
new file mode 100644
index 0000000..920b499
--- /dev/null
+++ b/school/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;