perf: report cold and minimal times when profiling in a browser (#33653)
PR Close #33653
This commit is contained in:
parent
81828ae7f4
commit
e8d43d8fde
@ -42,19 +42,33 @@ export function bindAction(selector: string, callback: () => void) {
|
|||||||
export function profile(create: () => void, destroy: () => void, name: string) {
|
export function profile(create: () => void, destroy: () => void, name: string) {
|
||||||
return function() {
|
return function() {
|
||||||
window.console.profile(name);
|
window.console.profile(name);
|
||||||
let duration = 0;
|
const noOfRuns = 150;
|
||||||
|
let durations: number[] = [];
|
||||||
let count = 0;
|
let count = 0;
|
||||||
while (count++ < 150) {
|
while (count++ < noOfRuns) {
|
||||||
const start = window.performance.now();
|
const start = window.performance.now();
|
||||||
create();
|
create();
|
||||||
duration += window.performance.now() - start;
|
const end = window.performance.now() - start;
|
||||||
|
durations.push(end);
|
||||||
destroy();
|
destroy();
|
||||||
}
|
}
|
||||||
window.console.profileEnd();
|
window.console.profileEnd();
|
||||||
window.console.log(`Iterations: ${count}; time: ${duration / count} ms / iteration`);
|
reportProfileResults(durations, noOfRuns);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function reportProfileResults(durations: number[], count: number) {
|
||||||
|
const totalDuration = durations.reduce((soFar: number, duration: number) => soFar + duration, 0);
|
||||||
|
const avgDuration = (totalDuration / count).toFixed(2);
|
||||||
|
const minDuration = durations
|
||||||
|
.reduce(
|
||||||
|
(soFar: number, duration: number) => Math.min(soFar, duration),
|
||||||
|
Number.MAX_SAFE_INTEGER)
|
||||||
|
.toFixed(2);
|
||||||
|
window.console.log(
|
||||||
|
`Iterations: ${count}; cold time: ${durations[0].toFixed(2)} ms; average time: ${avgDuration} ms / iteration; best time: ${minDuration} ms`);
|
||||||
|
}
|
||||||
|
|
||||||
// helper script that will read out the url parameters
|
// helper script that will read out the url parameters
|
||||||
// and store them in appropriate form fields on the page
|
// and store them in appropriate form fields on the page
|
||||||
function urlParamsToForm() {
|
function urlParamsToForm() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user