current commit
260927.7 · perf_hooks: fix truncation of monitorEventLoopDelay() resolution
declare namespace InternalPerformanceBinding {
  interface HistogramBase {
    count(): number;
    countBigInt(): bigint;
    min(): number;
    minBigInt(): bigint;
    max(): number;
    maxBigInt(): bigint;
    mean(): number;
    exceeds(): number;
    exceedsBigInt(): bigint;
    stddev(): number;
    percentile(percentile: number): number;
    percentileBigInt(percentile: number): bigint;
    percentiles(percentiles: Map<number, number>): void;
    percentilesBigInt(percentiles: Map<number, bigint>): void;
    reset(): void;
    skewness(): number;
    kurtosis(): number;
    cdf(value: number): number;
    countAt(value: number): number;
    ksTest(other: HistogramBase): number;
    percentilesAt(
      percentiles: Map<number, number>,
      values: Float64Array,
    ): void;
    linearBuckets(stepSize: number, buckets: Map<number, number>): void;
    logBuckets(
      firstBucket: number,
      base: number,
      buckets: Map<number, number>,
    ): void;
    welchTest(
      other: HistogramBase,
      confidence: number,
    ): [number, number, number, number, number];
    mannWhitneyTest(other: HistogramBase): [number, number, number];
    cohensD(other: HistogramBase): number;
    cliffsD(other: HistogramBase): number;
    percentileCI(percentile: number, confidence: number): [number, number, number];
    ewmaMean(): number;
    ewmaStddev(): number;
    ewmaErrorRate(): number;
    snapshot(): Histogram;
    diff(other: HistogramBase): Histogram;
    resetCount(): number;
  }

  interface ELDHistogram extends HistogramBase {
    start(reset?: boolean): void;
    stop(): void;
    close(callback?: () => void): void;
    hasRef(): boolean;
    ref(): void;
    unref(): void;
    getAsyncId(): number;
    asyncReset(resource: object, executionAsyncId?: number): void;
    getAsyncContextFrameForDebuggingOnly(): unknown;
    getProviderType(): number;
  }

  interface Histogram extends HistogramBase {}

  class Histogram {
    constructor(
      lowest: number | bigint,
      highest: number | bigint,
      figures: number,
      halfLife?: number,
      threshold?: number,
    );
    record(value: number | bigint): void;
    recordDelta(): void;
    recordCorrected(
      value: number | bigint,
      expectedInterval: number | bigint,
    ): void;
    add(other: Histogram): number;
    subtract(other: Histogram): number;
  }

  class SlidingWindowHistogram {
    constructor(
      lowest: number | bigint,
      highest: number | bigint,
      figures: number,
      chunks: number,
      timeBased: boolean,
      rotateAt: bigint,
    );
    record(value: number | bigint): void;
    snapshot(): Histogram;
    reset(): void;
  }

  interface Constants {
    NODE_PERFORMANCE_GC_MAJOR: number;
    NODE_PERFORMANCE_GC_MINOR: number;
    NODE_PERFORMANCE_GC_MINOR_MARK_SWEEP: number;
    NODE_PERFORMANCE_GC_INCREMENTAL: number;
    NODE_PERFORMANCE_GC_WEAKCB: number;
    NODE_PERFORMANCE_GC_FLAGS_NO: number;
    NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED: number;
    NODE_PERFORMANCE_GC_FLAGS_FORCED: number;
    NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING: number;
    NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE: number;
    NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY: number;
    NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE: number;
    NODE_PERFORMANCE_ENTRY_TYPE_GC: number;
    NODE_PERFORMANCE_ENTRY_TYPE_HTTP: number;
    NODE_PERFORMANCE_ENTRY_TYPE_HTTP2: number;
    NODE_PERFORMANCE_ENTRY_TYPE_NET: number;
    NODE_PERFORMANCE_ENTRY_TYPE_DNS: number;
    NODE_PERFORMANCE_ENTRY_TYPE_QUIC: number;
    NODE_PERFORMANCE_MILESTONE_TIME_ORIGIN_TIMESTAMP: number;
    NODE_PERFORMANCE_MILESTONE_TIME_ORIGIN: number;
    NODE_PERFORMANCE_MILESTONE_ENVIRONMENT: number;
    NODE_PERFORMANCE_MILESTONE_NODE_START: number;
    NODE_PERFORMANCE_MILESTONE_V8_START: number;
    NODE_PERFORMANCE_MILESTONE_LOOP_START: number;
    NODE_PERFORMANCE_MILESTONE_LOOP_EXIT: number;
    NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE: number;
  }
}

type PerformanceObserverCallback =
  | ((name: string,
      type: string,
      startTime: number,
      duration: number,
      details: unknown) => void)
  | ((entry: unknown) => void);

export interface PerformanceBinding {
  Histogram: typeof InternalPerformanceBinding.Histogram;
  SlidingWindowHistogram:
    typeof InternalPerformanceBinding.SlidingWindowHistogram;
  constants: InternalPerformanceBinding.Constants;
  observerCounts: Uint32Array;
  milestones: Float64Array;
  setupObservers(callback: PerformanceObserverCallback): void;
  updateGarbageCollectionTracking(): void;
  notify(type: string, entry: unknown): void;
  loopIdleTime(): number;
  createELDHistogram(
    interval: number,
    samplePerIteration: boolean,
    lowest: bigint,
    highest: bigint,
    figures: number,
  ): InternalPerformanceBinding.ELDHistogram;
  markBootstrapComplete(): void;
  uvMetricsInfo(): void;
  uvMetricsBuffer: Float64Array;
  uvMetricsBigIntBuffer: BigUint64Array;
  now(): number;
}