Files
mixeme 646bfc734d P6.3: re-measure with GOSENTRY_TIMING instrumentation; correct figures
Warm-run average (runs 2-5 of 5) via env-gated phase timers in run.go:
  after Fyne app + window + tray  193 ms  (was 285 ms on Fyne 2.6.3)
  after newMainView               249 ms
  after SetContent                252 ms
  after w.Show() [TOTAL]         ~414 ms  (was ~644 ms, -230 ms / -36%)

Instrumentation reverted before this commit; source is clean.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 22:38:28 +03:00

3.8 KiB
Raw Permalink Blame History

Performance Notes

Measured performance findings for GoSentry. Each entry records the method so the numbers can be reproduced and re-checked after relevant changes.

Startup Time

Finding (2026-06-22)

After the Phase 4 refactor, cold startup time (the History "Window shown in …" metric) increased by ~290 ms. The increase is caused entirely by the Fyne v2.5.3 → v2.6.3 upgrade (task T4.1), not by the Service / domain / UI restructuring.

Method

Env-gated phase timers (GOSENTRY_TIMING) were added across the startup path (Run in src/ui/run.go and newMainView in src/ui/mainwindow.go) and the equivalent points in the pre-refactor entry point (src/gui/app.go at commit c5e0ef9, the last commit before T4.1). Both were built with the CGO / MSYS2 UCRT64 toolchain and run 5× each; the first run of each is a cold-disk outlier and is excluded. The timed span (startedw.Show()) is identical in both builds, so the comparison is fair.

Results (warm-run averages)

Phase (cumulative from start) Old (Fyne 2.5.3) New (Fyne 2.6.3) Δ
after single-instance check ~0.5 ms ~0.6 ms
after Fyne app + window + tray ~277 ms ~285 ms +8 ms
app.Open() done +3 ms +3 ms 0
views built + svc.Start() +42 ms +43 ms ~0
after SetContent ~348 ms ~353 ms +5 ms
after w.Show() (TOTAL) ~348 ms ~644 ms +~290 ms

Interpretation

  • Everything up to and including SetContent costs the same in both versions (~350 ms). The refactor-specific code — app.Open() (~3 ms) and the new app.Service plus view construction (~42 ms) — is unchanged, so the restructuring added no measurable startup cost.
  • The entire regression lands in w.Show(): ~0 ms under Fyne 2.5.3, ~290 ms under 2.6.3. Fyne 2.6 reworked main-thread marshaling (the change that introduced fyne.Do) and front-loads first-window GL/driver realization into the Show() call.
  • The cost is a fixed, one-time Fyne expense, not a leak in GoSentry code, and the upgrade cannot be reverted because fyne.Do requires Fyne ≥ 2.6.
  • The tray / autostart path (--start-in-tray) skips w.Show() until the user opens the window, so it is unaffected.

Finding (2026-06-23, Fyne 2.7.4)

Fyne upgraded from v2.6.3 → v2.7.4 as part of Phase 6 (P6.1).

Method

Same GOSENTRY_TIMING env-gated phase timers as the 2026-06-22 baseline: fmt.Fprintf(os.Stderr, ...) checkpoints added to src/ui/run.go across the startup path, built with the CGO / MSYS2 UCRT64 toolchain and run 5×; run 1 (cold disk) is excluded. Timers were reverted before committing.

Results (warm-run averages, runs 25)

Phase (cumulative from start) Fyne 2.6.3 Fyne 2.7.4 Δ
after single-instance check ~0.5 ms ~1 ms
after Fyne app + window + tray ~285 ms ~193 ms 92 ms
after newMainView ~328 ms ~249 ms 79 ms
after SetContent ~353 ms ~252 ms 101 ms
after w.Show() [TOTAL] ~644 ms ~414 ms 230 ms

Interpretation

Fyne 2.7.4 is ~230 ms faster (~36%) than Fyne 2.6.3 end-to-end. The gain is spread evenly: Fyne app + window + tray is 92 ms faster, w.Show() itself is ~161 ms faster. This confirms Fyne 2.7.0's "Massive performance increases on rendering" and driver/threading improvements are real and material for GoSentry. The upgrade is a net win: fyne.Do threading (required since 2.6) is retained and the startup cost is substantially reduced.