Tracking issue for non-blocking follow-ups surfaced while reviewing the iOS perf batch (#630 harness, #632 get text, #633 text entry, #634 pinch). None block those merges; collecting them here so they don't get lost.
get text — ambiguous-selector slowness (#632)
get text on an ambiguous selector can take ~13s to return AMBIGUOUS_MATCH, even though find disambiguates the same selector in ~1s. Every iOS Settings cell is a label/button/text triplet, so this is easy to hit.
get text sets disambiguateAmbiguous, but the runner-side query still rejects first. Worth aligning the get text path with find's disambiguation.
Swift-side readTextAt for editable reads (#632)
Harness gotchas that look like real bugs (#630)
Found while building the perf harness; each is currently worked around rather than fixed:
- Session lock rejects matching selectors. Passing
--session sets lockPolicy='reject' (src/utils/session-binding.ts), so device selectors are rejected on every command except the session-creating open/apps/devices — including boot. Is rejecting selectors that match the already-locked device intended? The harness has to run boot sessionless to work around it.
record instant start→stop fails to finalize. An immediate record start → record stop produces an invalid video (simctl recordVideo exited with code 1 on iOS; "not a playable MP4" on Android). Needs >1s of footage bracketed between start/stop. Should at least fail with a clear error rather than emitting a broken file.
iOS slow paths from the perf findings (#630)
The nightly harness flagged these iOS outliers vs Android (numbers inflated by co-resident sims, but the relative gaps are the signal). #632/#633 addressed get text / fill / type; remaining:
- iOS
scroll markedly slower than Android (~8s vs ~2.5s in the sampled run).
- iOS
is visible slower than Android.
- iOS root
snapshot -i (~2.7s) is ~10× the deep snapshot -i (~190ms) — counterintuitive; worth investigating.
Let the nightly perf-nightly.yml trends confirm these on clean runners before digging in.
#629 — scroll/fling pinch (partial, via #634)
Tracking issue for non-blocking follow-ups surfaced while reviewing the iOS perf batch (#630 harness, #632
get text, #633 text entry, #634 pinch). None block those merges; collecting them here so they don't get lost.get text— ambiguous-selector slowness (#632)get texton an ambiguous selector can take ~13s to returnAMBIGUOUS_MATCH, even thoughfinddisambiguates the same selector in ~1s. Every iOS Settings cell is a label/button/text triplet, so this is easy to hit.get textsetsdisambiguateAmbiguous, but the runner-side query still rejects first. Worth aligning theget textpath withfind's disambiguation.Swift-side
readTextAtfor editable reads (#632)readTextAt(), which usesapp.descendants(matching: .any).allElementsBoundByIndex— the full-tree snapshot that made the non-editable path ~20× slower.allElementsBoundByIndexinreadTextAt, mirroring the typed-query approach perf+fix(ios): faster text entry (readiness + typed-query field resolve) + fix fill mis-navigation #633 used for field resolution) would speed up the editable case and other coordinate reads. Deferred from perf(ios): make get text ~80x faster for non-editable elements #632 to keep that change small and rebuild-free.Harness gotchas that look like real bugs (#630)
Found while building the perf harness; each is currently worked around rather than fixed:
--sessionsetslockPolicy='reject'(src/utils/session-binding.ts), so device selectors are rejected on every command except the session-creatingopen/apps/devices— includingboot. Is rejecting selectors that match the already-locked device intended? The harness has to runbootsessionless to work around it.recordinstant start→stop fails to finalize. An immediaterecord start→record stopproduces an invalid video (simctl recordVideo exited with code 1on iOS; "not a playable MP4" on Android). Needs >1s of footage bracketed between start/stop. Should at least fail with a clear error rather than emitting a broken file.iOS slow paths from the perf findings (#630)
The nightly harness flagged these iOS outliers vs Android (numbers inflated by co-resident sims, but the relative gaps are the signal). #632/#633 addressed
get text/fill/type; remaining:scrollmarkedly slower than Android (~8s vs ~2.5s in the sampled run).is visibleslower than Android.snapshot -i(~2.7s) is ~10× the deepsnapshot -i(~190ms) — counterintuitive; worth investigating.Let the nightly
perf-nightly.ymltrends confirm these on clean runners before digging in.#629 — scroll/fling pinch (partial, via #634)
examples/test-app(scroll/fling/pan register at baseline), so no change was made there. Keep Porting to Dart and benchmarking a bit #629 open / revisit if it resurfaces.