blob: 9bb720159974254cbaefa6b89c745359a3c2a234 [file] [log] [blame]
// Copyright (C) 2024 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} from '../../../public/trace';
/**
* Represents data for a Full trace metric
* Eg.- perfetto_ft_launcher-missed_sf_frames-mean
* ft here stands for full trace
*/
export interface FullTraceMetricData {
/** Process name (e.g., com.google.android.apps.nexuslauncher) */
process: string;
/** Jank type (e.g., app or sf missed frame) */
jankType: JankType;
}
/**
* Represents data for a CUJ scoped metric
* Eg.- perfetto_cuj_launcher-RECENTS_SCROLLING-counter_metrics-missed_sf_frames-mean
*/
export interface CujScopedMetricData {
/** Process name (e.g., com.google.android.apps.nexuslauncher) */
process: string;
/** Cuj interaction name (e.g., RECENTS_SCROLLING) */
cujName: string;
/** Jank type (e.g., app or sf missed frame) */
jankType: JankType;
}
/**
* Represents data for a Blocking Call metric
* Eg.- perfetto_android_blocking_call-cuj-name-com.google.android.apps.nexuslauncher-name-TASKBAR_EXPAND-blocking_calls-name-animation-total_dur_ms-mean
*/
export interface BlockingCallMetricData {
/** Process name (e.g., com.google.android.apps.nexuslauncher) */
process: string;
/** Cuj interaction name (e.g., TASKBAR_EXPAND) */
cujName: string;
/** Blocking Call name (e.g., animation) */
blockingCallName: string;
/** aggregation type (e.g., total_dur_ms-mean) */
aggregation: string;
}
/** Represents a cuj to be pinned. */
export interface CujMetricData {
cujName: string;
}
// Common MetricData for all handler. If new needed then add here.
export type MetricData =
| FullTraceMetricData
| CujScopedMetricData
| BlockingCallMetricData
| CujMetricData;
// Common JankType for cujScoped and fullTrace metrics
export type JankType = 'sf_frames' | 'app_frames' | 'frames';
/**
* Common interface for debug track handlers
*/
export interface MetricHandler {
/**
* Match metric key & return parsed data if successful.
*
* @param {string} metricKey The metric key to match.
* @returns {MetricData | undefined} Parsed data or undefined if no match.
*/
match(metricKey: string): MetricData | undefined;
/**
* Add debug track for parsed metric data.
*
* @param {MetricData} metricData The parsed metric data.
* @param {Trace} ctx context for trace methods and properties
* @returns {void}
*/
addMetricTrack(metricData: MetricData, ctx: Trace): void;
}
// Pair for matching metric and its handler
export type MetricHandlerMatch = {
metricData: MetricData;
metricHandler: MetricHandler;
};
/**
* Expand process name for specific system processes
*
* @param {string} metricProcessName Name of the processes
* @returns {string} Either the same or expanded name for abbreviated process names
*/
export function expandProcessName(metricProcessName: string): string {
if (metricProcessName.includes('systemui')) {
return 'com.android.systemui';
} else if (metricProcessName.includes('launcher')) {
return 'com.google.android.apps.nexuslauncher';
} else if (metricProcessName.includes('surfaceflinger')) {
return '/system/bin/surfaceflinger';
} else {
return metricProcessName;
}
}