Skip to content
This repository has been archived by the owner on Mar 13, 2023. It is now read-only.

Event Queue Repaint compression sub-optimalities #1296

Open
mgsouth opened this issue May 31, 2022 · 0 comments
Open

Event Queue Repaint compression sub-optimalities #1296

mgsouth opened this issue May 31, 2022 · 0 comments

Comments

@mgsouth
Copy link

mgsouth commented May 31, 2022

A couple of broad issues with repaint compression. Using the new drawing-benchmark demo app as reproducible base; primarily with screen recording off.

  • Screen update starvation. If the application is blasting away (tight draw-rectangle loops, draw-text, etc.) the actual updating of the pixels on the screen can stall out. Example: drawing-benchmark Rectangles, Grid size 5, ink "multiple, calc once", output recording off, xform operation anything, max transforms 16. Will run three 4-second tests. Can totally not see the output from second test, so displaying bits is frozen for at least 4 seconds. Calling FINISH-OUTPUT doesn't help.

  • Out-of-order execution. Sheet geometry changes can be applied after later drawing calls are applied to the screen. from IRC chat:

With the right settings, the right and bottom are clipped off. Only happens if choose "Xlate do/undo" or
"Scale & Xlate do/undo", and grid size 4 or 5.
This is even though the do/undo settings actually wind up as an Identity transformation before any drawing is done.
So with do/undo 4 times, the app does four sets of "translate down/left, translate up/right back to 0.0".
Looks like at least one of those sets is getting applied after the drawing happens, which causes clipping.
Could be all four sets.
(By default, the drawing pane is narrow and short enough that translating a grid of 4 or 5 down/left will clip
against viewport, then back to 0,0 leaves it truncated.)
The transformations done for "Xlate accumulative" and "Scale & Xlate accum." aren't big enough to cause
clipping with default window size.
Doesn't happen if output recording is on. Which makes sense; the final replay will refresh the clipped-off region.
Since I don't have a repaint method, no fixup happens if recording is off.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant