/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
import type { IV8Profile, IV8ProfileNode } from "./profiling.mjs";
export interface IProfileModel {
    nodes: ReadonlyArray<IComputedNode>;
    locations: ReadonlyArray<ILocation>;
    samples: ReadonlyArray<number>;
    timeDeltas: ReadonlyArray<number>;
    rootPath?: string;
    duration: number;
}
export interface IComputedNode {
    id: number;
    selfTime: number;
    aggregateTime: number;
    children: number[];
    parent?: number;
    locationId: number;
}
export interface ISourceLocation {
    lineNumber: number;
    columnNumber: number;
    relativePath?: string;
}
export interface CdpCallFrame {
    functionName: string;
    scriptId: string;
    url: string;
    lineNumber: number;
    columnNumber: number;
}
export interface CdpPositionTickInfo {
    line: number;
    ticks: number;
}
export interface INode {
    id: number;
    callFrame: CdpCallFrame;
    src?: ISourceLocation;
}
export interface ILocation extends INode {
    selfTime: number;
    aggregateTime: number;
    ticks: number;
}
export interface IAnnotationLocation {
    callFrame: CdpCallFrame;
    locations: ISourceLocation[];
}
export interface IProfileNode extends IV8ProfileNode {
    locationId?: number;
    positionTicks?: (CdpPositionTickInfo & {
        startLocationId?: number;
        endLocationId?: number;
    })[];
}
export interface ICpuProfileRaw extends IV8Profile {
    nodes: IProfileNode[];
}
/**
 * Computes the model for the given profile.
 */
export declare const buildModel: (profile: ICpuProfileRaw) => IProfileModel;
export declare class BottomUpNode {
    readonly location: ILocation;
    readonly parent?: BottomUpNode | undefined;
    static root(): BottomUpNode;
    children: {
        [id: number]: BottomUpNode;
    };
    aggregateTime: number;
    selfTime: number;
    ticks: number;
    childrenSize: number;
    get id(): number;
    get callFrame(): CdpCallFrame;
    get src(): ISourceLocation | undefined;
    constructor(location: ILocation, parent?: BottomUpNode | undefined);
    addNode(node: IComputedNode): void;
}
export declare const processNode: (aggregate: BottomUpNode, node: IComputedNode, model: IProfileModel, initialNode?: IComputedNode) => void;
export interface BottomUpSample {
    selfTime: number;
    totalTime: number;
    location: string;
    url: string;
    caller: {
        percentage: number;
        location: string;
    }[];
    percentage: number;
    isSpecial: boolean;
}
