From fe9ebddd6f1f55dfdf0ea68e4d7c1631d50df64f Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 26 May 2026 07:56:31 -0700 Subject: [PATCH] New benchmark case for cold cache --- .../benchmark/SearchAddon.benchmark.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/addons/addon-search/benchmark/SearchAddon.benchmark.ts b/addons/addon-search/benchmark/SearchAddon.benchmark.ts index b48dc73c3..4dbf21a5a 100644 --- a/addons/addon-search/benchmark/SearchAddon.benchmark.ts +++ b/addons/addon-search/benchmark/SearchAddon.benchmark.ts @@ -15,6 +15,7 @@ const enum Constants { ROWS = 40, SCROLLBACK = 8000, NAVIGATION_ITERATIONS = 250, + COLD_CACHE_ITERATIONS = 75, INCREMENTAL_ITERATIONS = 75, DECORATION_REFRESH_ITERATIONS = 25 } @@ -186,6 +187,31 @@ perfContext('SearchAddon API on real-world terminal content', () => { }, { fork: false }).showAverageRuntime(); }); + perfContext('findNext/cold cache', () => { + let terminal: TestTerminal; + let search: SearchAddon; + before(() => { + terminal = new TestTerminal({ cols: Constants.COLS, rows: Constants.ROWS, scrollback: Constants.SCROLLBACK }); + search = new SearchAddon(); + search.activate(terminal); + terminal.writeSync(bufferContent); + }); + new RuntimeCase('', () => { + let foundCount = 0; + for (let i = 0; i < Constants.COLD_CACHE_ITERATIONS; i++) { + // Force a fresh logical-line reconstruction and match scan each search. + (search as any)._clearMatchCache(); + if (search.findNext('opencv')) { + foundCount++; + } + } + if (foundCount !== Constants.COLD_CACHE_ITERATIONS) { + throw new Error(`Expected ${Constants.COLD_CACHE_ITERATIONS} matches, got ${foundCount}`); + } + return { payloadSize: Constants.COLD_CACHE_ITERATIONS, foundCount }; + }, { fork: false }).showAverageRuntime(); + }); + perfContext('findNext/wholeWord dense-punctuation', () => { let terminal: TestTerminal; let search: SearchAddon;