import '../../../../assert/js/assert.js';
import '../../../../globals.js';
/**
 * Supports "console logging" from shaders. See log.wgsl.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import { ConcreteType } from '../../imports.js';
import Vector3 from '../../../../dot/js/Vector3.js';
import StrictOmit from '../../../../phet-core/js/types/StrictOmit.js';
export type ConsoleLogInfo<T = unknown> = {
    id: number;
    logName: string;
    shaderName: string;
    hasAdditionalIndex: boolean;
    type: ConcreteType<T> | null;
    dataCount: number | null;
    lineToLog: (line: ConsoleLoggedLine) => unknown;
};
export default class ConsoleLogger {
    private static nextGlobalId;
    private static readonly identifierMap;
    static register<T>(info: StrictOmit<ConsoleLogInfo<T>, 'id'>): number;
    static analyze(arrayBuffer: ArrayBuffer): ConsoleLoggedShader[];
}
export declare class ConsoleLoggedEntry<T = unknown> {
    readonly info: ConsoleLogInfo;
    readonly data: T;
    readonly additionalIndex: number | null;
    readonly uniqueId: string;
    constructor(info: ConsoleLogInfo, data: T, additionalIndex: number | null, otherEntries: ConsoleLoggedEntry[]);
}
export declare class ConsoleLoggedThread {
    readonly workgroupIndex: Vector3;
    readonly localIndex: Vector3;
    readonly entries: ConsoleLoggedEntry[];
    constructor(workgroupIndex: Vector3, localIndex: Vector3);
    add(info: ConsoleLogInfo, data: unknown, additionalIndex: number | null): void;
    compare(other: ConsoleLoggedThread): number;
}
export declare class ConsoleLoggedLine<T = unknown> {
    readonly info: ConsoleLogInfo;
    readonly additionalIndex: number | null;
    readonly dataArray: T[];
    readonly threads: ConsoleLoggedThread[];
    constructor(info: ConsoleLogInfo, additionalIndex: number | null, dataArray: T[], threads: ConsoleLoggedThread[]);
    static toLogNull(line: ConsoleLoggedLine): unknown;
    static toLogRaw(line: ConsoleLoggedLine): unknown;
    static toLogExisting(line: ConsoleLoggedLine): unknown;
    static toLogExistingFlat(line: ConsoleLoggedLine): unknown;
}
export declare class ConsoleLoggedShader {
    shaderName: string | null;
    readonly threads: ConsoleLoggedThread[];
    readonly threadMap: Record<string, ConsoleLoggedThread>;
    readonly logLines: ConsoleLoggedLine[];
    add(info: ConsoleLogInfo, workgroupIndex: Vector3, localIndex: Vector3, data: unknown, additionalIndex: number | null): void;
    isEmpty(): boolean;
    finalize(): void;
    private sortThreads;
}
//# sourceMappingURL=ConsoleLogger.d.ts.map