decla-red/frontend/src/scripts/helper/timing.ts
schmelczerandras 40a660b7cb Add linting
2020-08-18 16:52:11 +02:00

35 lines
931 B
TypeScript

import { InfoText } from '../objects/types/info-text';
import { last } from './last';
export function timeIt(interval = 60) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
let i = 0;
let previousTimes: Array<DOMHighResTimeStamp> = [];
const targetFunction = descriptor.value;
descriptor.value = function (...values) {
const start = performance.now();
targetFunction.bind(this)(...values);
const end = performance.now();
previousTimes.push(end - start);
if (i++ % interval == 0) {
previousTimes = previousTimes.sort();
const text = `Max: ${last(previousTimes).toFixed(
2
)} ms\n\tMedian: ${previousTimes[Math.floor(previousTimes.length / 2)].toFixed(
2
)} ms`;
InfoText.modifyRecord(propertyKey, text);
previousTimes = [];
}
};
return descriptor;
};
}