UNPKG

dynatrace-cordova-outsystems-plugin

Version:

This plugin gives you the ability to use the Dynatrace instrumentation in your hybrid application (Cordova, Ionic, ..). It uses the Mobile Agent, the JavaScript Agent and the Javascript Bridge. The Mobile Agent will give you all device specific values con

62 lines (50 loc) 1.42 kB
"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;