/** * Debug performance instrumentation (Phase 3) * * Collection is disabled by default. Hook functions are called from * production hot paths even when disabled. Disabled-path runtime and * bundle overhead are tracked separately and must not be assumed negligible. * * See issue #119 for validation status. */ export interface CellCacheMetrics { createCellCalls: number; charCellWidthCallsFromCreateCell: number; newCellCount: number; cellCacheHitWidth1: number; cellCacheHitWidth2: number; cellCacheMissWidth1: number; cellCacheMissWidth2: number; cellCacheClearWidth1: number; cellCacheClearWidth2: number; blankCellCacheHit: number; blankCellCacheMiss: number; continuationCellCacheHit: number; continuationCellCacheMiss: number; maxCacheSizeWidth1: number; maxCacheSizeWidth2: number; registeredBucketCountWidth1: number; registeredBucketCountWidth2: number; registeredBucketSizeP50Width1: number; registeredBucketSizeP95Width1: number; registeredBucketSizeMaxWidth1: number; registeredBucketSizeP50Width2: number; registeredBucketSizeP95Width2: number; registeredBucketSizeMaxWidth2: number; estimatedRegisteredBucketCells: number; } export interface TextCacheMetrics { textCellWidthCalls: number; textWidthCacheHit: number; textWidthCacheMiss: number; textWidthCacheSet: number; textWidthCacheEvict: number; renderPassTextWidthCacheHit: number; renderPassTextWidthCacheMiss: number; wrapByCellsCalls: number; wrapCacheHit: number; wrapCacheMiss: number; wrapCacheSet: number; wrapCacheClear: number; wrapWidthBucketMapClear: number; maxTextLength: number; totalTextLength: number; asciiFastPathCount: number; nonAsciiOrNoFastPathCount: number; } export interface GraphemeMetrics { graphemeSegmentationRequiredCalls: number; intlSegmenterUsed: number; fallbackSegmenterUsed: number; segmentationRequiredInputCount: number; } export interface PerformanceMetrics { cell: CellCacheMetrics; text: TextCacheMetrics; grapheme: GraphemeMetrics; heapUsedBefore?: number; heapUsedAfter?: number; gcCount?: number; } /** * Enable instrumentation collection */ export declare function enableInstrumentation(): void; /** * Disable instrumentation collection */ export declare function disableInstrumentation(): void; /** * Check if instrumentation is enabled */ export declare function isInstrumentationEnabled(): boolean; /** * Reset all metrics to zero */ export declare function resetMetrics(): void; /** * Get current metrics snapshot */ export declare function getMetrics(): PerformanceMetrics; /** * Get heap used bytes (Node.js or Chrome) */ export declare function getHeapUsed(): number | null; /** * Get metrics with heap information * * Note: heapUsedBefore/After measures GC impact, not workload memory. * To measure workload memory, call getHeapUsed() before/after your workload. */ export declare function getMetricsWithHeap(): PerformanceMetrics; export declare const cellInstr: { recordCreateCellCall(): void; recordCharCellWidthCall(): void; recordNewCell(): void; recordCacheHit(width: 1 | 2): void; recordCacheMiss(width: 1 | 2): void; recordCacheClear(width: 1 | 2): void; recordBlankCacheHit(): void; recordBlankCacheMiss(): void; recordContinuationCacheHit(): void; recordContinuationCacheMiss(): void; updateMaxCacheSize(width: 1 | 2, size: number): void; registerCacheBucket(width: 1 | 2, bucket: Map): void; updateBucketCounts(width1Count: number, width2Count: number): void; updateEstimatedRetainedCells(count: number): void; }; export declare const textInstr: { recordTextCellWidthCall(textLength: number, isAscii: boolean): void; recordTextWidthCacheHit(): void; recordTextWidthCacheMiss(): void; recordTextWidthCacheSet(): void; recordTextWidthCacheEvict(): void; recordRenderPassCacheHit(): void; recordRenderPassCacheMiss(): void; recordWrapByCellsCall(): void; recordWrapCacheHit(): void; recordWrapCacheMiss(): void; recordWrapCacheSet(): void; recordWrapCacheClear(): void; recordWrapWidthBucketMapClear(): void; }; export declare const graphemeInstr: { recordSegmentedGraphemesCall(): void; recordIntlSegmenterUsed(): void; recordFallbackSegmenterUsed(): void; recordSegmentationRequiredInput(): void; };