blob: 469f6b9affaa20b37633cbbd9b998d06454d3412 [file] [log] [blame]
/*
* Copyright (C) 2022 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.
*/
import {TRACE_INFO} from 'trace/trace_info';
import {TraceType} from 'trace/trace_type';
export interface TraceConfiguration {
name: string;
enabled: boolean;
config: ConfigurationOptions | undefined;
available: boolean;
types: TraceType[];
}
export interface TraceConfigurationMap {
[key: string]: TraceConfiguration;
}
export interface ConfigurationOptions {
enableConfigs: EnableConfiguration[];
selectionConfigs: SelectionConfiguration[];
}
export interface EnableConfiguration {
name: string;
key: string;
enabled: boolean;
}
export interface SelectionConfiguration {
key: string;
name: string;
options: string[];
value: string | string[];
desc?: string;
optional?: boolean;
wideField?: boolean;
}
export interface ConfigMap {
[key: string]: string[] | string;
}
const wmTraceSelectionConfigs: SelectionConfiguration[] = [
{
key: 'wmbuffersize',
name: 'buffer size (KB)',
options: ['4000', '8000', '16000', '32000'],
value: '32000',
},
{
key: 'tracingtype',
name: 'tracing type',
options: ['frame', 'transaction'],
value: 'frame',
},
{
key: 'tracinglevel',
name: 'tracing level',
options: ['verbose', 'debug', 'critical'],
value: 'verbose',
},
];
const sfTraceEnableConfigs: EnableConfiguration[] = [
{
name: 'input',
key: 'input',
enabled: true,
},
{
name: 'composition',
key: 'composition',
enabled: true,
},
{
name: 'metadata',
key: 'metadata',
enabled: false,
},
{
name: 'hwc',
key: 'hwc',
enabled: false,
},
{
name: 'trace buffers',
key: 'tracebuffers',
enabled: false,
},
{
name: 'virtual displays',
key: 'virtualdisplays',
enabled: false,
},
];
const sfTraceSelectionConfigs: SelectionConfiguration[] = [
{
key: 'sfbuffersize',
name: 'buffer size (KB)',
options: ['4000', '8000', '16000', '32000'],
value: '32000',
},
];
const screenshotConfigs: SelectionConfiguration[] = [
{
key: 'displays',
name: 'displays',
options: [],
value: [],
desc: 'Leave empty to capture active display',
wideField: true,
},
];
export function makeScreenRecordingConfigs(
options: string[],
initialValue: string | string[],
): SelectionConfiguration[] {
return [
{
key: 'displays',
name: 'displays',
options,
value: initialValue,
optional: true,
desc: 'Leave empty to capture active display',
wideField: true,
},
];
}
const traceDefaultConfig: TraceConfigurationMap = {
layers_trace: {
name: TRACE_INFO[TraceType.SURFACE_FLINGER].name,
enabled: true,
config: {
enableConfigs: sfTraceEnableConfigs,
selectionConfigs: sfTraceSelectionConfigs,
},
available: true,
types: [TraceType.SURFACE_FLINGER],
},
window_trace: {
name: TRACE_INFO[TraceType.WINDOW_MANAGER].name,
enabled: true,
config: {
enableConfigs: [],
selectionConfigs: wmTraceSelectionConfigs,
},
available: true,
types: [TraceType.WINDOW_MANAGER],
},
screen_recording: {
name: TRACE_INFO[TraceType.SCREEN_RECORDING].name,
enabled: true,
config: {
enableConfigs: [],
selectionConfigs: makeScreenRecordingConfigs([], ''),
},
available: true,
types: [TraceType.SCREEN_RECORDING],
},
ime: {
name: 'IME',
enabled: true,
config: undefined,
available: true,
types: [
TraceType.INPUT_METHOD_CLIENTS,
TraceType.INPUT_METHOD_SERVICE,
TraceType.INPUT_METHOD_MANAGER_SERVICE,
],
},
transactions: {
name: TRACE_INFO[TraceType.TRANSACTIONS].name,
enabled: true,
config: undefined,
available: true,
types: [TraceType.TRANSACTIONS, TraceType.TRANSACTIONS_LEGACY],
},
proto_log: {
name: TRACE_INFO[TraceType.PROTO_LOG].name,
enabled: false,
config: undefined,
available: true,
types: [TraceType.PROTO_LOG],
},
wayland_trace: {
name: TRACE_INFO[TraceType.WAYLAND].name,
enabled: false,
config: undefined,
available: false,
types: [TraceType.WAYLAND, TraceType.WAYLAND_DUMP],
},
eventlog: {
name: TRACE_INFO[TraceType.EVENT_LOG].name,
enabled: false,
config: undefined,
available: true,
types: [TraceType.EVENT_LOG, TraceType.CUJS],
},
transition_traces: {
name: TRACE_INFO[TraceType.SHELL_TRANSITION].name,
enabled: false,
config: undefined,
available: true,
types: [
TraceType.SHELL_TRANSITION,
TraceType.WM_TRANSITION,
TraceType.TRANSITION,
],
},
view_capture_traces: {
name: TRACE_INFO[TraceType.VIEW_CAPTURE].name,
enabled: false,
config: undefined,
available: true,
types: [TraceType.VIEW_CAPTURE],
},
input: {
name: 'Input',
enabled: false,
config: undefined,
available: true,
types: [
TraceType.INPUT_KEY_EVENT,
TraceType.INPUT_MOTION_EVENT,
TraceType.INPUT_EVENT_MERGED,
],
},
};
export function makeDefaultTraceConfigMap(): TraceConfigurationMap {
return structuredClone({
window_trace: traceDefaultConfig['window_trace'],
layers_trace: traceDefaultConfig['layers_trace'],
transactions: traceDefaultConfig['transactions'],
proto_log: traceDefaultConfig['proto_log'],
screen_recording: traceDefaultConfig['screen_recording'],
ime: traceDefaultConfig['ime'],
eventlog: traceDefaultConfig['eventlog'],
transition_traces: traceDefaultConfig['transition_traces'],
view_capture_trace: traceDefaultConfig['view_capture_traces'],
input: traceDefaultConfig['input'],
wayland_trace: traceDefaultConfig['wayland_trace'],
});
}
export function makeDefaultDumpConfigMap(): TraceConfigurationMap {
return structuredClone({
window_dump: {
name: 'Window Manager',
enabled: true,
config: undefined,
available: true,
types: [TraceType.WINDOW_MANAGER],
},
layers_dump: {
name: 'Surface Flinger',
enabled: true,
config: undefined,
available: true,
types: [TraceType.SURFACE_FLINGER],
},
screenshot: {
name: 'Screenshot',
enabled: true,
config: {
enableConfigs: [],
selectionConfigs: screenshotConfigs,
},
available: true,
types: [TraceType.SCREENSHOT],
},
});
}