From 058df6f08eda63a8a63bcfd3df62b82309abd9af Mon Sep 17 00:00:00 2001 From: 4gray Date: Mon, 28 Sep 2026 10:07:32 +0200 Subject: [PATCH] test(perf): align J2 with the main-process counters from #1715 After rebasing on #1715, J1 measures main.sqlStatementsBeforeReadyToShow, so J2's reason for listing main.sqlStatementsToFirstPage as unavailable (no countable channel) was stale. State the actual limit: the running total is read from the test process and cannot be bounded at the click or the first-page batch. The performance-journeys CI job comment now names both journeys. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/ci.yml | 5 +++-- .../src/performance/open-source-journey-record.ts | 2 +- docs/architecture/performance-journeys.md | 11 +++++++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a57d6e28e..c5a9381a6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -295,8 +295,9 @@ jobs: needs: performance-journeys-scope if: needs.performance-journeys-scope.outputs.run == 'true' runs-on: ubuntu-latest - # The electron-performance build is the bulk of the time; the launch - # journey itself is six fresh Electron processes plus one seeding run. + # The electron-performance build is the bulk of the time; each journey + # (launch, open-source) is six fresh Electron processes plus one + # seeding run. timeout-minutes: 30 # Warn-only for the first two weeks of plan item B3: a failure is # visible on the run but does not fail the workflow. diff --git a/apps/electron-backend-e2e/src/performance/open-source-journey-record.ts b/apps/electron-backend-e2e/src/performance/open-source-journey-record.ts index 8880248a5..b2538091e 100644 --- a/apps/electron-backend-e2e/src/performance/open-source-journey-record.ts +++ b/apps/electron-backend-e2e/src/performance/open-source-journey-record.ts @@ -32,7 +32,7 @@ export const OPEN_SOURCE_JOURNEY_UNAVAILABLE_COUNTERS: Readonly< Record > = Object.freeze({ 'main.sqlStatementsToFirstPage': - 'SQL statements are only visible as worker stdout trace lines, which are forwarded asynchronously; plan item A2 adds a countable channel.', + 'The main.sqlStatements running total is read from the test process through the journey gate, so it cannot be sampled at the click or at the first-page batch, and the worker count is ordered against worker responses rather than the renderer. A click-to-settled count is a follow-up.', 'renderer.cdTicksToFirstPage': 'The electron-performance build optimizes scripts (ngDevMode=false), so Angular does not publish window.ng and ɵsetProfiler is unavailable.', }); diff --git a/docs/architecture/performance-journeys.md b/docs/architecture/performance-journeys.md index 6b394a7f0..c6b6fc15e 100644 --- a/docs/architecture/performance-journeys.md +++ b/docs/architecture/performance-journeys.md @@ -309,8 +309,15 @@ strings and stream paths carry credentials and are never stored. | `renderer.longTasks` | `longtask` entries over 50 ms that started at or after the click (buffered entries from J1 are dropped) and before the cutoff. Evidence until it is shown to be stable on the CI runner, as for J1. | | `main.mockHttpRequestsToSettled` | Requests the proxy received from the click until, after the terminal batch, no new request had arrived for 1 s and none was in flight (a response slower than that, and what it triggers, stays inside the window). The window starts at the renderer's click stamp, the same boundary as every other J2 counter, not when Playwright began its actionability checks; the proxy stamps requests with the test process's wall clock, and both processes read the same host clock. Bounding by the terminal would compare the test process's clock with the renderer's, so the count up to the terminal epoch is evidence only (`evidence.httpRequestsToFirstPage`); `evidence.httpRequestsByRoute` names the requests. | -`renderer.cdTicksToFirstPage` and `main.sqlStatementsToFirstPage` are listed -under `unavailable` for the same reasons as their J1 counterparts. +Two counters are listed under `unavailable`. `renderer.cdTicksToFirstPage` +is missing for the same reason as its J1 counterpart. +`main.sqlStatementsToFirstPage` is missing because the running +`main.sqlStatements` total that J1 freezes at `ready-to-show` can only be +read from the test process through the journey gate. It therefore cannot be +sampled at the click or at the first-page batch, and the worker's count is +ordered against its responses, not against the renderer. Reading it after +the app has settled before the click and again after the first page would +give a click-to-settled count; that is left to a follow-up. ### Wall-clock