| // Copyright (C) 2026 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. | |
| export interface StackSampleSourceSchema { | |
| readonly source: string; | |
| readonly title: string; | |
| // Also defines the automatic-selection preference (lowest wins). | |
| readonly order: number; | |
| } | |
| export const STACK_SAMPLE_SOURCE_SCHEMAS: ReadonlyArray<StackSampleSourceSchema> = | |
| [ | |
| {source: 'linux.perf', title: 'Perf', order: 0}, | |
| {source: 'instruments', title: 'Instruments', order: 10}, | |
| {source: 'chrome', title: 'Chrome CPU Profile', order: 20}, | |
| {source: 'legacy_v8', title: 'Legacy V8 CPU Profile', order: 20}, | |
| {source: 'gecko', title: 'Gecko CPU Profile', order: 20}, | |
| {source: 'simpleperf', title: 'Simpleperf CPU Profile', order: 20}, | |
| {source: 'perf_text', title: 'Perf Text CPU Profile', order: 20}, | |
| ]; | |
| const SCHEMA_BY_SOURCE = new Map( | |
| STACK_SAMPLE_SOURCE_SCHEMAS.map((schema) => [schema.source, schema]), | |
| ); | |
| export function getStackSampleSourceSchema( | |
| source: string, | |
| ): StackSampleSourceSchema { | |
| return ( | |
| SCHEMA_BY_SOURCE.get(source) ?? { | |
| source, | |
| title: humanizeSource(source), | |
| order: 100, | |
| } | |
| ); | |
| } | |
| function humanizeSource(source: string): string { | |
| const name = source | |
| .split(/[._-]+/) | |
| .filter((part) => part.length > 0) | |
| .map((part) => part[0]!.toUpperCase() + part.slice(1)) | |
| .join(' '); | |
| return name || 'Unknown'; | |
| } |