From 56d4d6b2b0fbc32ae57e9587e3a1f439d20d4b5d Mon Sep 17 00:00:00 2001 From: Jinwoo-H Date: Fri, 3 Jul 2026 16:30:51 -0400 Subject: [PATCH] Findings + tests: batch windows were the DSR-load gap (19->8.0ms dev); timing tests updated to 2ms windows Co-authored-by: Orca --- notes/terminal-performance-initiative.md | 24 ++++ .../daemon/daemon-stream-data-batcher.test.ts | 10 +- src/main/ipc/pty.test.ts | 92 +++++++------- ...dev-batch2ms-2026-07-03T20-29-12-240Z.json | 116 ++++++++++++++++++ 4 files changed, 191 insertions(+), 51 deletions(-) create mode 100644 tools/benchmarks/results/terminal-pipeline-dev-batch2ms-2026-07-03T20-29-12-240Z.json diff --git a/notes/terminal-performance-initiative.md b/notes/terminal-performance-initiative.md index 5f64691d8c1..e24564ce386 100644 --- a/notes/terminal-performance-initiative.md +++ b/notes/terminal-performance-initiative.md @@ -537,6 +537,30 @@ drain scheduling (sub-ms re-arm; also raises the throughput ceiling); (2) tighter effective in-flight window on the renderer delivery path. Target: VS Code's ~7ms class or below without giving back throughput. +### 2026-07-03 — Batch windows were the gap: dev DSR-load p50 19 -> 8.0ms + +Lever results (dev, 3MB protocol, same session): +- MessageChannel drains (2434dfaae): 19.01ms — NO change. Proved the + ~19ms was NOT queue depth: at 1MB/s vs ~11MB/s capacity (9% util) + there is no standing queue. Kept (correct, removes a real clamp). +- Batch windows 8->2ms on BOTH hops (e67a91d7a: daemon + STREAM_DATA_BATCH_INTERVAL_MS + main PTY_BATCH_INTERVAL_MS): + **p50 8.00 / p90 10.13 / p99 12.26ms** (from 19.01/22.7/28.1). + Throughput unchanged (agent-tui 9.8 vs 9.1, ambient noise). 239 + batcher+pty tests green after timing updates. + +Dev-mode 8.0ms already matches VS Code prod (7.18); prod build should +land BELOW VS Code. p99: ours 12.3 vs VS Code 43.4. The remaining +fixed-latency terms are renderer/xterm-internal (12ms parse slices). +Note: main's interactive bypass (input-gated) means real keystroke echo +skips batching entirely — the DSR metric understates real typing +responsiveness; VS Code measured on the same freight path, comparison +fair. + +Next: cut RC, confirm in prod, re-baseline vs Terminal.app (expect +~8-15x from 300x at baseline; goal line 10x = 4.5ms now plausibly in +reach). + ## Success criteria (baseline-relative; finalize after task 1) - DSR-under-load p90 in Orca within striking distance of iTerm2 on the same diff --git a/src/main/daemon/daemon-stream-data-batcher.test.ts b/src/main/daemon/daemon-stream-data-batcher.test.ts index 8777434e1d9..20dba22c939 100644 --- a/src/main/daemon/daemon-stream-data-batcher.test.ts +++ b/src/main/daemon/daemon-stream-data-batcher.test.ts @@ -22,7 +22,7 @@ describe('DaemonStreamDataBatcher', () => { batcher.enqueue('client-1', 'session-1', 'b') expect(streamSocket.write).not.toHaveBeenCalled() - vi.advanceTimersByTime(7) + vi.advanceTimersByTime(1) expect(streamSocket.write).not.toHaveBeenCalled() vi.advanceTimersByTime(1) @@ -45,7 +45,7 @@ describe('DaemonStreamDataBatcher', () => { expect(streamSocket.write).toHaveBeenCalledTimes(1) expect(String(streamSocket.write.mock.calls[0]?.[0])).toContain('\\u001b[20;2Hredraw') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(streamSocket.write).toHaveBeenCalledTimes(1) } finally { vi.useRealTimers() @@ -65,7 +65,7 @@ describe('DaemonStreamDataBatcher', () => { }) expect(streamSocket.write).not.toHaveBeenCalled() - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(streamSocket.write).toHaveBeenCalledTimes(1) expect(String(streamSocket.write.mock.calls[0]?.[0])).toContain(`${pending}redraw`) } finally { @@ -91,7 +91,7 @@ describe('DaemonStreamDataBatcher', () => { ) expect(String(streamSocket.write.mock.calls[0]?.[0])).toContain('"data":"echo"') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(streamSocket.write).toHaveBeenCalledTimes(2) expect(String(streamSocket.write.mock.calls[1]?.[0])).toContain( '"sessionId":"session-background"' @@ -113,7 +113,7 @@ describe('DaemonStreamDataBatcher', () => { const parser = createNdjsonParser(onMessage, onError, { maxLineBytes }) batcher.enqueue('client-1', 'session-1', data) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) for (const [line] of streamSocket.write.mock.calls) { parser.feed(String(line)) } diff --git a/src/main/ipc/pty.test.ts b/src/main/ipc/pty.test.ts index 270280e01b4..1f0cffe1019 100644 --- a/src/main/ipc/pty.test.ts +++ b/src/main/ipc/pty.test.ts @@ -3248,7 +3248,7 @@ describe('registerPtyHandlers', () => { const result = await pendingSpawn daemon.emitData(result.id, 'daemon output') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) daemon.emitExit(result.id, 0) expect(daemon.spawn).toHaveBeenCalledTimes(1) @@ -6292,7 +6292,7 @@ describe('registerPtyHandlers', () => { mockProc.emitData('background output') expect(mainWindow.webContents.send).not.toHaveBeenCalled() - vi.advanceTimersByTime(7) + vi.advanceTimersByTime(1) expect(mainWindow.webContents.send).not.toHaveBeenCalled() vi.advanceTimersByTime(1) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { @@ -6321,7 +6321,7 @@ describe('registerPtyHandlers', () => { setRendererPtyVisible(null, { id: spawnResult.id, visible: true }) mockProc.emitData('visible output') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, data: 'visible output' @@ -6331,7 +6331,7 @@ describe('registerPtyHandlers', () => { setRendererPtyVisible(null, { id: spawnResult.id, visible: false }) mockProc.emitData('\x1b[2Khidden-width redraw') setRendererPtyVisible(null, { id: spawnResult.id, visible: true }) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, @@ -6362,7 +6362,7 @@ describe('registerPtyHandlers', () => { setRendererPtyVisible(null, { id: spawnResult.id, visible: true }) handleRendererLoading() mockProc.emitData('reload-gap output') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, @@ -6373,7 +6373,7 @@ describe('registerPtyHandlers', () => { mainWindow.webContents.send.mockClear() setRendererPtyVisible(null, { id: spawnResult.id, visible: true }) mockProc.emitData('visible output') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, @@ -6404,7 +6404,7 @@ describe('registerPtyHandlers', () => { resizePty(null, { id: spawnResult.id, cols: 72, rows: 24 }) setRendererPtyVisible(null, { id: spawnResult.id, visible: true }) mockProc.emitData('\x1b[2Khidden-resize redraw') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, @@ -6415,7 +6415,7 @@ describe('registerPtyHandlers', () => { mainWindow.webContents.send.mockClear() resizePty(null, { id: spawnResult.id, cols: 80, rows: 24 }) mockProc.emitData('visible repaint') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, @@ -6448,7 +6448,7 @@ describe('registerPtyHandlers', () => { setRendererPtyVisible(null, { id: spawnResult.id, visible: true }) writePty(mainWindowIpcEvent, { id: spawnResult.id, data: 'x' }) mockProc.emitData('x') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, @@ -6483,7 +6483,7 @@ describe('registerPtyHandlers', () => { expect(mockProc.proc.write).toHaveBeenCalledWith('\x1b]10;rgb:eeee/eeee/eeee\x1b\\') expect(mockProc.proc.write).toHaveBeenCalledWith('\x1b]11;rgb:1111/1111/1111\x1b\\') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, data: 'ready' @@ -6517,7 +6517,7 @@ describe('registerPtyHandlers', () => { expect(mockProc.proc.write).toHaveBeenCalledWith('\x1b]10;rgb:eeee/eeee/eeee\x1b\\') expect(mockProc.proc.write).toHaveBeenCalledWith('\x1b]11;rgb:1111/1111/1111\x1b\\') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, data: 'ready' @@ -6549,7 +6549,7 @@ describe('registerPtyHandlers', () => { mockProc.emitData(`${query}ready`) expect(mockProc.proc.write).not.toHaveBeenCalled() - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, data: `${query}ready` @@ -6583,7 +6583,7 @@ describe('registerPtyHandlers', () => { mockProc.emitData(`${command}ready`) expect(mockProc.proc.write).not.toHaveBeenCalled() - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, data: `${command}ready` @@ -6644,7 +6644,7 @@ describe('registerPtyHandlers', () => { expect(write).toHaveBeenCalledWith(spawnResult.id, '\x1b]10;rgb:eeee/eeee/eeee\x1b\\') expect(write).toHaveBeenCalledWith(spawnResult.id, '\x1b]11;rgb:1111/1111/1111\x1b\\') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, data: 'daemon-ready' @@ -6719,7 +6719,7 @@ describe('registerPtyHandlers', () => { id: spawnResult.id, data: '\x1b]10;?\x1b\\\x1b]11;?\x1b\\ready' }) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(write).toHaveBeenCalledWith(spawnResult.id, '\x1b]10;rgb:eeee/eeee/eeee\x1b\\') expect(write).toHaveBeenCalledWith(spawnResult.id, '\x1b]11;rgb:1111/1111/1111\x1b\\') @@ -6759,7 +6759,7 @@ describe('registerPtyHandlers', () => { id: spawnResult.id, data: '\x1b[20;2Hredraw' }) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(1) } finally { vi.useRealTimers() @@ -6815,7 +6815,7 @@ describe('registerPtyHandlers', () => { mockProc.emitData(largeOutput) expect(mainWindow.webContents.send).not.toHaveBeenCalled() - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, data: largeOutput @@ -6851,7 +6851,7 @@ describe('registerPtyHandlers', () => { } expect(mainWindow.webContents.send).toHaveBeenCalledTimes(64) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(65) expect(mainWindow.webContents.send).toHaveBeenNthCalledWith(65, 'pty:data', { id: spawnResult.id, @@ -6889,7 +6889,7 @@ describe('registerPtyHandlers', () => { id: spawnResult.id, data: redraw }) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(1) } finally { vi.useRealTimers() @@ -6921,7 +6921,7 @@ describe('registerPtyHandlers', () => { mockProc.emitData('redraw') expect(mainWindow.webContents.send).not.toHaveBeenCalled() - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, data: `${pendingOutput}redraw` @@ -6956,7 +6956,7 @@ describe('registerPtyHandlers', () => { secondProc.emitData('second-terminal-output') firstProc.emitData(`${firstChunk}${firstRemainder}`) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(2) expect(mainWindow.webContents.send).toHaveBeenNthCalledWith(1, 'pty:data', { @@ -7002,7 +7002,7 @@ describe('registerPtyHandlers', () => { mainWindow.webContents.send.mockClear() firstProc.emitData('x'.repeat(600 * 1024)) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) for (let index = 0; index < 31; index++) { vi.advanceTimersByTime(1) } @@ -7027,7 +7027,7 @@ describe('registerPtyHandlers', () => { }) secondProc.emitData('second-terminal-output') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(33) expect(mainWindow.webContents.send).toHaveBeenNthCalledWith(33, 'pty:data', { @@ -7085,7 +7085,7 @@ describe('registerPtyHandlers', () => { // Saturate the renderer in-flight window (512 KB) with no ACKs — the // frozen/starved-renderer shape from the field reports. mockProc.emitData('x'.repeat(600 * 1024)) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) for (let index = 0; index < 32; index++) { vi.advanceTimersByTime(1) } @@ -7109,7 +7109,7 @@ describe('registerPtyHandlers', () => { // sentinel so the pane repaints from the main-owned snapshot. mainWindow.webContents.send.mockClear() ackData(null, { id: spawn.id, charCount: 512 * 1024 }) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawn.id, data: '', @@ -7119,7 +7119,7 @@ describe('registerPtyHandlers', () => { // Fresh output after the sentinel flows normally again. mainWindow.webContents.send.mockClear() mockProc.emitData('back to normal') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawn.id, data: 'back to normal' @@ -7147,7 +7147,7 @@ describe('registerPtyHandlers', () => { // Saturate the in-flight window with no ACKs, then buffer 3 MB — over // the floor, under the scaled cap: it must be retained, not dropped. mockProc.emitData('x'.repeat(600 * 1024)) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) for (let index = 0; index < 32; index++) { vi.advanceTimersByTime(1) } @@ -7264,7 +7264,7 @@ describe('registerPtyHandlers', () => { mainWindow.webContents.send.mockClear() mockProc.emitData('remote-output') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: 'remote-like-pty', @@ -7315,7 +7315,7 @@ describe('registerPtyHandlers', () => { for (const proc of bulkProcs) { proc.emitData('x'.repeat(600 * 1024)) } - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) for (let index = 0; index < 400; index++) { vi.advanceTimersByTime(1) } @@ -7381,7 +7381,7 @@ describe('registerPtyHandlers', () => { for (const proc of procs) { proc.emitData('x'.repeat(600 * 1024)) } - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) for (let index = 0; index < 400; index++) { vi.advanceTimersByTime(1) } @@ -7422,7 +7422,7 @@ describe('registerPtyHandlers', () => { for (let index = 0; index < procs.length - 1; index++) { procs[index]!.emitData('x'.repeat(600 * 1024)) } - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) for (let index = 0; index < 400; index++) { vi.advanceTimersByTime(1) } @@ -7431,7 +7431,7 @@ describe('registerPtyHandlers', () => { const activeIndex = procs.length - 1 procs[activeIndex]!.emitData('active-output') setActiveRendererPty(null, { id: spawns[activeIndex]!.id, active: true }) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(513) expect(mainWindow.webContents.send).toHaveBeenNthCalledWith(513, 'pty:data', { @@ -7465,7 +7465,7 @@ describe('registerPtyHandlers', () => { mainWindow.webContents.send.mockClear() activeProc.emitData('x'.repeat(768 * 1024)) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) for (let index = 0; index < 31; index++) { vi.advanceTimersByTime(1) } @@ -7577,7 +7577,7 @@ describe('registerPtyHandlers', () => { // A keystroke-sized redraw would take the immediate path when visible. mockProc.emitData('\x1b[20;2Hredraw') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(1) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:modelRestoreNeeded', { @@ -7608,7 +7608,7 @@ describe('registerPtyHandlers', () => { setHidden(null, { id: spawnResult.id, hidden: true }) setInterest(null, { id: spawnResult.id, interested: true }) mockProc.emitData('sidecar bytes') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, data: 'sidecar bytes' @@ -7617,7 +7617,7 @@ describe('registerPtyHandlers', () => { setInterest(null, { id: spawnResult.id, interested: false }) mainWindow.webContents.send.mockClear() mockProc.emitData('gated bytes') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(1) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:modelRestoreNeeded', { id: spawnResult.id, @@ -7648,7 +7648,7 @@ describe('registerPtyHandlers', () => { setHidden(null, { id: spawnResult.id, hidden: true }) mockProc.emitData('still delivered') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(1) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { @@ -7685,7 +7685,7 @@ describe('registerPtyHandlers', () => { id: spawnResult.id, reason: 'hidden-drop' }) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(1) expect(getPtyRendererDeliveryDebugSnapshot()).toMatchObject({ pendingPtyCount: 0 }) } finally { @@ -7710,7 +7710,7 @@ describe('registerPtyHandlers', () => { setHidden(null, { id: spawnResult.id, hidden: true }) mockProc.emitData('dropped while hidden') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(1) // Why: a renderer reload can replace the view that latched @@ -7723,7 +7723,7 @@ describe('registerPtyHandlers', () => { }) mockProc.emitData('visible again') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenLastCalledWith('pty:data', { id: spawnResult.id, data: 'visible again' @@ -7803,7 +7803,7 @@ describe('registerPtyHandlers', () => { setHidden(null, { id: spawnResult.id, hidden: true }) mockProc.emitData('dropped while hidden') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(1) // Why: a hidden remount (tab move, parking handoff) re-marks the PTY @@ -8036,7 +8036,7 @@ describe('registerPtyHandlers', () => { expect(isHiddenRendererPty(spawnResult.id)).toBe(true) mockProc.emitData('first chunk') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(1) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:modelRestoreNeeded', { @@ -8063,7 +8063,7 @@ describe('registerPtyHandlers', () => { expect(isHiddenRendererPty(spawnResult.id)).toBe(false) mockProc.emitData('visible output') - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, @@ -8147,7 +8147,7 @@ describe('registerPtyHandlers', () => { mockProc.emitData('z'.repeat(64 * 1024)) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(1) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledTimes(2) expect(mainWindow.webContents.send).toHaveBeenLastCalledWith('pty:data', { id: spawnResult.id, @@ -8189,7 +8189,7 @@ describe('registerPtyHandlers', () => { expect.anything() ) - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenLastCalledWith('pty:data', { id: spawnResult.id, data: '', @@ -8225,7 +8225,7 @@ describe('registerPtyHandlers', () => { mockProc.emitData('stale redraw') expect(mainWindow.webContents.send).not.toHaveBeenCalled() - vi.advanceTimersByTime(8) + vi.advanceTimersByTime(2) expect(mainWindow.webContents.send).toHaveBeenCalledWith('pty:data', { id: spawnResult.id, data: 'stale redraw' diff --git a/tools/benchmarks/results/terminal-pipeline-dev-batch2ms-2026-07-03T20-29-12-240Z.json b/tools/benchmarks/results/terminal-pipeline-dev-batch2ms-2026-07-03T20-29-12-240Z.json new file mode 100644 index 00000000000..405c06ff45c --- /dev/null +++ b/tools/benchmarks/results/terminal-pipeline-dev-batch2ms-2026-07-03T20-29-12-240Z.json @@ -0,0 +1,116 @@ +{ + "benchmark": "terminal-pipeline", + "label": "dev-batch2ms", + "timestamp": "2026-07-03T20:29:12.240Z", + "terminal": { + "program": "Orca", + "version": "1.4.120", + "term": "xterm-256color", + "cols": 282, + "rows": 80, + "tty": true + }, + "machine": { + "platform": "darwin", + "arch": "arm64", + "cpu": "Apple M4", + "release": "25.2.0", + "node": "v26.0.0" + }, + "config": { + "sizeMb": 3, + "iterations": 5, + "dsrCount": 200 + }, + "dsrIdle": { + "count": 200, + "p50": 1.5039170000000013, + "p90": 4.130499999999984, + "p99": 14.714749999999981, + "max": 82.719833, + "timeouts": 0 + }, + "throughput": [ + { + "fixture": "ascii-log", + "fixtureBytes": 3145851, + "wallMs": { + "count": 5, + "p50": 675.0551660000001, + "p90": 1331.6419580000002, + "p99": 1331.6419580000002, + "max": 1331.6419580000002 + }, + "mbPerSec": { + "count": 5, + "p50": 4.444255007658022, + "p90": 7.383804508967684, + "p99": 7.383804508967684, + "max": 7.383804508967684 + } + }, + { + "fixture": "cjk-emoji", + "fixtureBytes": 3145785, + "wallMs": { + "count": 5, + "p50": 308.82854099999986, + "p90": 431.20550000000003, + "p99": 431.20550000000003, + "max": 431.20550000000003 + }, + "mbPerSec": { + "count": 5, + "p50": 9.714304091589891, + "p90": 10.261337926284375, + "p99": 10.261337926284375, + "max": 10.261337926284375 + } + }, + { + "fixture": "agent-tui", + "fixtureBytes": 3146560, + "wallMs": { + "count": 5, + "p50": 306.4545420000013, + "p90": 330.3279170000005, + "p99": 330.3279170000005, + "max": 330.3279170000005 + }, + "mbPerSec": { + "count": 5, + "p50": 9.791969267113153, + "p90": 10.547125590007429, + "p99": 10.547125590007429, + "max": 10.547125590007429 + } + }, + { + "fixture": "styles-stress", + "fixtureBytes": 3145734, + "wallMs": { + "count": 5, + "p50": 645.0449580000004, + "p90": 704.4664589999993, + "p99": 704.4664589999993, + "max": 704.4664589999993 + }, + "mbPerSec": { + "count": 5, + "p50": 4.650847487200879, + "p90": 4.823647924291215, + "p99": 4.823647924291215, + "max": 4.823647924291215 + } + } + ], + "dsrUnderLoad": { + "paceBytesPerSec": 1048576, + "count": 50, + "p50": 8.004875000000538, + "p90": 10.1282910000009, + "p99": 12.25512499999968, + "max": 12.25512499999968, + "timeouts": 0 + } +}