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
54 lines (42 loc) • 1.59 kB
JavaScript
;
// Actual implementation of the Performance class.
const clockIsAccurate = require("./clock-is-accurate");
const calculateClockOffset = require("./calculate-clock-offset");
const { hrtime, toMS } = require("./utils");
const kTimeOrigin = Symbol("time origin");
const kTimeOriginTimestamp = Symbol("time origin timestamp");
class Performance {
constructor() {
// Time origin.
const timeOrigin = hrtime();
this[kTimeOrigin] = timeOrigin;
if (clockIsAccurate) {
// Let |t1| be the DOMHighResTimeStamp representing the high resolution Unix time at which the global monotonic
// clock is zero. This has to be calculated for every Performance object to account for clock drifts.
const t1 = calculateClockOffset();
// Let |t2| be the DOMHighResTimeStamp representing the high resolution time value of the global monotonic clock
// at global's time origin.
const t2 = toMS(timeOrigin);
// Return the sum of |t1| and |t2|.
this[kTimeOriginTimestamp] = t1 + t2;
} else {
// Clock isn't accurate enough. Use millisecond accuracy per spec.
const cur = Date.now();
this[kTimeOriginTimestamp] = cur;
}
}
// The timeOrigin getter actually returns the time origin timestamp, not the raw time origin.
get timeOrigin() {
return this[kTimeOriginTimestamp];
}
now() {
const diff = toMS(hrtime(this[kTimeOrigin]));
return clockIsAccurate ? diff : Math.round(diff);
}
toJSON() {
return {
timeOrigin: this.timeOrigin
};
}
}
module.exports = { Performance };