blob: 449d23b1d11b5dc5f982d951e952ec0a25177c57 [file] [log] [blame]
// Copyright (C) 2024 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import {test, Page} from '@playwright/test';
import {PerfettoTestHelper} from './perfetto_ui_test_helper';
import {assertExists} from '../base/logging';
test.describe.configure({mode: 'serial'});
let pth: PerfettoTestHelper;
let page: Page;
test.beforeAll(async ({browser}, _testInfo) => {
page = await browser.newPage();
pth = new PerfettoTestHelper(page);
await pth.openTraceFile('api34_startup_cold.perfetto-trace');
});
test('sched', async () => {
await page.mouse.move(600, 250);
await page.mouse.down();
await page.mouse.move(800, 350);
await page.mouse.up();
await pth.waitForPerfettoIdle();
await pth.waitForIdleAndScreenshot('cpu-by-thread.png');
await page.click('button[label="CPU by process"]');
await pth.waitForIdleAndScreenshot('cpu-by-process.png');
// Now test sorting.
const hdr = page.getByRole('cell', {name: 'Avg Wall duration (ms)'});
await hdr.click();
await pth.waitForIdleAndScreenshot('sort-by-wall-duration.png');
await hdr.click();
await pth.waitForIdleAndScreenshot('sort-by-wall-duration-desc.png');
await page.getByRole('cell', {name: 'Occurrences'}).click();
await pth.waitForIdleAndScreenshot('sort-by-occurrences.png');
});
test('gpu counter', async () => {
await page.keyboard.press('Escape');
const gpuTrack = pth.locateTrack('Gpu 0 Frequency');
const coords = assertExists(await gpuTrack.boundingBox());
await page.mouse.move(600, coords.y + 10);
await page.mouse.down();
await page.mouse.move(800, coords.y + 60);
await page.mouse.up();
await pth.waitForIdleAndScreenshot('gpu-counter-aggregation.png');
});
test('frametimeline', async () => {
await page.keyboard.press('Escape');
const sysui = pth.locateTrackGroup('com.android.systemui 25348');
await sysui.scrollIntoViewIfNeeded();
await pth.toggleTrackGroup(sysui);
const actualTimeline = pth.locateTrack(
'com.android.systemui 25348/Actual Timeline',
sysui,
);
const coords = assertExists(await actualTimeline.boundingBox());
await page.mouse.move(600, coords.y + 10);
await page.mouse.down();
await page.mouse.move(1000, coords.y + 20);
await page.mouse.up();
await pth.waitForIdleAndScreenshot('frame-timeline-aggregation.png');
});
test('slices', async () => {
await page.keyboard.press('Escape');
const syssrv = pth.locateTrackGroup('system_server 1719');
await syssrv.scrollIntoViewIfNeeded();
await pth.toggleTrackGroup(syssrv);
const animThread = pth
.locateTrack('system_server 1719/android.anim 1754', syssrv)
.nth(1);
await animThread.scrollIntoViewIfNeeded();
await pth.waitForPerfettoIdle();
const coords = assertExists(await animThread.boundingBox());
await page.mouse.move(600, coords.y + 10);
await page.mouse.down();
await page.mouse.move(1000, coords.y + 20);
await page.mouse.up();
await pth.waitForIdleAndScreenshot('slice-aggregation.png');
});