[Poort][P1] Schaal- en per-toetsaanslagtoetsen voor de paden zonder prestatiepoort, plus Windows-meting #2636

Closed
opened 2026-10-28 16:31:54 +00:00 by brenno · 0 comments
Owner

Waarom

test/large_deck_performance_test.dart bewaakt parsen, serialiseren, documentherparsen en de lokale opslag op schaal — en dat werkt: die paden zijn gemeten verwaarloosbaar. De prestatieproblemen uit de inspectie van 28-10-2026 zitten allemaal ernaast, in paden die geen poort hebben:

  • wat er per toetsaanslag gebeurt (afgeleide providers, split-runindex, AppShell-herbouw, documentsync);
  • caches met een vast plafond (klif bij >512 dia's);
  • werk dat synchroon op de UI-isolate draait (gezichtsscan, documentexport, opstarthuishouding);
  • en Windows als platform: niemand meet daar tijd tot eerste frame of invoervertraging.

Zonder poort komen deze terug zodra iemand een nieuwe afgeleide provider of cache toevoegt (de skill prestaties noemt dat risico al: "een nieuwe zware afgeleide provider moet datzelfde patroon volgen").

Voorstel

  1. Schaaltoetsen in de stijl van de bestaande (verhoudingen van gelijke werklast, minimum van meerdere runs — geen absolute tijden):
    • markdownFromDocument 300 vs 2×150 pagina's (#2621);
    • split-runindex na één diawijziging: aantal lidmetingen = 1 (#2620);
    • memoizedDeckScan op 1000 dia's, tweede aanroep (#2622).
  2. "Per toetsaanslag"-budgettoets: een widgettest die een deck van 300 dia's (met reeksen, tabellen en afbeeldingen) in de echte AppShell laadt, tien updateSlide-aanroepen doet en telt: hoeveel providers herberekenen, hoeveel TextPainter.layout-aanroepen, hoeveel bestandssysteemaanroepen. Tellingen zijn machine-onafhankelijk en dus geschikt als ratchet (constante, poort én docs bijwerken, zoals bij de bestaande ratchets).
  3. Verbod op *Sync-bestands-API's in lib/widgets/ en in build-paden, met een allowlist voor de bewuste uitzonderingen (zoals de chmod-ratchet het al doet).
  4. Windows-meting in de release: de rookproef leest de logmijlpalen (#2618) en legt tijd-tot-eerste-frame vast in het release-log; een plafond pas zetten na een paar releases aan gegevens.
  5. docs/PERFORMANCE_GUIDE.md bijwerken: de sectie "Still missing" noemt export- en UI-latentie; voeg de nieuwe toetsen en de gemeten cijfers uit deze inspectie toe.

Onderdeel van de prestatie- en stabiliteitsinspectie van 28-10-2026 (EPIC #2637).

## Waarom `test/large_deck_performance_test.dart` bewaakt parsen, serialiseren, documentherparsen en de lokale opslag op schaal — en dat werkt: die paden zijn gemeten verwaarloosbaar. De prestatieproblemen uit de inspectie van 28-10-2026 zitten allemaal **ernaast**, in paden die geen poort hebben: - wat er per toetsaanslag gebeurt (afgeleide providers, split-runindex, AppShell-herbouw, documentsync); - caches met een vast plafond (klif bij >512 dia's); - werk dat synchroon op de UI-isolate draait (gezichtsscan, documentexport, opstarthuishouding); - en Windows als platform: niemand meet daar tijd tot eerste frame of invoervertraging. Zonder poort komen deze terug zodra iemand een nieuwe afgeleide provider of cache toevoegt (de skill `prestaties` noemt dat risico al: "een nieuwe zware afgeleide provider moet datzelfde patroon volgen"). ## Voorstel 1. **Schaaltoetsen** in de stijl van de bestaande (verhoudingen van gelijke werklast, minimum van meerdere runs — geen absolute tijden): - `markdownFromDocument` 300 vs 2×150 pagina's (#2621); - split-runindex na één diawijziging: aantal lidmetingen = 1 (#2620); - `memoizedDeckScan` op 1000 dia's, tweede aanroep (#2622). 2. **"Per toetsaanslag"-budgettoets**: een widgettest die een deck van 300 dia's (met reeksen, tabellen en afbeeldingen) in de echte `AppShell` laadt, tien `updateSlide`-aanroepen doet en telt: hoeveel providers herberekenen, hoeveel `TextPainter.layout`-aanroepen, hoeveel bestandssysteemaanroepen. Tellingen zijn machine-onafhankelijk en dus geschikt als ratchet (constante, poort én docs bijwerken, zoals bij de bestaande ratchets). 3. **Verbod op `*Sync`-bestands-API's in `lib/widgets/` en in build-paden**, met een allowlist voor de bewuste uitzonderingen (zoals de `chmod`-ratchet het al doet). 4. **Windows-meting in de release**: de rookproef leest de logmijlpalen (#2618) en legt tijd-tot-eerste-frame vast in het release-log; een plafond pas zetten na een paar releases aan gegevens. 5. `docs/PERFORMANCE_GUIDE.md` bijwerken: de sectie "Still missing" noemt export- en UI-latentie; voeg de nieuwe toetsen en de gemeten cijfers uit deze inspectie toe. Onderdeel van de prestatie- en stabiliteitsinspectie van 28-10-2026 (EPIC #2637).
brenno 2026-10-29 12:20:29 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#2636
No description provided.