Neil and Orca
a7ffb244e4
perf(terminal): bound the reattach payload agent-signal scan ( #12681 )
...
hasCursorAgentReattachPayloadScreenSignal built a char-by-char copy of the
entire reattach payload so it could read the last header plus 5000 chars. On a
2MB daemon snapshot that cost 17.5ms of synchronous renderer main-thread work —
~75% of what xterm then spends parsing the same bytes — and the miss case paid
it in full for a result that is always false.
Two changes, both matching existing in-tree precedent: bound the scan to a
256KB tail (as the kitty tracker already bounds its own scan), and strip via
the shared precompiled CSI_SEQUENCE_PATTERN instead of a hand-rolled loop,
which is also faster in V8 because it copies spans rather than building a rope
per character.
2MB snapshot, header hit 17.5ms -> 0.80ms (22x)
2MB snapshot, miss 8.7ms -> 0.52ms (17x)
200KB snapshot, header hit 1.5ms -> 0.62ms (2.4x)
config/scripts/terminal-reattach-payload-scan-benchmark.mjs reproduces this and
asserts every candidate agrees with the baseline before timing it. It also
records a negative result: porting the daemon mouse mirror's includes()
pre-filter to the kitty tracker makes reattach slower, because snapshots always
contain the introducer.
Adds guards for the two behaviours a future shortcut would silently break: a
CSI-split header must still match, and a header behind the tail bound must not.
Also byte-pins POST_REPLAY_REATTACH_RESET_KEEP_MOUSE, which shipped unpinned.
Co-authored-by: Orca <help@stably.ai >
2026-08-06 00:23:57 -07:00
..
2026-08-03 20:45:23 -07:00
2026-08-05 12:57:02 -07:00
2026-08-04 15:54:17 -07:00
2026-08-04 15:54:17 -07:00
2026-07-26 13:20:23 -07:00
2026-07-28 00:21:13 -07:00
2026-07-12 23:43:07 -07:00
2026-06-22 19:13:32 -07:00
2026-07-12 23:43:07 -07:00
2026-06-09 15:59:17 -07:00
2026-07-27 17:17:03 -07:00
2026-06-29 23:37:30 -07:00
2026-07-27 16:36:39 -07:00
2026-07-27 16:36:39 -07:00
2026-07-12 02:13:41 -07:00
2026-07-08 22:21:40 -07:00
2026-07-20 19:09:18 -07:00
2026-07-13 18:58:21 -07:00
2026-08-04 02:03:40 -07:00
2026-07-28 01:30:52 -07:00
2026-07-28 01:30:52 -07:00
2026-06-29 23:37:30 -07:00
2026-07-06 17:12:27 -07:00
2026-07-06 17:12:27 -07:00
2026-07-27 18:58:36 -07:00
2026-07-03 22:32:11 -07:00
2026-07-03 19:58:07 -07:00
2026-08-01 01:48:24 -07:00
2026-07-13 00:48:51 -07:00
2026-07-13 00:48:51 -07:00
2026-07-23 17:44:43 -07:00
2026-07-27 20:54:02 -07:00
2026-07-27 20:54:02 -07:00
2026-07-27 17:16:01 -07:00
2026-06-09 15:59:17 -07:00
2026-07-20 14:34:53 -07:00
2026-07-20 14:34:53 -07:00
2026-07-20 14:34:53 -07:00
2026-07-26 20:20:12 -07:00
2026-06-22 19:13:32 -07:00
2026-08-05 12:09:24 -07:00
2026-08-05 22:14:18 -07:00
2026-07-29 18:29:10 -07:00
2026-06-07 17:49:01 -07:00
2026-06-07 17:49:01 -07:00
2026-07-03 20:53:16 -07:00
2026-07-03 20:53:16 -07:00
2026-08-05 21:12:32 -07:00
2026-08-05 21:12:32 -07:00
2026-08-03 18:02:45 -07:00
2026-08-03 18:02:45 -07:00
2026-07-27 12:31:37 -07:00
2026-07-27 12:31:37 -07:00
2026-06-02 11:49:00 -07:00
2026-08-03 10:54:00 -07:00
2026-07-27 13:32:29 -07:00
2026-07-27 13:32:29 -07:00
2026-08-05 12:51:05 -07:00
2026-07-19 21:59:22 -04:00
2026-07-19 21:59:22 -04:00
2026-06-05 01:15:54 -07:00
2026-07-22 11:43:01 -07:00
2026-07-22 11:43:01 -07:00
2026-07-30 13:20:47 -07:00
2026-07-30 13:20:47 -07:00
2026-07-10 17:27:47 -07:00
2026-07-10 17:27:47 -07:00
2026-07-22 23:10:19 -07:00
2026-07-27 13:32:29 -07:00
2026-07-26 20:31:52 -07:00
2026-07-27 18:58:36 -07:00
2026-07-27 18:58:36 -07:00
2026-07-30 19:33:05 -07:00
2026-07-30 19:33:05 -07:00
2026-07-30 19:33:05 -07:00
2026-08-03 23:18:15 -07:00
2026-08-03 23:18:15 -07:00
2026-06-28 21:16:02 -07:00
2026-08-04 15:54:17 -07:00
2026-08-04 15:54:17 -07:00
2026-07-27 17:09:31 -07:00
2026-06-15 12:56:22 -07:00
2026-06-29 23:37:30 -07:00
2026-07-27 13:32:29 -07:00
2026-07-27 13:32:29 -07:00
2026-06-03 23:42:33 -07:00
2026-06-04 16:11:51 -04:00
2026-06-03 12:48:00 -07:00
2026-06-28 19:43:18 -07:00
2026-07-27 20:54:02 -07:00
2026-06-28 19:43:18 -07:00
2026-08-03 02:18:05 -07:00
2026-08-03 02:18:05 -07:00
2026-08-03 02:18:05 -07:00
2026-08-03 02:18:05 -07:00
2026-08-03 02:18:05 -07:00
2026-08-03 02:18:05 -07:00
2026-08-03 02:18:05 -07:00
2026-08-03 02:18:05 -07:00
2026-08-03 02:18:05 -07:00
2026-08-03 02:18:05 -07:00
2026-06-18 21:26:12 -07:00
2026-07-24 00:26:39 -07:00
2026-08-04 03:56:33 -07:00
2026-08-04 03:56:33 -07:00
2026-08-04 03:56:33 -07:00
2026-06-17 15:14:35 -07:00
2026-08-04 03:56:33 -07:00
2026-07-28 15:34:52 -07:00
2026-08-04 03:56:33 -07:00
2026-08-04 03:56:33 -07:00
2026-06-29 23:37:30 -07:00
2026-06-19 15:52:05 -07:00
2026-06-09 15:59:17 -07:00
2026-06-09 15:59:17 -07:00
2026-08-04 03:56:33 -07:00
2026-07-31 15:13:41 -07:00
2026-08-04 03:56:33 -07:00
2026-08-04 03:56:33 -07:00
2026-06-17 15:14:35 -07:00
2026-06-17 15:14:35 -07:00
2026-08-04 03:56:33 -07:00
2026-06-29 11:56:26 -07:00
2026-08-04 03:56:33 -07:00
2026-08-04 03:56:33 -07:00
2026-08-04 03:56:33 -07:00
2026-08-04 03:56:33 -07:00
2026-08-04 03:56:33 -07:00
2026-08-04 03:56:33 -07:00
2026-06-09 15:59:17 -07:00
2026-08-04 03:56:33 -07:00
2026-07-29 17:44:41 -07:00
2026-07-10 19:08:12 -07:00
2026-07-27 16:36:39 -07:00
2026-07-27 16:36:39 -07:00
2026-07-30 19:24:34 -07:00
2026-07-30 19:24:34 -07:00
2026-07-30 19:24:34 -07:00
2026-07-30 19:24:34 -07:00
2026-07-30 19:24:34 -07:00
2026-07-30 19:24:34 -07:00
2026-06-02 21:15:00 -07:00
2026-07-28 15:34:52 -07:00
2026-06-28 21:19:10 -07:00
2026-06-28 23:40:55 -07:00
2026-07-26 20:31:55 -07:00
2026-07-27 18:58:36 -07:00
2026-06-22 01:07:16 -07:00
2026-06-22 01:07:16 -07:00
2026-07-27 20:54:02 -07:00
2026-07-22 11:43:01 -07:00
2026-05-15 05:44:25 -04:00
2026-07-27 12:31:37 -07:00
2026-07-27 12:31:37 -07:00
2026-07-22 11:43:01 -07:00
2026-08-05 21:17:45 -07:00
2026-07-28 00:21:13 -07:00
2026-07-31 16:25:13 -07:00
2026-07-30 19:33:05 -07:00
2026-08-05 12:09:24 -07:00
2026-07-31 16:25:13 -07:00
2026-07-27 16:26:43 -07:00
2026-08-01 01:48:24 -07:00
2026-07-27 13:32:29 -07:00
2026-07-27 13:32:29 -07:00
2026-05-30 13:09:17 -07:00
2026-07-27 20:54:02 -07:00
2026-05-30 21:46:13 -07:00
2026-07-28 00:21:13 -07:00
2026-07-22 00:22:36 -07:00
2026-07-22 00:22:36 -07:00
2026-07-27 16:40:59 -07:00
2026-08-05 15:29:46 -07:00
2026-07-30 18:08:30 -07:00
2026-07-31 00:22:53 -07:00
2026-06-30 16:36:59 -07:00
2026-07-25 03:50:25 -07:00
2026-07-25 03:50:25 -07:00
2026-08-04 15:54:17 -07:00
2026-07-23 20:20:00 -07:00
2026-07-23 20:20:00 -07:00
2026-07-23 20:20:00 -07:00
2026-07-23 20:20:00 -07:00
2026-07-23 20:20:00 -07:00
2026-07-31 00:22:53 -07:00
2026-07-28 00:21:13 -07:00
2026-07-12 23:43:07 -07:00
2026-07-26 13:19:23 -07:00
2026-07-02 18:41:23 -04:00
2026-07-27 15:48:39 -07:00
2026-07-27 15:48:39 -07:00
2026-07-27 17:18:31 -07:00
2026-08-05 12:57:02 -07:00
2026-08-05 12:57:02 -07:00
2026-06-22 01:07:16 -07:00
2026-07-28 15:34:52 -07:00
2026-07-27 13:32:29 -07:00
2026-07-22 18:52:37 -07:00
2026-08-05 12:57:02 -07:00
2026-08-02 17:40:58 -07:00
2026-05-16 17:44:42 -04:00
2026-07-20 21:36:15 -07:00
2026-08-01 00:25:35 -07:00
2026-07-22 18:25:05 -07:00
2026-06-30 16:36:59 -07:00
2026-06-22 16:42:20 -07:00
2026-08-03 02:18:05 -07:00
2026-06-07 04:15:26 -07:00
2026-07-29 00:47:18 -07:00
2026-07-12 23:50:00 -07:00
2026-07-31 16:17:37 -07:00
2026-07-29 16:12:20 -07:00
2026-06-07 11:01:02 -07:00
2026-07-10 17:27:47 -07:00
2026-07-10 17:27:47 -07:00
2026-06-22 01:07:16 -07:00
2026-07-12 18:15:15 -07:00
2026-07-15 15:23:35 -07:00
2026-08-05 12:57:02 -07:00
2026-08-03 18:02:42 -07:00
2026-08-02 01:46:51 -07:00
2026-07-30 18:27:16 -07:00
2026-07-31 04:58:15 -07:00
2026-07-30 19:33:05 -07:00
2026-07-26 22:26:49 -07:00
2026-07-27 01:02:48 -07:00
2026-07-10 17:27:47 -07:00
2026-06-22 19:13:32 -07:00
2026-07-27 17:38:54 -07:00
2026-07-27 17:38:54 -07:00
2026-07-27 23:28:05 -07:00
2026-06-29 22:38:29 -07:00
2026-07-31 16:25:13 -07:00
2026-07-27 23:28:05 -07:00
2026-06-22 19:13:32 -07:00
2026-06-22 19:13:32 -07:00
2026-07-10 17:27:47 -07:00
2026-07-26 15:32:33 -07:00
2026-08-06 00:23:57 -07:00
2026-07-27 17:15:54 -07:00
2026-06-29 23:37:30 -07:00
2026-06-29 23:37:30 -07:00
2026-06-29 23:37:30 -07:00
2026-07-13 00:26:22 -07:00
2026-06-28 22:58:27 -07:00
2026-07-23 18:35:31 -07:00
2026-07-29 20:01:31 -07:00
2026-07-22 19:11:44 -07:00
2026-07-22 19:11:44 -07:00
2026-08-05 12:57:02 -07:00
2026-08-04 03:56:33 -07:00
2026-08-04 03:56:33 -07:00
2026-08-01 00:25:35 -07:00
2026-07-29 17:44:41 -07:00
2026-06-29 23:37:30 -07:00
2026-04-09 12:28:52 -07:00
2026-07-09 16:09:09 -07:00
2026-07-09 16:09:09 -07:00
2026-07-27 01:14:33 -07:00
2026-07-27 01:14:33 -07:00
2026-07-05 23:56:37 -07:00
2026-06-22 01:07:16 -07:00
2026-07-16 14:47:28 -07:00
2026-07-30 18:27:16 -07:00
2026-07-30 18:27:16 -07:00
2026-07-27 17:38:54 -07:00
2026-06-29 22:38:29 -07:00
2026-07-02 12:11:58 -07:00
2026-07-02 12:11:58 -07:00
2026-08-01 00:25:35 -07:00
2026-07-19 20:25:52 -07:00
2026-07-27 15:48:39 -07:00
2026-07-31 06:08:26 -07:00
2026-07-20 19:09:18 -07:00
2026-06-09 10:43:04 -07:00
2026-07-27 18:58:36 -07:00