Skip to content

Commit ae921e7

Browse files
Lightning00BladeDevtools-frontend LUCI CQ
authored andcommitted
Return data from trace loading directly
Ref: flaky - "run large cpu profile benchmark" This simplifies the logic of down consumers to not need a separate listener. While this most likely won't solve the issue it will provide better debugging next time it happens as we should get a proper line that things failed. Currently the first listener errors first and we lose the data for the second one. Bug: none Change-Id: I02be3975c210bd1d1d8922897adb28714be01308 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/7642744 Auto-Submit: Nikolay Vitkov <nvitkov@chromium.org> Reviewed-by: Alina Varkki <alinavarkki@chromium.org> Commit-Queue: Alina Varkki <alinavarkki@chromium.org> Commit-Queue: Nikolay Vitkov <nvitkov@chromium.org>
1 parent 78e999c commit ae921e7

5 files changed

Lines changed: 15 additions & 25 deletions

File tree

front_end/panels/timeline/BUILD.gn

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,7 @@ devtools_entrypoint("bundle") {
173173

174174
visibility = [
175175
":*",
176-
"../../../test/interactions/panels/performance/timeline/*",
177-
"../../../test/perf/*",
176+
"../../../test/e2e/*",
178177
"../../entrypoints/*",
179178
"../../models/trace/handlers:unittests",
180179
"../../panels/ai_assistance/*",

test/e2e/helpers/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ node_ts_library("helpers") {
3737
deps = [
3838
"../../../extension-api",
3939
"../../../front_end/panels/recorder:bundle",
40+
"../../../front_end/panels/timeline:bundle",
4041
"../../shared",
4142
"../shared",
4243
]

test/e2e/helpers/performance-helpers.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as fs from 'node:fs';
66
import * as path from 'node:path';
77
import type * as puppeteer from 'puppeteer-core';
88

9+
import type * as Timeline from '../../../front_end/panels/timeline/timeline.js';
910
import {GEN_DIR} from '../../conductor/paths.js';
1011
import type {DevToolsPage} from '../shared/frontend-helper.js';
1112
import type {InspectedPage} from '../shared/target-helper.js';
@@ -242,23 +243,24 @@ export async function loadTraceAndWaitToFullyRender(
242243
devToolsPage: DevToolsPage,
243244
initiateTraceLoadCb: () => Promise<unknown>,
244245
checkHasActiveTrace = false,
245-
) {
246+
): Promise<number> {
246247
const panelElement = await devToolsPage.waitFor('.widget.panel.timeline');
247-
await Promise.all([
248+
const [, traceLoadedData] = await Promise.all([
248249
initiateTraceLoadCb(),
249250
panelElement.evaluate(
250251
(el, checkPanelState) => {
251-
return new Promise<void>(async res => {
252+
return new Promise<number>(async res => {
252253
// Set-up the event listener first to prevent further
253254
// race conditions.
254-
el.addEventListener('traceload', () => {
255-
res();
255+
el.addEventListener('traceload', e => {
256+
const ev = e as Timeline.BenchmarkEvents.TraceLoadEvent;
257+
res(ev.duration);
256258
}, {once: true});
257259
if (checkPanelState) {
258260
// @ts-expect-error This is loaded inside the new DevTools page.
259261
const TimelineModule = await import('./panels/timeline/timeline.js');
260262
if (TimelineModule.TimelinePanel.TimelinePanel.instance().hasActiveTrace()) {
261-
res();
263+
res(-1);
262264
}
263265
}
264266
});
@@ -273,6 +275,8 @@ export async function loadTraceAndWaitToFullyRender(
273275
await devToolsPage.timeout(200);
274276
await devToolsPage.raf();
275277
await devToolsPage.raf();
278+
279+
return traceLoadedData;
276280
}
277281

278282
export async function reloadAndRecord(devToolsPage: DevToolsPage) {
@@ -404,5 +408,5 @@ export async function uploadTraceFile(devToolsPage: DevToolsPage, tracePath: str
404408
throw new Error(`Test trace file not found: ${testTrace}`);
405409
}
406410

407-
await loadTraceAndWaitToFullyRender(devToolsPage, () => uploadProfileHandle.uploadFile(testTrace));
411+
return await loadTraceAndWaitToFullyRender(devToolsPage, () => uploadProfileHandle.uploadFile(testTrace));
408412
}

test/perf/panels/performance/BUILD.gn

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ ts_e2e_library("performance") {
88
sources = [ "trace-load.test.ts" ]
99

1010
deps = [
11-
"../../../../front_end/panels/timeline:bundle",
1211
"../../../e2e/conductor:implementation",
1312
"../../../e2e/helpers",
1413
"../../report",

test/perf/panels/performance/trace-load.test.ts

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,18 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import type * as Timeline from '../../../../front_end/panels/timeline/timeline.js';
65
import {
76
navigateToPerformanceTab,
87
uploadTraceFile,
98
} from '../../../e2e/helpers/performance-helpers.js';
109
import type {DevToolsPage} from '../../../e2e/shared/frontend-helper.js';
1110
import type {InspectedPage} from '../../../e2e/shared/target-helper.js';
1211
import {measurements} from '../../report/report.js';
13-
1412
async function timeFixture(fixture: string, devToolsPage: DevToolsPage, inspectedPage: InspectedPage): Promise<number> {
1513
await navigateToPerformanceTab(undefined, devToolsPage, inspectedPage);
16-
const panelElement = await devToolsPage.waitFor('.widget.panel.timeline');
17-
const [result] = await Promise.all([
18-
panelElement.evaluate(el => {
19-
return new Promise<number>(res => {
20-
el.addEventListener('traceload', e => {
21-
const ev = e as Timeline.BenchmarkEvents.TraceLoadEvent;
22-
res(ev.duration);
23-
}, {once: true});
24-
});
25-
}),
26-
uploadTraceFile(devToolsPage, `front_end/panels/timeline/fixtures/traces/${fixture}.gz`),
27-
]);
14+
await devToolsPage.waitFor('.widget.panel.timeline');
2815

29-
return result;
16+
return await uploadTraceFile(devToolsPage, `front_end/panels/timeline/fixtures/traces/${fixture}.gz`);
3017
}
3118

3219
describe('Performance panel trace load performance', () => {

0 commit comments

Comments
 (0)