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 {assetSrc} from '../../base/assets'; 16*6dbdd20aSAndroid Build Coastguard Workerimport {assertExists} from '../../base/logging'; 17*6dbdd20aSAndroid Build Coastguard Workerimport {PerfettoPlugin} from '../../public/plugin'; 18*6dbdd20aSAndroid Build Coastguard Workerimport {Trace} from '../../public/trace'; 19*6dbdd20aSAndroid Build Coastguard Workerimport {SqlModules} from './sql_modules'; 20*6dbdd20aSAndroid Build Coastguard Workerimport {SQL_MODULES_DOCS_SCHEMA, SqlModulesImpl} from './sql_modules_impl'; 21*6dbdd20aSAndroid Build Coastguard Workerimport {extensions} from '../../components/extensions'; 22*6dbdd20aSAndroid Build Coastguard Worker 23*6dbdd20aSAndroid Build Coastguard Workerexport default class implements PerfettoPlugin { 24*6dbdd20aSAndroid Build Coastguard Worker static readonly id = 'dev.perfetto.SqlModules'; 25*6dbdd20aSAndroid Build Coastguard Worker private sqlModules?: SqlModules; 26*6dbdd20aSAndroid Build Coastguard Worker 27*6dbdd20aSAndroid Build Coastguard Worker async onTraceLoad(ctx: Trace) { 28*6dbdd20aSAndroid Build Coastguard Worker const resp = await fetch(assetSrc('stdlib_docs.json')); 29*6dbdd20aSAndroid Build Coastguard Worker const json = await resp.json(); 30*6dbdd20aSAndroid Build Coastguard Worker const docs = SQL_MODULES_DOCS_SCHEMA.parse(json); 31*6dbdd20aSAndroid Build Coastguard Worker const sqlModules = new SqlModulesImpl(docs); 32*6dbdd20aSAndroid Build Coastguard Worker this.sqlModules = sqlModules; 33*6dbdd20aSAndroid Build Coastguard Worker 34*6dbdd20aSAndroid Build Coastguard Worker ctx.commands.registerCommand({ 35*6dbdd20aSAndroid Build Coastguard Worker id: 'perfetto.OpenSqlModulesTable', 36*6dbdd20aSAndroid Build Coastguard Worker name: 'Open table...', 37*6dbdd20aSAndroid Build Coastguard Worker callback: async () => { 38*6dbdd20aSAndroid Build Coastguard Worker const tables = sqlModules.listTables(); 39*6dbdd20aSAndroid Build Coastguard Worker const tableName = await ctx.omnibox.prompt('Choose a table...', tables); 40*6dbdd20aSAndroid Build Coastguard Worker if (tableName === undefined) { 41*6dbdd20aSAndroid Build Coastguard Worker return; 42*6dbdd20aSAndroid Build Coastguard Worker } 43*6dbdd20aSAndroid Build Coastguard Worker const module = sqlModules.getModuleForTable(tableName); 44*6dbdd20aSAndroid Build Coastguard Worker if (module === undefined) { 45*6dbdd20aSAndroid Build Coastguard Worker return; 46*6dbdd20aSAndroid Build Coastguard Worker } 47*6dbdd20aSAndroid Build Coastguard Worker const sqlTable = module.getSqlTableDescription(tableName); 48*6dbdd20aSAndroid Build Coastguard Worker sqlTable && 49*6dbdd20aSAndroid Build Coastguard Worker extensions.addSqlTableTab(ctx, { 50*6dbdd20aSAndroid Build Coastguard Worker table: sqlTable, 51*6dbdd20aSAndroid Build Coastguard Worker }); 52*6dbdd20aSAndroid Build Coastguard Worker }, 53*6dbdd20aSAndroid Build Coastguard Worker }); 54*6dbdd20aSAndroid Build Coastguard Worker } 55*6dbdd20aSAndroid Build Coastguard Worker 56*6dbdd20aSAndroid Build Coastguard Worker getSqlModules() { 57*6dbdd20aSAndroid Build Coastguard Worker return assertExists(this.sqlModules); 58*6dbdd20aSAndroid Build Coastguard Worker } 59*6dbdd20aSAndroid Build Coastguard Worker} 60