refactor(vulkan): compute the redrawn area once per frame
- commit
- dba2270cad4fd38f675fc1e3964e132319c806a5
- author
- brice · · 2026-10-13 17:58 UTC
- parent
- a41f7cb
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
1 file · +3 -7
M internal/adapters/vulkan/frame.go +3 -7
| @@ -186,7 +186,9 @@ func (r *Renderer) Render(s ports.Scene, contents map[ports.WindowID]ports.Surfa | |||
| 186 | 186 | dmg.finish() | |
| 187 | 187 | r.dropPools() | |
| 188 | 188 | partial := !dmg.all() | |
| 189 | + | redrawn := sw * sh | |
| 189 | 190 | if partial { | |
| 191 | + | redrawn = dmg.area.Dx() * dmg.area.Dy() | |
| 190 | 192 | // The pass keeps the image: repaint the background under the | |
| 191 | 193 | // region, then everything clipped to it. | |
| 192 | 194 | // Keep the background first without allocating a second draw slice. | |
| @@ -195,15 +197,9 @@ func (r *Renderer) Render(s ports.Scene, contents map[ports.WindowID]ports.Surfa | |||
| 195 | 197 | ds[0] = r.fillDraw(dmg.area, parseColor(s.Background)) | |
| 196 | 198 | ds = dmg.clip(ds) | |
| 197 | 199 | r.scratchDraws = ds | |
| 198 | - | r.redrawn += dmg.area.Dx() * dmg.area.Dy() | |
| 199 | - | } else { | |
| 200 | - | r.redrawn += sw * sh | |
| 201 | 200 | } | |
| 201 | + | r.redrawn += redrawn | |
| 202 | 202 | if r.traceDamage { | |
| 203 | - | redrawn := sw * sh | |
| 204 | - | if partial { | |
| 205 | - | redrawn = dmg.area.Dx() * dmg.area.Dy() | |
| 206 | - | } | |
| 207 | 203 | r.log.Debug().Int("redrawn", redrawn).Int("draws", len(ds)).Bool("partial", partial).Msg("frame damage") | |
| 208 | 204 | } | |
| 209 | 205 | r.orient(ds, s.Transform) | |
| @@ -186,7 +186,9 @@ func (r *Renderer) Render(s ports.Scene, contents map[ports.WindowID]ports.Surfa | |||||
| 186 | dmg.finish() | 186 | dmg.finish() | ||
| 187 | r.dropPools() | 187 | r.dropPools() | ||
| 188 | partial := !dmg.all() | 188 | partial := !dmg.all() | ||
| 189 | + | redrawn := sw * sh | |||
| 189 | if partial { | 190 | if partial { | ||
| 191 | + | redrawn = dmg.area.Dx() * dmg.area.Dy() | |||
| 190 | // The pass keeps the image: repaint the background under the | 192 | // The pass keeps the image: repaint the background under the | ||
| 191 | // region, then everything clipped to it. | 193 | // region, then everything clipped to it. | ||
| 192 | // Keep the background first without allocating a second draw slice. | 194 | // Keep the background first without allocating a second draw slice. | ||
| @@ -195,15 +197,9 @@ func (r *Renderer) Render(s ports.Scene, contents map[ports.WindowID]ports.Surfa | |||||
| 195 | ds[0] = r.fillDraw(dmg.area, parseColor(s.Background)) | 197 | ds[0] = r.fillDraw(dmg.area, parseColor(s.Background)) | ||
| 196 | ds = dmg.clip(ds) | 198 | ds = dmg.clip(ds) | ||
| 197 | r.scratchDraws = ds | 199 | r.scratchDraws = ds | ||
| 198 | - | r.redrawn += dmg.area.Dx() * dmg.area.Dy() | |||
| 199 | - | } else { | |||
| 200 | - | r.redrawn += sw * sh | |||
| 201 | } | 200 | } | ||
| 201 | + | r.redrawn += redrawn | |||
| 202 | if r.traceDamage { | 202 | if r.traceDamage { | ||
| 203 | - | redrawn := sw * sh | |||
| 204 | - | if partial { | |||
| 205 | - | redrawn = dmg.area.Dx() * dmg.area.Dy() | |||
| 206 | - | } | |||
| 207 | r.log.Debug().Int("redrawn", redrawn).Int("draws", len(ds)).Bool("partial", partial).Msg("frame damage") | 203 | r.log.Debug().Int("redrawn", redrawn).Int("draws", len(ds)).Bool("partial", partial).Msg("frame damage") | ||
| 208 | } | 204 | } | ||
| 209 | r.orient(ds, s.Transform) | 205 | r.orient(ds, s.Transform) | ||