clarity-js
Version:
An analytics library that uses web page interactions to generate aggregated insights
20 lines (18 loc) • 835 B
text/typescript
import { Code, Metric, Setting, Severity } from "@clarity-types/data";
import { report } from "@src/core/report";
import * as metric from "@src/data/metric";
import * as internal from "@src/diagnostic/internal";
// tslint:disable-next-line: ban-types
export default function (method: Function): Function {
return function (): void {
let start = performance.now();
try { method.apply(this, arguments); } catch (ex) { throw report(ex); }
let duration = performance.now() - start;
metric.sum(Metric.TotalCost, duration);
if (duration > Setting.LongTask) {
metric.count(Metric.LongTaskCount);
metric.max(Metric.ThreadBlockedTime, duration);
method.dn && internal.log(Code.FunctionExecutionTime, Severity.Info, method.dn + "-" + duration);
}
};
}