Track ticks since draw start per window_surface, instead of per DC as is
currently the case. This change helps reduce visual glitches caused by
badly timed flushes when drawing to the same window_surface from
multiple DCs, e.g., child windows (see first commit), or in some special
scenarios when the window_surface is updated (see second commit).
(Much) more information about this issue and the rationale for the changes
can be found in the commit messages.
Note that since this is an inherently timing related issue, the visual glitches
depend on the application specific draw patterns, drawing speed (and thus
processor performance and load) etc.
Here is a capture which exhibits the issue with the current implementation:
[resizing-regedit-per-dc-ticks.mkv](/uploads/d7d30d009cc4db1337cbc3266df5ae17/resizing-regedit-per-dc-ticks.mkv)
And here is a capture of the same scenario with the proposed changes applied, which shows the improvement:
[resizing-regedit-per-surface-ticks.mkv](/uploads/6f878568862f5fb5157567341e4e452f/resizing-regedit-per-surface-ticks.mkv)
--
v3: win32u: Reset draw_start_ticks for new window_surface.
gdi32: Track ticks since draw start per window_surface.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2226