Skip to content

Commit bc2a611

Browse files
committed
remove raf delay for puppeteer
1 parent 372ae65 commit bc2a611

File tree

5 files changed

+56
-21
lines changed

5 files changed

+56
-21
lines changed

webdriver-ts/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"compile": "tsc",
1111
"results": "ts-node src/createResultJS.ts && cd .. && cd webdriver-ts-results && npm run build-prod",
1212
"index": "ts-node src/createIndex.ts",
13-
"isKeyed": "cross-env LANG=\"en_US.UTF-8\" ts-node src/isKeyed.ts"
13+
"isKeyed": "cross-env LANG=\"en_US.UTF-8\" ts-node src/isKeyed.ts",
14+
"parse": "ts-node src/parseTrace.ts"
1415
},
1516
"author": "",
1617
"license": "Apache-2.0",

webdriver-ts/results.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

webdriver-ts/src/forkedBenchmarkRunnerPuppeteer.ts

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,34 @@ interface Timingresult {
2121

2222
export function extractRelevantEvents(entries: any[]) {
2323
let filteredEvents: Timingresult[] = [];
24-
let click = 0;
24+
let click_start = 0;
25+
let click_end = 0;
2526

2627
entries.forEach(x => {
2728
let e = x;
2829
if (config.LOG_DEBUG) console.log(JSON.stringify(e));
2930
if (e.name==='EventDispatch') {
3031
if (e.args.data.type==="click") {
3132
if (config.LOG_DETAILS) console.log("CLICK ",+e.ts);
32-
click = e.ts;
33+
click_start = +e.ts;
34+
click_end = +e.ts+e.dur;
3335
filteredEvents.push({type:'click', ts: +e.ts, dur: +e.dur, end: +e.ts+e.dur});
3436
}
3537
} else if (e.name==='CompositeLayers' && e.ph==="X") {
36-
if (config.LOG_DETAILS) console.log("CompositeLayers",+e.ts+e.dur, +e.ts+e.dur-click);
38+
if (config.LOG_DETAILS) console.log("CompositeLayers",+e.ts+e.dur, +e.ts+e.dur-click_start);
3739
filteredEvents.push({type:'compositelayers', ts: +e.ts, dur: +e.dur, end: +e.ts+e.dur, evt: JSON.stringify(e)});
3840
} else if (e.name==='Layout' && e.ph==="X") {
39-
if (config.LOG_DETAILS) console.log("Layout",+e.ts+e.dur, +e.ts+e.dur-click);
41+
if (config.LOG_DETAILS) console.log("Layout",+e.ts+e.dur, +e.ts+e.dur-click_start);
4042
filteredEvents.push({type:'layout', ts: +e.ts, dur: +e.dur, end: +e.ts+e.dur, evt: JSON.stringify(e)});
4143
} else if (e.name==='Paint' && e.ph==="X") {
42-
if (config.LOG_DETAILS) console.log("PAINT",+e.ts+e.dur, +e.ts+e.dur-click);
44+
if (config.LOG_DETAILS) console.log("PAINT",+e.ts+e.dur, +e.ts+e.dur-click_start);
4345
filteredEvents.push({type:'paint', ts: +e.ts, dur: +e.dur, end: +e.ts+e.dur, evt: JSON.stringify(e)});
46+
} else if (e.name==='FireAnimationFrame' && e.ph==="X") {
47+
if (config.LOG_DETAILS) console.log("FireAnimationFrame",+e.ts+e.dur, +e.ts-click_start);
48+
filteredEvents.push({type:'fireAnimationFrame', ts: +e.ts, dur: +e.dur, end: +e.ts+e.dur, evt: JSON.stringify(e)});
49+
} else if (e.name==='RequestAnimationFrame') {
50+
if (config.LOG_DETAILS) console.log("RequestAnimationFrame",+e.ts, +e.ts-click_start, +e.ts-click_end);
51+
filteredEvents.push({type:'requestAnimationFrame', ts: +e.ts, dur: 0, end: +e.ts, evt: JSON.stringify(e)});
4452
}
4553
});
4654
return filteredEvents;
@@ -67,7 +75,7 @@ export async function computeResultsCPU(fileName: string, durationMeasurementMod
6775
const perfLogEvents = (await fetchEventsFromPerformanceLog(fileName));
6876
let eventsDuringBenchmark = R.sortBy((e: Timingresult) => e.end)(perfLogEvents);
6977

70-
// console.log("eventsDuringBenchmark ", asString(eventsDuringBenchmark));
78+
// console.log("eventsDuringBenchmark ", eventsDuringBenchmark);
7179

7280
console.log("computeResultsCPU ",durationMeasurementMode)
7381

@@ -76,39 +84,65 @@ export async function computeResultsCPU(fileName: string, durationMeasurementMod
7684
console.log("exactly one click event is expected", eventsDuringBenchmark);
7785
throw "exactly one click event is expected";
7886
}
87+
let click = clicks[0];
7988

8089
let onlyUsePaintEventsAfter: Timingresult;
81-
let layouts = R.filter(type_eq('layout'))(eventsDuringBenchmark)
82-
layouts = R.filter((e: Timingresult) => e.ts > clicks[0].end)(layouts);
90+
let layouts = R.filter((e: Timingresult) => e.ts > click.end)(R.filter(type_eq('layout'))(eventsDuringBenchmark))
8391
if (durationMeasurementMode==DurationMeasurementMode.FIRST_PAINT_AFTER_LAYOUT) {
8492
if (layouts.length > 1) {
8593
console.log("INFO: more than one layout event found");
8694
layouts.forEach(l => {
87-
console.log("layout event",l.end-clicks[0].ts);
95+
console.log("layout event",l.end-click.ts);
8896
})
8997
} else if (layouts.length == 0) {
9098
console.log("ERROR: exactly one layout event is expected", eventsDuringBenchmark);
9199
throw "exactly one layouts event is expected";
92100
}
93101
onlyUsePaintEventsAfter = layouts[layouts.length-1];
94102
} else {
95-
onlyUsePaintEventsAfter = clicks[0];
103+
onlyUsePaintEventsAfter = click;
96104
}
97105

98-
let paints = R.filter(type_eq('paint'))(eventsDuringBenchmark);
99-
paints = R.filter((e: Timingresult) => e.ts > onlyUsePaintEventsAfter.end)(paints);
106+
let paints = R.filter((e: Timingresult) => e.ts > onlyUsePaintEventsAfter.end)(R.filter(type_eq('paint'))(eventsDuringBenchmark));
100107
if (paints.length == 0) {
101108
console.log("ERROR: No paint event found");
102109
throw "No paint event found";
103110
}
104111
if (paints.length > 1) {
105112
console.log("more than one paint event found");
106113
paints.forEach(l => {
107-
console.log("paints event",(l.end-clicks[0].ts)/1000.0);
114+
console.log("paints event",(l.end-click.ts)/1000.0);
108115
})
109116
}
110-
let duration = (paints[durationMeasurementMode==DurationMeasurementMode.FIRST_PAINT_AFTER_LAYOUT ? 0 : paints.length-1].end - clicks[0].ts)/1000.0;
117+
let paint = paints[durationMeasurementMode==DurationMeasurementMode.FIRST_PAINT_AFTER_LAYOUT ? 0 : paints.length-1];
118+
let duration = (paint.end - clicks[0].ts)/1000.0;
111119
console.log("duration", duration);
120+
121+
let rafs_withinClick = R.filter((e: Timingresult) => e.ts >= click.ts && e.ts <= click.end)(R.filter(type_eq('requestAnimationFrame'))(eventsDuringBenchmark));
122+
if (rafs_withinClick.length =1) {
123+
let fafs = R.filter((e: Timingresult) => e.ts >= click.ts && e.ts < paint.ts)(R.filter(type_eq('fireAnimationFrame'))(eventsDuringBenchmark));
124+
if (layouts.length>0) {
125+
fafs = R.filter((e: Timingresult) => e.end < layouts[0].ts)(fafs);
126+
}
127+
if (paints.length>0) {
128+
fafs = R.filter((e: Timingresult) => e.end < paints[0].ts)(fafs);
129+
}
130+
if (fafs.length !=1) {
131+
console.log(`*#* there were ${fafs.length} fafs`);
132+
}
133+
if (fafs.length > 0 && rafs_withinClick.length > 0) {
134+
let waitDelay = (fafs[0].ts - click.end) / 1000.0;
135+
duration = duration - waitDelay;
136+
if (waitDelay > 16) {
137+
console.log(`*#* WARNING: duration of raf delay is longer than expected: ${waitDelay}`);
138+
}
139+
console.log(`*#* there was one faf and one raf with a idle duration of ${waitDelay}. New duration ${duration}`);
140+
} else if (fafs.length!=0 && rafs_withinClick.length == 1) {
141+
console.log(`*#* ERROR: unexpected raf faf pattern: ${fafs.length} fafs and ${rafs_withinClick.length} rafs`);
142+
}
143+
}
144+
145+
112146
return duration;
113147
}
114148

webdriver-ts/src/parseTrace.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ async function main() {
2121

2222

2323
// console.log(await computeResultsCPU(`traces/vanillajs-keyed_04_select1k_0.json`, false))
24-
for (let i = 0; i < 12; i++) {
24+
// for (let i = 1; i < 2; i++) {
2525
// let trace = `traces/angular-v13.0.0-keyed_01_run1k_${i}.json`;
26-
let trace = `traces/angular-v13.0.0-keyed_01_run1k_${i}.json`;
26+
let trace = `traces/elm-v0.19.1-3-keyed_06_remove-one-1k_2.json`;
2727
console.log("trace", trace)
28-
console.log(await computeResultsCPU(trace, DurationMeasurementMode.FIRST_PAINT_AFTER_LAYOUT));
29-
}
28+
console.log(await computeResultsCPU(trace, DurationMeasurementMode.LAST_PAINT));
29+
// }
3030
}
3131

3232
async function readAll() {

webdriver-ts/src/puppeteerAccess.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ export async function startBrowser(benchmarkOptions: BenchmarkDriverOptions): Pr
105105
"--disable-background-networking",
106106
"--enable-features=NetworkService,NetworkServiceInProcess",
107107
"--disable-background-timer-throttling",
108-
"--disable-backgrounding-occluded-windows",
108+
// "--disable-backgrounding-occluded-windows",
109109
// "--disable-breakpad",
110110
// "--disable-client-side-phishing-detection",
111111
// "--disable-component-extensions-with-background-pages",

0 commit comments

Comments
 (0)