[Prestaties][P1] Foto's worden in preview, presentator en beamer op bronresolutie (tot 4096 px) gedecodeerd #2625
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#2625
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptoom
Presentaties met veel (telefoon)foto's gebruiken veel geheugen en haperen bij het wisselen van dia, vooral met presentator- en beamervenster tegelijk open. Op laptops met gedeeld videogeheugen (veel Windows 10-machines) valt dat het eerst op.
Oorzaak
cappedFileImage(lib/utils/image_limits.dart:195) decodeert "at native resolution withinkMaxImageDecodeDimension" — tot 4096 px per as, ongeacht hoe groot de afbeelding op het scherm staat. Alleen de diastrook en het overzichtsraster zetten een lagere grens (decodeMaxEdge: 512,slide_thumbnail.dart:466,preview_panel_overview_cards.dart:413). De preview, de presentator (huidige én volgende dia), de schermvullende weergave en het beamervenster decoderen op bronresolutie.Rekenvoorbeeld: een 24 MP-foto (6000×4000) wordt 4096×2731 × 4 bytes ≈ 45 MB per oppervlak. Het beamervenster is een aparte Flutter-engine met een eigen beeldcache, dus die decodeert opnieuw. De standaard
imageCacheis 100 MB per engine: twee of drie van zulke foto's verdringen elkaar, en bij elke diawissel wordt opnieuw van schijf gelezen en gedecodeerd.Voorgestelde oplossing
LayoutBuilder-breedte ×devicePixelRatio, naar boven afgerond op een vaste trede (1024 / 2048 / 4096) zodat de cache-sleutels stabiel blijven. Het mechanisme bestaat al (SlidePreviewScope.decodeMaxEdge); het wordt nu alleen door de strook gebruikt.slide_rasterizer.dart), dus daar volstaat de trede 2048 ook — scheelt bij grote fotodecks fors in exportgeheugen en -tijd.imageCache.maximumSizeBytesper engine bewust te kiezen (nu de Flutter-standaard), op basis van een meting.Wat overeind moet blijven
Scherpe weergave op 4K/Retina in schermvullende presentatie (de trede volgt de echte pixeldichtheid); geanimeerde GIF's blijven animeren (de huidige reden voor "native resolution").
Toets
Widgettest: preview op 800 logische px bij DPR 2 vraagt een decode ≤2048 px aan (assert op de
TargetImageSizevan een nep-codec); presentatie op 1920 px bij DPR 1 → ≤2048.Onderdeel van de prestatie- en stabiliteitsinspectie van 28-10-2026 (EPIC #2637).
Opgepakt. Tak: fix/prestatie-2635-2621-2622-2625. Verwachte reikwijdte: decodegrens per oppervlak via SlidePreviewScope.decodeMaxEdge (preview, presentator, beamer, export). imageCache.maximumSizeBytes blijft buiten deze tak.