// Copyright 2024 The Lynx Authors. All rights reserved.
// Licensed under the Apache License Version 2.0 that can be found in the
// LICENSE file in the root directory of this source tree.
export interface PerformanceEntry {
    name: string;
    entryType: string;
}

export interface FrameworkRenderingTiming {
}

export interface PipelineEntry extends PerformanceEntry {
    identifier: string;
    pipelineStart: number;
    pipelineEnd: number;
    mtsRenderStart: number;
    mtsRenderEnd: number;
    resolveStart: number;
    resolveEnd: number;
    layoutStart: number;
    layoutEnd: number;
    paintingUiOperationExecuteStart: number;
    paintingUiOperationExecuteEnd: number;
    layoutUiOperationExecuteStart: number;
    layoutUiOperationExecuteEnd: number;
    paintEnd: number;
    frameworkRenderingTiming: FrameworkRenderingTiming[keyof FrameworkRenderingTiming];
}

export interface LoadBundleEntry extends PipelineEntry {
    loadBundleStart: number;
    loadBundleEnd: number;
    parseStart: number;
    parseEnd: number;
    loadBackgroundStart: number;
    loadBackgroundEnd: number;
}

export interface InitContainerEntry extends PerformanceEntry {
    openTime: number;
    containerInitStart: number;
    containerInitEnd: number;
    prepareTemplateStart: number;
    prepareTemplateEnd: number;
    extraTiming: Record<string, number>;
}

export interface InitLynxviewEntry extends PerformanceEntry {
    createLynxStart: number;
    createLynxEnd: number;
}

export interface InitBackgroundRuntimeEntry extends PerformanceEntry {
    loadCoreStart: number;
    loadCoreEnd: number;
}

export interface PerformanceMetric {
    name: string;
    duration: number;
    startTimestampName: string;
    startTimestamp: number;
    endTimestampName: string;
    endTimestamp: number;
}

export interface MetricFcpEntry extends PerformanceEntry {
    fcp: PerformanceMetric;
    lynxFcp: PerformanceMetric;
    totalFcp: PerformanceMetric;
}

export interface MetricTtiEntry extends PerformanceEntry {
    tti: PerformanceMetric;
    lynxTti: PerformanceMetric;
    totalTti: PerformanceMetric;
}

export interface MetricActualFmpEntry extends PerformanceEntry {
    actualFmp: PerformanceMetric;
    lynxActualFmp: PerformanceMetric;
    totalActualFmp: PerformanceMetric;
}
