| // Copyright (C) 2023 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. |
| |
| |
| // Definition of the SQL table to be displayed in the SQL table widget, |
| // including the semantic definitions of the columns (e.g. timestamp |
| // column which requires special formatting). Also note that some of the |
| // columns require other columns for advanced display features (e.g. timestamp |
| // and duration taken together define "a time range", which can be used for |
| // additional filtering. |
| |
| export type DisplayConfig = |
| SliceIdDisplayConfig|Timestamp|Duration|ThreadDuration; |
| |
| // Common properties for all columns. |
| interface SqlTableColumnBase { |
| // Name of the column in the SQL table. |
| name: string; |
| // Display name of the column in the UI. |
| title?: string; |
| } |
| |
| export interface ArgSetIdColumn extends SqlTableColumnBase { |
| type: 'arg_set_id'; |
| } |
| |
| export interface RegularSqlTableColumn extends SqlTableColumnBase { |
| // Special rendering instructions for this column, including the list |
| // of additional columns required for the rendering. |
| display?: DisplayConfig; |
| // Whether the column should be hidden by default. |
| startsHidden?: boolean; |
| } |
| |
| export type SqlTableColumn = RegularSqlTableColumn|ArgSetIdColumn; |
| |
| export function startsHidden(c: SqlTableColumn): boolean { |
| if (isArgSetIdColumn(c)) return true; |
| return c.startsHidden ?? false; |
| } |
| |
| export function isArgSetIdColumn(c: SqlTableColumn): c is ArgSetIdColumn { |
| return (c as {type?: string}).type === 'arg_set_id'; |
| } |
| |
| export interface SqlTableDescription { |
| readonly imports?: string[]; |
| name: string; |
| displayName?: string; |
| columns: SqlTableColumn[]; |
| } |
| |
| export function tableDisplayName(table: SqlTableDescription): string { |
| return table.displayName ?? table.name; |
| } |
| |
| // Additional columns needed to display the given column. |
| export function dependendentColumns(display?: DisplayConfig): string[] { |
| switch (display?.type) { |
| case 'slice_id': |
| return [display.ts, display.dur, display.trackId]; |
| default: |
| return []; |
| } |
| } |
| |
| // Column displaying ids into the `slice` table. Requires the ts, dur and |
| // track_id columns to be able to display the value, including the |
| // "go-to-slice-on-click" functionality. |
| export interface SliceIdDisplayConfig { |
| type: 'slice_id'; |
| ts: string; |
| dur: string; |
| trackId: string; |
| } |
| |
| // Column displaying timestamps. |
| interface Timestamp { |
| type: 'timestamp'; |
| } |
| |
| // Column displaying durations. |
| export interface Duration { |
| type: 'duration'; |
| } |
| |
| // Column displaying thread durations. |
| export interface ThreadDuration { |
| type: 'thread_duration'; |
| } |