/// <reference types="node" />
/**
 * trace-event - A library to create a trace of your node app per
 * Google's Trace Event format:
 * // JSSTYLED
 *      https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU
 */
import { Readable as ReadableStream } from "stream";
export interface Event {
    ts: number;
    pid: number;
    tid: number;
    /** event phase */
    ph?: string;
    [otherData: string]: any;
}
export interface Fields {
    cat?: any;
    args?: any;
    [filedName: string]: any;
}
export interface TracerOptions {
    parent?: Tracer | null;
    fields?: Fields | null;
    objectMode?: boolean | null;
    noStream?: boolean;
}
export declare class Tracer extends ReadableStream {
    private _objectMode;
    /** Node Stream internal APIs */
    private _push;
    private firstPush?;
    private noStream;
    private events;
    private parent;
    private fields;
    constructor(opts?: TracerOptions);
    /**
     * If in no streamMode in order to flush out the trace
     * you need to call flush.
     */
    flush(): void;
    _read(_: number): void;
    private _pushString(ev);
    private _flush();
    child(fields: Fields): Tracer;
    begin(fields: Fields): void;
    end(fields: Fields): void;
    completeEvent(fields: Fields): void;
    instantEvent(fields: Fields): void;
    mkEventFunc(ph: string): (fields: Fields) => void;
}
