test(performance): count SQL statements only for the launch journey

Codex review: the M3U import, refresh-cancellation and Xtream benchmarks
also run with IPTVNATOR_PERF_CAPTURE=1, so the statement hook wrapped
every row of their bulk inserts and changed what they measure.

SQL counting now also needs IPTVNATOR_PERF_COUNT_SQL=1, which only the
launch journey sets; a harness test fails if another source sets it.
Startup phases, the window snapshot and the read handler stay on the
capture flag. Without SQL counting no ready-to-show listener is attached,
so a zero is never reported for statements nobody counted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
4grayandClaude Opus 5.5 committed 2026-09-27 18:51:56 +02:00
1 parent 757166b43a
commit e5b28074e6
15 files changed
+171 -38

No files matched your search

@@ -129,11 +129,14 @@ export async function measureLaunchJourney(
try {
await cp(templateDirectory, dataDirectory, { recursive: true });
// IPTVNATOR_PERF_CAPTURE turns on the main-process counters and
// their read handler; see journey-main-counters.ts.
// their read handler, IPTVNATOR_PERF_COUNT_SQL the SQL statement
// count behind main.sqlStatementsBeforeReadyToShow; only this journey
// sets it. See journey-main-counters.ts.
const env = buildElectronLaunchEnvironment(
dataDirectory,
launchOptions({
IPTVNATOR_PERF_CAPTURE: '1',
IPTVNATOR_PERF_COUNT_SQL: '1',
IPTVNATOR_TRACE_IPC: '1',
})
);
@@ -1,4 +1,6 @@
import assert from 'node:assert/strict';
import { readdirSync, readFileSync } from 'node:fs';
import { join, relative, resolve } from 'node:path';
import test from 'node:test';
import {
@@ -124,3 +126,22 @@ test('rejects snapshots that were not frozen at the moments they claim', () => {
/total-below-frozen: main.startupPhases/
);
});
test('only the launch journey opts into SQL statement counting', () => {
// The import benchmarks also run with IPTVNATOR_PERF_CAPTURE=1; the SQL
// hook wraps every row of a bulk insert, so they must not enable it.
const sourceRoot = resolve(__dirname, '..');
const files = readdirSync(sourceRoot, { recursive: true })
.map(String)
.filter(
(file) => /\.(ts|cjs)$/.test(file) && !/\.spec\.ts$/.test(file)
);
const optedIn = files
.filter((file) =>
readFileSync(join(sourceRoot, file), 'utf8').includes(
'IPTVNATOR_PERF_COUNT_SQL'
)
)
.map((file) => relative(sourceRoot, join(sourceRoot, file)));
assert.deepEqual(optedIn, [join('journeys', 'launch-journey-app.ts')]);
});