clarity-js
Version:
An analytics library that uses web page interactions to generate aggregated insights
27 lines (22 loc) • 1.16 kB
text/typescript
let startTime = 0;
function computeStartTime(): number {
return performance.now() + performance.timeOrigin;
}
export function start(): void {
startTime = computeStartTime();
}
// event.timestamp is number of milliseconds elapsed since the document was loaded
// since iframes can be loaded later the event timestamp is not the same as performance.now()
// converting everything to absolute time by adding timeorigin of the event view
// to synchronize times before calculating the difference with start time
export function time(event: UIEvent | PageTransitionEvent = null): number {
// If startTime is 0, Clarity hasn't been started or has been stopped
// Use a local baseline to maintain relative timing semantics without affecting global state
let baseline = startTime === 0 ? computeStartTime() : startTime;
let ts = event && event.timeStamp > 0 ? event.timeStamp : performance.now();
let origin = event && (event as UIEvent).view ? (event as UIEvent).view.performance.timeOrigin : performance.timeOrigin;
return Math.max(Math.round(ts + origin - baseline), 0);
}
export function stop(): void {
startTime = 0;
}