Findings + tests: batch windows were the DSR-load gap (19->8.0ms dev); timing tests updated to 2ms windows

Co-authored-by: Orca <help@stably.ai>
This commit is contained in:
Jinwoo-H
2026-07-03 16:30:51 -04:00
co-authored by Orca
parent e67a91d7af
commit 56d4d6b2b0
4 changed files with 191 additions and 51 deletions
+24
View File
@@ -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
@@ -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))
}
+46 -46
View File
@@ -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'
@@ -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
}
}