xref: /aosp_15_r20/external/perfetto/ui/src/test/debug_tracks.test.ts (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2024 The Android Open Source Project
2*6dbdd20aSAndroid Build Coastguard Worker//
3*6dbdd20aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*6dbdd20aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*6dbdd20aSAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*6dbdd20aSAndroid Build Coastguard Worker//
7*6dbdd20aSAndroid Build Coastguard Worker//      http://www.apache.org/licenses/LICENSE-2.0
8*6dbdd20aSAndroid Build Coastguard Worker//
9*6dbdd20aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*6dbdd20aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*6dbdd20aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*6dbdd20aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*6dbdd20aSAndroid Build Coastguard Worker// limitations under the License.
14*6dbdd20aSAndroid Build Coastguard Worker
15*6dbdd20aSAndroid Build Coastguard Workerimport {test, Page} from '@playwright/test';
16*6dbdd20aSAndroid Build Coastguard Workerimport {PerfettoTestHelper} from './perfetto_ui_test_helper';
17*6dbdd20aSAndroid Build Coastguard Worker
18*6dbdd20aSAndroid Build Coastguard Workertest.describe.configure({mode: 'serial'});
19*6dbdd20aSAndroid Build Coastguard Worker
20*6dbdd20aSAndroid Build Coastguard Workerlet pth: PerfettoTestHelper;
21*6dbdd20aSAndroid Build Coastguard Workerlet page: Page;
22*6dbdd20aSAndroid Build Coastguard Worker
23*6dbdd20aSAndroid Build Coastguard Workerconst SQL_QUERY = `select id, ts, dur, name, category, track_id from slices
24*6dbdd20aSAndroid Build Coastguard Workerwhere category is not null  limit 1000`;
25*6dbdd20aSAndroid Build Coastguard Worker
26*6dbdd20aSAndroid Build Coastguard Workertest.beforeAll(async ({browser}, _testInfo) => {
27*6dbdd20aSAndroid Build Coastguard Worker  page = await browser.newPage();
28*6dbdd20aSAndroid Build Coastguard Worker  pth = new PerfettoTestHelper(page);
29*6dbdd20aSAndroid Build Coastguard Worker  await pth.openTraceFile('api34_startup_cold.perfetto-trace');
30*6dbdd20aSAndroid Build Coastguard Worker});
31*6dbdd20aSAndroid Build Coastguard Worker
32*6dbdd20aSAndroid Build Coastguard Workertest('debug tracks', async () => {
33*6dbdd20aSAndroid Build Coastguard Worker  const omnibox = page.locator('input[ref=omnibox]');
34*6dbdd20aSAndroid Build Coastguard Worker  await omnibox.focus();
35*6dbdd20aSAndroid Build Coastguard Worker  await omnibox.selectText();
36*6dbdd20aSAndroid Build Coastguard Worker  await omnibox.press(':');
37*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForPerfettoIdle();
38*6dbdd20aSAndroid Build Coastguard Worker  await omnibox.fill(SQL_QUERY);
39*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForPerfettoIdle();
40*6dbdd20aSAndroid Build Coastguard Worker  await omnibox.press('Enter');
41*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForPerfettoIdle();
42*6dbdd20aSAndroid Build Coastguard Worker
43*6dbdd20aSAndroid Build Coastguard Worker  await page.getByRole('button', {name: 'Show debug track'}).click();
44*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForPerfettoIdle();
45*6dbdd20aSAndroid Build Coastguard Worker  await page.keyboard.type('debug track'); // The track name
46*6dbdd20aSAndroid Build Coastguard Worker  await page.keyboard.press('Enter');
47*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForPerfettoIdle();
48*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForIdleAndScreenshot('debug track added.png');
49*6dbdd20aSAndroid Build Coastguard Worker
50*6dbdd20aSAndroid Build Coastguard Worker  // Click on a slice on the debug track.
51*6dbdd20aSAndroid Build Coastguard Worker  await page.mouse.click(590, 180);
52*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForPerfettoIdle();
53*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForIdleAndScreenshot('debug slice clicked.png');
54*6dbdd20aSAndroid Build Coastguard Worker
55*6dbdd20aSAndroid Build Coastguard Worker  // Close the debug track.
56*6dbdd20aSAndroid Build Coastguard Worker  await pth.locateTrack('debug track').getByText('close').first().click();
57*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForPerfettoIdle();
58*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForIdleAndScreenshot('debug track removed.png');
59*6dbdd20aSAndroid Build Coastguard Worker});
60*6dbdd20aSAndroid Build Coastguard Worker
61*6dbdd20aSAndroid Build Coastguard Workertest('debug tracks pivot', async () => {
62*6dbdd20aSAndroid Build Coastguard Worker  const omnibox = page.locator('input[ref=omnibox]');
63*6dbdd20aSAndroid Build Coastguard Worker  await omnibox.focus();
64*6dbdd20aSAndroid Build Coastguard Worker  await omnibox.selectText();
65*6dbdd20aSAndroid Build Coastguard Worker  await omnibox.press(':');
66*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForPerfettoIdle();
67*6dbdd20aSAndroid Build Coastguard Worker  await omnibox.fill(SQL_QUERY);
68*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForPerfettoIdle();
69*6dbdd20aSAndroid Build Coastguard Worker  await omnibox.press('Enter');
70*6dbdd20aSAndroid Build Coastguard Worker
71*6dbdd20aSAndroid Build Coastguard Worker  await page.getByRole('button', {name: 'Show debug track'}).click();
72*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForPerfettoIdle();
73*6dbdd20aSAndroid Build Coastguard Worker  await page.keyboard.type('pivot'); // The track name
74*6dbdd20aSAndroid Build Coastguard Worker  await page.locator('.pf-popup-portal #pivot').selectOption('category');
75*6dbdd20aSAndroid Build Coastguard Worker  await page.keyboard.press('Enter');
76*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForPerfettoIdle();
77*6dbdd20aSAndroid Build Coastguard Worker  await pth.waitForIdleAndScreenshot('debug track pivot.png', {
78*6dbdd20aSAndroid Build Coastguard Worker    clip: {
79*6dbdd20aSAndroid Build Coastguard Worker      x: (await pth.sidebarSize()).width,
80*6dbdd20aSAndroid Build Coastguard Worker      y: 180,
81*6dbdd20aSAndroid Build Coastguard Worker      width: 1920,
82*6dbdd20aSAndroid Build Coastguard Worker      height: 600,
83*6dbdd20aSAndroid Build Coastguard Worker    },
84*6dbdd20aSAndroid Build Coastguard Worker  });
85*6dbdd20aSAndroid Build Coastguard Worker});
86