import { EventsPhase } from './Phases';
export interface SharedEventProperties {
    /**
     * name of the event
     */
    name?: string;
    /**
     * event category
     */
    cat?: string;
    /**
     * tracing clock timestamp
     */
    ts?: number;
    /**
     * process ID
     */
    pid?: number;
    /**
     * thread ID
     */
    tid?: number;
    /**
     * event type (phase)
     */
    ph: EventsPhase;
    /**
     * id for a stackFrame object
     */
    sf?: number;
    /**
     * thread clock timestamp
     */
    tts?: number;
    /**
     * a fixed color name
     */
    cname?: string;
    /**
     * event arguments
     */
    args?: {
        [key in string]: any;
    };
}
interface DurationEventBegin extends SharedEventProperties {
    ph: EventsPhase.DURATION_EVENTS_BEGIN;
}
interface DurationEventEnd extends SharedEventProperties {
    ph: EventsPhase.DURATION_EVENTS_END;
}
export declare type DurationEvent = DurationEventBegin | DurationEventEnd;
export interface CompleteEvent extends SharedEventProperties {
    ph: EventsPhase.COMPLETE_EVENTS;
    dur: number;
}
export interface MetadataEvent extends SharedEventProperties {
    ph: EventsPhase.METADATA_EVENTS;
}
export interface SampleEvent extends SharedEventProperties {
    ph: EventsPhase.SAMPLE_EVENTS;
}
interface ObjectEventCreated extends SharedEventProperties {
    ph: EventsPhase.OBJECT_EVENTS_CREATED;
    scope?: string;
}
interface ObjectEventSnapshot extends SharedEventProperties {
    ph: EventsPhase.OBJECT_EVENTS_SNAPSHOT;
    scope?: string;
}
interface ObjectEventDestroyed extends SharedEventProperties {
    ph: EventsPhase.OBJECT_EVENTS_DESTROYED;
    scope?: string;
}
export declare type ObjectEvent = ObjectEventCreated | ObjectEventSnapshot | ObjectEventDestroyed;
export interface ClockSyncEvent extends SharedEventProperties {
    ph: EventsPhase.CLOCK_SYNC_EVENTS;
    args: {
        sync_id: string;
        issue_ts?: number;
    };
}
interface ContextEventEnter extends SharedEventProperties {
    ph: EventsPhase.CONTEXT_EVENTS_ENTER;
}
interface ContextEventLeave extends SharedEventProperties {
    ph: EventsPhase.CONTEXT_EVENTS_LEAVE;
}
export declare type ContextEvent = ContextEventEnter | ContextEventLeave;
interface AsyncEventStart extends SharedEventProperties {
    ph: EventsPhase.ASYNC_EVENTS_NESTABLE_START;
    id: number;
    scope?: string;
}
interface AsyncEventInstant extends SharedEventProperties {
    ph: EventsPhase.ASYNC_EVENTS_NESTABLE_INSTANT;
    id: number;
    scope?: string;
}
interface AsyncEventEnd extends SharedEventProperties {
    ph: EventsPhase.ASYNC_EVENTS_NESTABLE_END;
    id: number;
    scope?: string;
}
export declare type AsyncEvent = AsyncEventStart | AsyncEventInstant | AsyncEventEnd;
export interface InstantEvent extends SharedEventProperties {
    ph: EventsPhase.INSTANT_EVENTS;
    s: string;
}
export interface CounterEvent extends SharedEventProperties {
    ph: EventsPhase.COUNTER_EVENTS;
}
interface FlowEventStart extends SharedEventProperties {
    ph: EventsPhase.FLOW_EVENTS_START;
}
interface FlowEventStep extends SharedEventProperties {
    ph: EventsPhase.FLOW_EVENTS_STEP;
}
interface FlowEventEnd extends SharedEventProperties {
    ph: EventsPhase.FLOW_EVENTS_END;
}
export declare type FlowEvent = FlowEventStart | FlowEventStep | FlowEventEnd;
interface MemoryDumpGlobal extends SharedEventProperties {
    ph: EventsPhase.MEMORY_DUMP_EVENTS_GLOBAL;
    id: string;
}
interface MemoryDumpProcess extends SharedEventProperties {
    ph: EventsPhase.MEMORY_DUMP_EVENTS_PROCESS;
    id: string;
}
export declare type MemoryDumpEvent = MemoryDumpGlobal | MemoryDumpProcess;
export interface MarkEvent extends SharedEventProperties {
    ph: EventsPhase.MARK_EVENTS;
}
export interface LinkedIDEvent extends SharedEventProperties {
    ph: EventsPhase.LINKED_ID_EVENTS;
    id: number;
    args: {
        linked_id: number;
    };
}
export declare type Event = DurationEvent | CompleteEvent | MetadataEvent | SampleEvent | ObjectEvent | ClockSyncEvent | ContextEvent | AsyncEvent | InstantEvent | CounterEvent | FlowEvent | MemoryDumpEvent | MarkEvent | LinkedIDEvent;
export {};
