From 3a8be72c4c5c596c544884a013adb91d1a16ece2 Mon Sep 17 00:00:00 2001 From: sjungwon03 Date: Thu, 27 Aug 2026 12:26:33 +0900 Subject: [PATCH] typings: add types for performance binding Signed-off-by: sjungwon03 Assisted-by: Codex --- typings/globals.d.ts | 2 + typings/internalBinding/performance.d.ts | 134 +++++++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 typings/internalBinding/performance.d.ts diff --git a/typings/globals.d.ts b/typings/globals.d.ts index 66e27bfe9ab2..bcb33dce4f37 100644 --- a/typings/globals.d.ts +++ b/typings/globals.d.ts @@ -23,6 +23,7 @@ import { MessagingBinding } from './internalBinding/messaging'; import { ModulesBinding } from './internalBinding/modules'; import { OptionsBinding } from './internalBinding/options'; import { OSBinding } from './internalBinding/os'; +import { PerformanceBinding } from './internalBinding/performance'; import { PermissionBinding } from './internalBinding/permission'; import { ProcessBinding } from './internalBinding/process'; import { ProcessWrapBinding } from './internalBinding/process_wrap'; @@ -68,6 +69,7 @@ interface InternalBindingMap { modules: ModulesBinding; options: OptionsBinding; os: OSBinding; + performance: PerformanceBinding; permission: PermissionBinding; process: ProcessBinding; process_wrap: ProcessWrapBinding; diff --git a/typings/internalBinding/performance.d.ts b/typings/internalBinding/performance.d.ts new file mode 100644 index 000000000000..fa9a3810fc7a --- /dev/null +++ b/typings/internalBinding/performance.d.ts @@ -0,0 +1,134 @@ +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): void; + percentilesBigInt(percentiles: Map): void; + reset(): void; + skewness(): number; + kurtosis(): number; + cdf(value: number): number; + countAt(value: number): number; + ksTest(other: HistogramBase): number; + percentilesAt( + percentiles: Map, + values: Float64Array, + ): void; + linearBuckets(stepSize: number, buckets: Map): void; + logBuckets( + firstBucket: number, + base: number, + buckets: Map, + ): 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; + } + + 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; + } + + 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; + constants: InternalPerformanceBinding.Constants; + observerCounts: Uint32Array; + milestones: Float64Array; + setupObservers(callback: PerformanceObserverCallback): void; + installGarbageCollectionTracking(): void; + removeGarbageCollectionTracking(): void; + notify(type: string, entry: unknown): void; + loopIdleTime(): number; + createELDHistogram( + interval: number, + samplePerIteration: boolean, + ): InternalPerformanceBinding.ELDHistogram; + markBootstrapComplete(): void; + uvMetricsInfo(): [number, number, number]; + now(): number; +}