Files
m3te/goldens/p20_fps.png
swipelab ff88e4ab87 P20.1: FPS counter — env-gated dev overlay (M3TE_FPS), off by default
Add a small top-left FPS readout for gauging frame cost while tuning the
organic animations. Gated behind the M3TE_FPS startup env pin (read like the
other M3TE_* hooks); unset/=0 renders nothing, so default play and every
committed golden stay byte-identical.

- main.sx: g_fps_on (from M3TE_FPS) + g_fps_avg_dt, an EMA of delta_time
  (FPS_DT_SMOOTH=0.9) advanced only on the gated path; build_ui passes the
  smoothed FPS + flag into BoardView. delta_time is real wall-clock even when
  M3TE_ANIM_TIME pins the scene, so the counter stays live while frozen.
- board_view.sx: BoardView.fps_on/fps fields + render_fps_overlay — "FPS n"
  in the top-left safe-area corner (clear of notch/Dynamic Island + the HUD),
  dark grape text over a bright halo. Drawn last, only when fps_on.
- README.md: document M3TE_FPS (sim SIMCTL_CHILD_ + device devicectl env).
- goldens/p20_fps.png: FPS overlay over the resting board (M3TE_FPS=1,
  M3TE_ANIM_TIME=0); FPS digits are dynamic, rest pinned == p6_idle_t0 region.

Verified: ios-sim build + 22 logic tests green. Unset capture's board+HUD
region is byte-identical to goldens/p6_idle_t0.png; the only ON-vs-OFF delta
is the top-left FPS text box.
2026-06-06 11:46:51 +03:00

3.2 MiB
1206x2622px