feat: profiling setup

This commit is contained in:
shirakaba
2022-12-17 17:46:31 +09:00
parent 2d0c3ff6a9
commit 40db84e653
3 changed files with 98 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
class Profiler {
private map: Record<string, number> = {};
profile<T>(key: string, action: () => T) {
const start = global.isIOS ? (global as any).performance.now() : __time();
const returnValue = action();
const stop = global.isIOS ? (global as any).performance.now() : __time();
const period = stop - start;
this.map[key] = (this.map[key] || 0) + period;
// console.log(`[PROFILE] ${key}: ${stop - start} ms`);
return returnValue;
}
flush() {
const map = this.map;
this.map = {};
return map;
}
get(key: string) {
return this.map[key];
}
report(map: Record<string, number> = this.map) {
return Object.entries(map).sort(([, valueA], [, valueB]) => {
return sortDescending(valueA, valueB);
});
}
}
function sortDescending(a: number, b: number): 1 | 0 | -1 {
return a < b ? 1 : a > b ? -1 : 0;
}
export const jamieProfiler = new Profiler();