blob: bafe4e690308364bb3d1d30f736fa0aad69bcf4e [file]
// 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.
// Analysis provider registry for the GPU Compute plugin.
//
// Defines the interfaces and registry functions that allow an analysis
// provider plugin to inject analysis UI into the parent plugin. When no
// analysis provider is registered, the parent plugin gracefully omits
// analysis features.
//
// This follows the same pattern as {@link ./section} and
// {@link ./terminology}.
import type m from 'mithril';
import type {Engine} from '../../trace_processor/engine';
import type {MetricSection, KernelMetricData} from './details';
// Result of a performance analysis.
export interface PerformanceAnalysisResult {
// The section that was analyzed
sectionName: string;
// The generated analysis
analysis: string;
// Whether the analysis completed successfully
success: boolean;
// Error message if analysis failed
error?: string;
// The name of the provider used to generate the analysis
providerName?: string;
}
// Interface for analysis cache operations passed from parent component.
export interface AnalysisCache {
getKernelAnalysis(sliceId: number): PerformanceAnalysisResult | undefined;
setKernelAnalysis(sliceId: number, result: PerformanceAnalysisResult): void;
getSectionAnalysis(
sliceId: number,
sectionName: string,
): PerformanceAnalysisResult | undefined;
setSectionAnalysis(
sliceId: number,
sectionName: string,
result: PerformanceAnalysisResult,
): void;
}
// Interface implemented by an analysis provider plugin to provide
// analysis UI to the parent GPU Compute plugin.
export interface AnalysisProvider {
// Renders the full Analysis tab body.
renderAnalysisTab(attrs: {
engine: Engine;
sliceId: number;
analysisCache: AnalysisCache;
}): m.Children;
// Renders a per-section inline analysis button.
renderSectionAnalysis(attrs: {
section: MetricSection;
kernelData: KernelMetricData;
sliceId: number;
analysisCache: AnalysisCache;
}): m.Children;
}
// Analysis provider holder — set via the plugin's public method.
export class AnalysisProviderHolder {
private provider: AnalysisProvider | undefined;
register(provider: AnalysisProvider): void {
this.provider = provider;
}
get(): AnalysisProvider | undefined {
return this.provider;
}
isAvailable(): boolean {
return this.provider !== undefined;
}
}