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/clock-is-accurate.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/clock-is-accurate.js')
-rw-r--r-- | school/node_modules/w3c-hr-time/lib/clock-is-accurate.js | 61 |
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; |