diff --git a/addons/addon-search/benchmark/SearchAddon.benchmark.ts b/addons/addon-search/benchmark/SearchAddon.benchmark.ts index b3844d83b..c255cbf56 100644 --- a/addons/addon-search/benchmark/SearchAddon.benchmark.ts +++ b/addons/addon-search/benchmark/SearchAddon.benchmark.ts @@ -87,6 +87,55 @@ perfContext('SearchAddon API on real-world terminal content', () => { foundCount++; } } + if (foundCount !== Constants.NAVIGATION_ITERATIONS) { + throw new Error(`Expected ${Constants.NAVIGATION_ITERATIONS} matches, got ${foundCount}`); + } + return { payloadSize: Constants.NAVIGATION_ITERATIONS, foundCount }; + }, { fork: false }).showAverageRuntime(); + }); + + perfContext('findNext/no match full scan', () => { + 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.NAVIGATION_ITERATIONS; i++) { + if (search.findNext('zzzznotfoundzzzz')) { + foundCount++; + } + } + if (foundCount !== 0) { + throw new Error(`Expected 0 matches, got ${foundCount}`); + } + return { payloadSize: Constants.NAVIGATION_ITERATIONS, foundCount }; + }, { fork: false }).showAverageRuntime(); + }); + + perfContext('findNext/case insensitive navigation', () => { + 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.NAVIGATION_ITERATIONS; i++) { + if (search.findNext('OPENCV', { caseSensitive: false })) { + foundCount++; + } + } + if (foundCount !== Constants.NAVIGATION_ITERATIONS) { + throw new Error(`Expected ${Constants.NAVIGATION_ITERATIONS} matches, got ${foundCount}`); + } return { payloadSize: Constants.NAVIGATION_ITERATIONS, foundCount }; }, { fork: false }).showAverageRuntime(); }); @@ -107,6 +156,9 @@ perfContext('SearchAddon API on real-world terminal content', () => { foundCount++; } } + if (foundCount !== Constants.NAVIGATION_ITERATIONS) { + throw new Error(`Expected ${Constants.NAVIGATION_ITERATIONS} matches, got ${foundCount}`); + } return { payloadSize: Constants.NAVIGATION_ITERATIONS, foundCount }; }, { fork: false }).showAverageRuntime(); }); @@ -146,12 +198,14 @@ perfContext('SearchAddon API on real-world terminal content', () => { new RuntimeCase('', () => { let foundCount = 0; for (let i = 0; i < Constants.DECORATION_REFRESH_ITERATIONS; i++) { - search.clearDecorations(); const term = i % 2 === 0 ? 'WARN' : 'ERROR'; if (search.findNext(term, DECORATION_OPTIONS)) { foundCount++; } } + if (foundCount !== Constants.DECORATION_REFRESH_ITERATIONS) { + throw new Error(`Expected ${Constants.DECORATION_REFRESH_ITERATIONS} matches, got ${foundCount}`); + } return { payloadSize: Constants.DECORATION_REFRESH_ITERATIONS, foundCount }; }, { fork: false }).showAverageRuntime(); }); diff --git a/addons/addon-search/benchmark/benchmark.json b/addons/addon-search/benchmark/benchmark.json index 1333eac88..6b71937cd 100644 --- a/addons/addon-search/benchmark/benchmark.json +++ b/addons/addon-search/benchmark/benchmark.json @@ -2,18 +2,12 @@ "APP_PATH": ".benchmark", "evalConfig": { "tolerance": { - "*": [0.75, 1.5], - "*.dev": [0.01, 1.5], - "*.cv": [0.01, 1.5], - "EscapeSequenceParser.benchmark.js.*.averageThroughput.mean": [0.9, 5] + "*": [0.9, 1.2], + "SearchAddon.benchmark.js.*.averageRuntime.mean": [0.93, 1.12] }, "skip": [ "*.median", - "*.runs", - "*.dev", - "*.cv", - "EscapeSequenceParser.benchmark.js.*.averageRuntime", - "Terminal.benchmark.js.*.averageRuntime" + "*.runs" ] } } diff --git a/addons/addon-search/package.json b/addons/addon-search/package.json index bc9599eed..70b2d5e5a 100644 --- a/addons/addon-search/package.json +++ b/addons/addon-search/package.json @@ -21,7 +21,7 @@ "prepublishOnly": "npm run package", "start": "node ../../demo/start", "benchmark": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json out-benchmark/benchmark/*benchmark.js", - "benchmark-baseline": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --baseline out-benchmark/benchmark/*benchmark.js", - "benchmark-eval": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --eval out-benchmark/benchmark/*benchmark.js" + "benchmark-baseline": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 10 -c benchmark/benchmark.json --baseline out-benchmark/benchmark/*benchmark.js", + "benchmark-eval": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 10 -c benchmark/benchmark.json --eval -F out-benchmark/benchmark/*benchmark.js" } }