Android perf: fix fader stutter (appendLog), drawText feedback widget, bisect docs

Bisect session with per-suspect kill switches (see BISECT_LOG.md):
- appendLog was the confirmed stutter culprit — ran per-message (~110/sec)
  on the main thread even with the log panel hidden; A/B verified. Disabled
  via DEBUG_DISABLE_APPEND_LOG; shippable visible-only fix still TODO.
- Per-message Log.d also disabled (freebie, no felt difference).
- Glow, gradient fill, network flash, feedback setText all exonerated and
  restored; switches left in place at false.
- FocusFeedbackWidgetView rewritten: TextView -> bare View + canvas.drawText.
  60hz updates are now field-assign + invalidate, no per-update text Layout.
- ContextMenuViewLogic: explicit color-picker branch for the new view type.
- Timecode chunkiness root cause was REAPER audio buffer size (source-side
  burst cadence), documented in PERF_SESSION_2026-07-31.md; stutter bug
  report stamped RESOLVED.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Paul Lipscomb
2026-07-31 17:46:07 -05:00
parent 6f66a5db64
commit 60c8255c2d
43 changed files with 301 additions and 41 deletions
@@ -1,5 +1,13 @@
# Android Feedback Widget Stutter Bug
> **RESOLVED 2026-07-31** — two separate root causes: (1) fader stutter was
> `appendLog()` running per-message on the main thread even with the log panel
> hidden (A/B confirmed, disabled via kill switch); (2) chunky timecode was
> REAPER's audio buffer size making OSC feedback leave in bursts. Full
> write-up: `PERF_SESSION_2026-07-31.md`; run-by-run record: `BISECT_LOG.md`.
> The "custom Canvas view" hypothesis below was also acted on —
> FocusFeedbackWidgetView now draws via canvas.drawText.
## Summary
When the Android tablet app receives high-frequency network feedback updates (60hz timecode from desktop), the feedback widget AND the fader control stutter and become unresponsive. Works perfectly on iOS and desktop apps at the same 60hz update rate.