fix(render): initialize capture frame cache once
- commit
- b901b13fb09e693b7e4d731b16884cce9fc9778d
- author
- brice · · 2026-07-13 07:40 UTC
- parent
- 1a1fa2b
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
1 file · +3 -6
M internal/usecase/daemon/render_capture.go +3 -6
| @@ -225,6 +225,9 @@ func captureRenderState(sess *session, ac *attachedClient, bars barState, overla | |||
| 225 | 225 | } | |
| 226 | 226 | state.panes = scratch.panes[:0] | |
| 227 | 227 | state.tabGeneration = uint64(len(layoutSnap.fingerprint)) | |
| 228 | + | if ac.captureFrames == nil { | |
| 229 | + | ac.captureFrames = make(map[*pane]capturedPaneRenderState) | |
| 230 | + | } | |
| 228 | 231 | for _, placement := range layoutSnap.placements { | |
| 229 | 232 | p := tb.panes[placement.ID] | |
| 230 | 233 | if p == nil { | |
| @@ -235,9 +238,6 @@ func captureRenderState(sess *session, ac *attachedClient, bars barState, overla | |||
| 235 | 238 | visible = domain.Rect{} | |
| 236 | 239 | } | |
| 237 | 240 | p.mu.Lock() | |
| 238 | - | if ac.captureFrames == nil { | |
| 239 | - | ac.captureFrames = make(map[*pane]capturedPaneRenderState) | |
| 240 | - | } | |
| 241 | 241 | captured := capturePaneRenderStateLockedInto(p, visible, mode, ac.captureFrames[p]) | |
| 242 | 242 | if mode == damageCaptureConsume { | |
| 243 | 243 | state.receipts = append(state.receipts, damageReceipt{pane: p, generation: captured.damageGeneration}) | |
| @@ -260,9 +260,6 @@ func captureRenderState(sess *session, ac *attachedClient, bars barState, overla | |||
| 260 | 260 | p := tb.floating.pane | |
| 261 | 261 | p.mu.Lock() | |
| 262 | 262 | geometry := p.committedFloatingGeometryLocked(calculateContentFloatingGeometry(domain.Size{Cols: layoutSnap.area.Width, Rows: layoutSnap.area.Height}, floatingCfg)) | |
| 263 | - | if ac.captureFrames == nil { | |
| 264 | - | ac.captureFrames = make(map[*pane]capturedPaneRenderState) | |
| 265 | - | } | |
| 266 | 263 | captured := capturePaneRenderStateLockedInto(p, geometry.Inner, mode, ac.captureFrames[p]) | |
| 267 | 264 | if mode == damageCaptureConsume { | |
| 268 | 265 | seen := false | |
| @@ -225,6 +225,9 @@ func captureRenderState(sess *session, ac *attachedClient, bars barState, overla | |||||
| 225 | } | 225 | } | ||
| 226 | state.panes = scratch.panes[:0] | 226 | state.panes = scratch.panes[:0] | ||
| 227 | state.tabGeneration = uint64(len(layoutSnap.fingerprint)) | 227 | state.tabGeneration = uint64(len(layoutSnap.fingerprint)) | ||
| 228 | + | if ac.captureFrames == nil { | |||
| 229 | + | ac.captureFrames = make(map[*pane]capturedPaneRenderState) | |||
| 230 | + | } | |||
| 228 | for _, placement := range layoutSnap.placements { | 231 | for _, placement := range layoutSnap.placements { | ||
| 229 | p := tb.panes[placement.ID] | 232 | p := tb.panes[placement.ID] | ||
| 230 | if p == nil { | 233 | if p == nil { | ||
| @@ -235,9 +238,6 @@ func captureRenderState(sess *session, ac *attachedClient, bars barState, overla | |||||
| 235 | visible = domain.Rect{} | 238 | visible = domain.Rect{} | ||
| 236 | } | 239 | } | ||
| 237 | p.mu.Lock() | 240 | p.mu.Lock() | ||
| 238 | - | if ac.captureFrames == nil { | |||
| 239 | - | ac.captureFrames = make(map[*pane]capturedPaneRenderState) | |||
| 240 | - | } | |||
| 241 | captured := capturePaneRenderStateLockedInto(p, visible, mode, ac.captureFrames[p]) | 241 | captured := capturePaneRenderStateLockedInto(p, visible, mode, ac.captureFrames[p]) | ||
| 242 | if mode == damageCaptureConsume { | 242 | if mode == damageCaptureConsume { | ||
| 243 | state.receipts = append(state.receipts, damageReceipt{pane: p, generation: captured.damageGeneration}) | 243 | state.receipts = append(state.receipts, damageReceipt{pane: p, generation: captured.damageGeneration}) | ||
| @@ -260,9 +260,6 @@ func captureRenderState(sess *session, ac *attachedClient, bars barState, overla | |||||
| 260 | p := tb.floating.pane | 260 | p := tb.floating.pane | ||
| 261 | p.mu.Lock() | 261 | p.mu.Lock() | ||
| 262 | geometry := p.committedFloatingGeometryLocked(calculateContentFloatingGeometry(domain.Size{Cols: layoutSnap.area.Width, Rows: layoutSnap.area.Height}, floatingCfg)) | 262 | geometry := p.committedFloatingGeometryLocked(calculateContentFloatingGeometry(domain.Size{Cols: layoutSnap.area.Width, Rows: layoutSnap.area.Height}, floatingCfg)) | ||
| 263 | - | if ac.captureFrames == nil { | |||
| 264 | - | ac.captureFrames = make(map[*pane]capturedPaneRenderState) | |||
| 265 | - | } | |||
| 266 | captured := capturePaneRenderStateLockedInto(p, geometry.Inner, mode, ac.captureFrames[p]) | 263 | captured := capturePaneRenderStateLockedInto(p, geometry.Inner, mode, ac.captureFrames[p]) | ||
| 267 | if mode == damageCaptureConsume { | 264 | if mode == damageCaptureConsume { | ||
| 268 | seen := false | 265 | seen := false | ||