Skip to content

Stability & correctness follow-ups from long-term macOS testing — fix registry #170

Description

@AnyCPU

Since the macOS glitches report (#101, now closed — thanks for the fast turnaround on that batch), I've kept using and stress-testing gogpu/ui in a real application, mostly on Intel + Retina macOS. That surfaced another round of issues — memory leaks, rendering staleness, and event-routing bugs — spanning both this repo and its dependencies (gogpu, gg, signals).

I've root-caused them, and for most of them I have working, tested fixes that have been running in my tree for a while. Rather than one giant report, I'm filing them as focused issues — each with reproduction, root cause, and a patch attached — a few at a time so it stays reviewable. This issue is the index; I'll keep the list below current as reports go up and as they get resolved.

Themes

  • Widget lifecycle leaks — overlays and virtualized containers (ListView/GridView) skip mount/unmount steps, leaking signal subscriptions, goroutines, and cached GPU scenes.
  • Rendering staleness — stale textures and damage-tracking edge cases: ghost rows on fast scroll, stale styling after selection, boundary-texture churn on resize.
  • HiDPI / multi-display — device scale not re-synced when a window moves between displays of different scale.
  • macOS event routing — phantom pointer events with screen coordinates misread as window coordinates; window-title mis-rendering on Intel Macs due to an ABI-gated AppKit enum.
  • Threading contract — a documented goroutine-safe API whose call path writes UI-thread state without synchronization (with a trace this time, not just a symptom).

Already shipped

One report from this round has already landed upstream: gogpu/gg#418 (composite-glyph fan-out/cycle hardening + a variable-font guard), shipped in gg v0.50.4 — thanks for the quick adoption.

Reports

(checked = resolved upstream; the list grows as reports are filed)

gogpu/gogpu

gogpu/ui

coregx/signals

gogpu/gg

gogpu/wgpu

Notes

  • Some things I investigated turned out to be already fixed on main (e.g. the collapsible ghost-content issue from Gallary example: closing the Data Display Section does not cully clear the content #147 — confirmed fixed by the boundary-culling change) — those aren't re-filed.
  • One suspected defect from the same testing round (ListView rows rendering ~400px above their
    slot, seen on v0.1.27) was re-checked against current main before filing: a headless
    reproduction harness (offscreen renderer, screen-origin assertions across 7 configurations
    including Retina scale and panel collapse) measures 0px stamping error — it appears fixed by
    the render-pipeline work since then, so no issue is filed for it.
  • Everything below the fold in each report is self-contained: environment, repro, root cause with file/line citations against the current release, and a git apply-able patch. Happy to adjust format if something else is easier to work with.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions