Skip to content

perf(ios): fill/type runs at ~700ms per character on simulator #1108

Description

@thymikee

Measured 2026-07-05 (main): fill @ref "alpenglow" into the Bluesky search field takes ~6.4s wall for 9 characters — ~700ms/char — while the surrounding action+observe steps are each under 1s. Typing dominates every form-filling agent step. Reproduced repeatedly; independent of --settle (settle added only ~1s of that wall).

Where to look: the iOS runner typing path in apple-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/ (fill/typeText handling, likely RunnerTests+Interaction.swift) and the TS dispatch in src/commands/ interaction runtime. XCUIElement.typeText is normally much faster than this; suspects are a per-character typing loop, focus/tap preambles repeated per chunk, or explicit inter-keystroke delays. type exposes --delay-ms (default should be 0 — verify the default actually is 0 on this path and that fill doesn't inherit a nonzero delay).

Constraints:

  • Keep fill's verification/retry semantics intact (chunk-safe input + post-fill verification; see the Android analog fillAndroid for the pattern).
  • No spawnSync — use src/utils/exec.ts helpers for any TS-side process work.
  • If the runner Swift changes, the interaction guarantee matrix rules apply (src/contracts/interaction-guarantees.ts — no semantic drift in guarantees; gesture/tap synthesis files must remain untouched).

Acceptance: a benchmarked fill of a 10+ character string on iOS simulator completes in well under 2s wall (measure before/after with the same command against a real app and paste both timings in the PR); unit + integration suites green; full gate incl. node --experimental-strip-types scripts/layering/check.ts.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions