blob: 78b36d9301ea634e80ee5b936522ba6086d66d8a [file] [log] [blame]
// 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';
}