Sha256: 4ad8bbd046fa3a38a03be0c56b5d79298ba57169cbdcd63395eaef92dbc8eeeb

Contents?: true

Size: 1.39 KB

Versions: 22

Compression:

Stored size: 1.39 KB

Contents

"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;

Version data entries

22 entries across 22 versions & 2 rubygems

Version Path
appmap-0.72.2 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.72.1 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.72.0 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.71.0 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.70.2 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.70.1 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.70.0 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.69.0 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.68.2 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.68.1 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.68.0 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.67.1 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.67.0 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.66.2 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.66.1 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.66.0 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.65.1 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.65.0 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.64.0 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js
appmap-0.63.0 ./node_modules/w3c-hr-time/lib/clock-is-accurate.js