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 {NUM} from '../../trace_processor/query_result'; 16*6dbdd20aSAndroid Build Coastguard Workerimport {Trace} from '../../public/trace'; 17*6dbdd20aSAndroid Build Coastguard Workerimport {PerfettoPlugin} from '../../public/plugin'; 18*6dbdd20aSAndroid Build Coastguard Workerimport {createQuerySliceTrack} from '../../components/tracks/query_slice_track'; 19*6dbdd20aSAndroid Build Coastguard Workerimport {TrackNode} from '../../public/workspace'; 20*6dbdd20aSAndroid Build Coastguard Worker 21*6dbdd20aSAndroid Build Coastguard Workerexport default class implements PerfettoPlugin { 22*6dbdd20aSAndroid Build Coastguard Worker static readonly id = 'dev.perfetto.TraceMetadata'; 23*6dbdd20aSAndroid Build Coastguard Worker async onTraceLoad(ctx: Trace): Promise<void> { 24*6dbdd20aSAndroid Build Coastguard Worker const res = await ctx.engine.query(` 25*6dbdd20aSAndroid Build Coastguard Worker select count() as cnt from (select 1 from clock_snapshot limit 1) 26*6dbdd20aSAndroid Build Coastguard Worker `); 27*6dbdd20aSAndroid Build Coastguard Worker const row = res.firstRow({cnt: NUM}); 28*6dbdd20aSAndroid Build Coastguard Worker if (row.cnt === 0) { 29*6dbdd20aSAndroid Build Coastguard Worker return; 30*6dbdd20aSAndroid Build Coastguard Worker } 31*6dbdd20aSAndroid Build Coastguard Worker const uri = `/clock_snapshots`; 32*6dbdd20aSAndroid Build Coastguard Worker const title = 'Clock Snapshots'; 33*6dbdd20aSAndroid Build Coastguard Worker const track = await createQuerySliceTrack({ 34*6dbdd20aSAndroid Build Coastguard Worker trace: ctx, 35*6dbdd20aSAndroid Build Coastguard Worker uri, 36*6dbdd20aSAndroid Build Coastguard Worker data: { 37*6dbdd20aSAndroid Build Coastguard Worker sqlSource: ` 38*6dbdd20aSAndroid Build Coastguard Worker select ts, 0 as dur, 'Snapshot' as name 39*6dbdd20aSAndroid Build Coastguard Worker from clock_snapshot 40*6dbdd20aSAndroid Build Coastguard Worker `, 41*6dbdd20aSAndroid Build Coastguard Worker }, 42*6dbdd20aSAndroid Build Coastguard Worker }); 43*6dbdd20aSAndroid Build Coastguard Worker ctx.tracks.registerTrack({ 44*6dbdd20aSAndroid Build Coastguard Worker uri, 45*6dbdd20aSAndroid Build Coastguard Worker title, 46*6dbdd20aSAndroid Build Coastguard Worker track, 47*6dbdd20aSAndroid Build Coastguard Worker }); 48*6dbdd20aSAndroid Build Coastguard Worker const trackNode = new TrackNode({uri, title}); 49*6dbdd20aSAndroid Build Coastguard Worker ctx.workspace.addChildInOrder(trackNode); 50*6dbdd20aSAndroid Build Coastguard Worker } 51*6dbdd20aSAndroid Build Coastguard Worker} 52