blob: 42a89b62278f77b38603442f5ce7b585a885b22a [file] [edit]
// 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 enum ProfileType {
// malloc hook
NATIVE_HEAP_PROFILE,
// art allocations profiler
JAVA_HEAP_SAMPLES,
// heap dump ART plugin
JAVA_HEAP_GRAPH,
// Catch-all renderer for custom API implementations
GENERIC_HEAP_PROFILE,
// OOME Callstack
OOME_CALLSTACK,
}
export interface ProfileDescriptor {
type: ProfileType;
label: string;
// Not present for java heap graphs
heapName?: string;
}
export function isProfileDescriptor(type: string): boolean {
return (
type === 'java_heap_graph' ||
type === 'oome_callstack' ||
type.startsWith('heap_profile:')
);
}
export function profileDescriptor(type: string): ProfileDescriptor {
if (type === 'java_heap_graph') {
return {
type: ProfileType.JAVA_HEAP_GRAPH,
label: 'ART heap dump',
};
}
if (type === 'oome_callstack') {
return {
type: ProfileType.OOME_CALLSTACK,
label: 'OOME Callstack',
};
}
// libc.malloc heap_name introduced in aosp/1428871 (Sep 2020)
if (type === 'heap_profile:libc.malloc') {
return {
type: ProfileType.NATIVE_HEAP_PROFILE,
label: 'Native heap profile',
heapName: 'libc.malloc',
};
}
if (type === 'heap_profile:com.android.art') {
return {
type: ProfileType.JAVA_HEAP_SAMPLES,
label: 'ART allocation profile',
heapName: 'com.android.art',
};
}
if (type.startsWith('heap_profile:')) {
const heapName = type.split(':')[1];
return {
type: ProfileType.GENERIC_HEAP_PROFILE,
label: `Profile: ${heapName}`,
heapName: heapName,
};
}
throw new Error(`Unknown type ${type}`);
}