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 Workerimport {assertExists} from '../base/logging'; 18*6dbdd20aSAndroid Build Coastguard Worker 19*6dbdd20aSAndroid Build Coastguard Workertest.describe.configure({mode: 'serial'}); 20*6dbdd20aSAndroid Build Coastguard Worker 21*6dbdd20aSAndroid Build Coastguard Workerlet pth: PerfettoTestHelper; 22*6dbdd20aSAndroid Build Coastguard Workerlet page: Page; 23*6dbdd20aSAndroid Build Coastguard Worker 24*6dbdd20aSAndroid Build Coastguard Worker// Clip only the bottom half of the UI. When dealing with area selection, the 25*6dbdd20aSAndroid Build Coastguard Worker// time-width of the mouse-based region (which then is showed up in the upper 26*6dbdd20aSAndroid Build Coastguard Worker// ruler) is not 100% reproducible. 27*6dbdd20aSAndroid Build Coastguard Workerconst SCREEN_CLIP = { 28*6dbdd20aSAndroid Build Coastguard Worker clip: { 29*6dbdd20aSAndroid Build Coastguard Worker x: 230, 30*6dbdd20aSAndroid Build Coastguard Worker y: 500, 31*6dbdd20aSAndroid Build Coastguard Worker width: 1920, 32*6dbdd20aSAndroid Build Coastguard Worker height: 1080, 33*6dbdd20aSAndroid Build Coastguard Worker }, 34*6dbdd20aSAndroid Build Coastguard Worker}; 35*6dbdd20aSAndroid Build Coastguard Worker 36*6dbdd20aSAndroid Build Coastguard Workertest.beforeAll(async ({browser}, _testInfo) => { 37*6dbdd20aSAndroid Build Coastguard Worker page = await browser.newPage(); 38*6dbdd20aSAndroid Build Coastguard Worker pth = new PerfettoTestHelper(page); 39*6dbdd20aSAndroid Build Coastguard Worker await pth.openTraceFile('wattson_dsu_pmu.pb'); 40*6dbdd20aSAndroid Build Coastguard Worker}); 41*6dbdd20aSAndroid Build Coastguard Worker 42*6dbdd20aSAndroid Build Coastguard Workertest('wattson aggregations', async () => { 43*6dbdd20aSAndroid Build Coastguard Worker const wattsonGrp = pth.locateTrackGroup('Wattson'); 44*6dbdd20aSAndroid Build Coastguard Worker await wattsonGrp.scrollIntoViewIfNeeded(); 45*6dbdd20aSAndroid Build Coastguard Worker await pth.toggleTrackGroup(wattsonGrp); 46*6dbdd20aSAndroid Build Coastguard Worker const cpuEstimate = pth.locateTrack('Wattson/Cpu0 Estimate', wattsonGrp); 47*6dbdd20aSAndroid Build Coastguard Worker const coords = assertExists(await cpuEstimate.boundingBox()); 48*6dbdd20aSAndroid Build Coastguard Worker await page.keyboard.press('Escape'); 49*6dbdd20aSAndroid Build Coastguard Worker await page.mouse.move(600, coords.y + 10); 50*6dbdd20aSAndroid Build Coastguard Worker await page.mouse.down(); 51*6dbdd20aSAndroid Build Coastguard Worker await page.mouse.move(1000, coords.y + 80); 52*6dbdd20aSAndroid Build Coastguard Worker await page.mouse.up(); 53*6dbdd20aSAndroid Build Coastguard Worker await pth.waitForIdleAndScreenshot('wattson-estimate-aggr.png', SCREEN_CLIP); 54*6dbdd20aSAndroid Build Coastguard Worker await page.keyboard.press('Escape'); 55*6dbdd20aSAndroid Build Coastguard Worker}); 56*6dbdd20aSAndroid Build Coastguard Worker 57*6dbdd20aSAndroid Build Coastguard Workertest('sched aggregations', async () => { 58*6dbdd20aSAndroid Build Coastguard Worker await page.keyboard.press('Escape'); 59*6dbdd20aSAndroid Build Coastguard Worker await page.mouse.move(600, 250); 60*6dbdd20aSAndroid Build Coastguard Worker await page.mouse.down(); 61*6dbdd20aSAndroid Build Coastguard Worker await page.mouse.move(800, 350); 62*6dbdd20aSAndroid Build Coastguard Worker await page.mouse.up(); 63*6dbdd20aSAndroid Build Coastguard Worker await pth.waitForPerfettoIdle(); 64*6dbdd20aSAndroid Build Coastguard Worker 65*6dbdd20aSAndroid Build Coastguard Worker await page.click('button[label="Wattson by thread"]'); 66*6dbdd20aSAndroid Build Coastguard Worker await pth.waitForIdleAndScreenshot('sched-aggr-thread.png', SCREEN_CLIP); 67*6dbdd20aSAndroid Build Coastguard Worker 68*6dbdd20aSAndroid Build Coastguard Worker await page.click('button[label="Wattson by process"]'); 69*6dbdd20aSAndroid Build Coastguard Worker await pth.waitForIdleAndScreenshot('sched-aggr-process.png', SCREEN_CLIP); 70*6dbdd20aSAndroid Build Coastguard Worker 71*6dbdd20aSAndroid Build Coastguard Worker await page.keyboard.press('Escape'); 72*6dbdd20aSAndroid Build Coastguard Worker}); 73