Documentation
¶
Overview ¶
Command androidwebviewprobe is the on-device pass for the Android android.webkit.WebView backend (#63, #76) and the #143 IME polish work: hosting in the panel window, the runOnUiThread threading discipline under churn (the pre-rebrand tracker #973 deadlock shape), geometry + native clip inside a container.Scroll, the #59 focus bridge, the bridge and navigation API, teardown — and instrumented cold-tap / keystroke-latency measurement.
The probe appends every result to the on-screen log AND to stdout — launch with `adb logcat -s Bellui` and the results stream back to the host machine. Taps are injected from the host with `adb shell input tap` aimed by the tapinfo lines (canvas coordinates, scale and inset for computing device pixels); hack/androidwebviewprobe/drive.sh automates the whole loop.
Modes, selected by a system property so no rebuild or reinstall is needed (`adb shell setprop debug.bellui.probe <mode>` before launching):
- "" (default): the scripted #76 flow. Steps 6/7 wait for a tap (adb injectable); a fresh tapinfo line is emitted after step 6 because the keyboard-driven relayout moves the Entry (#143 item 3), and step 7b drives the same handback programmatically through the FocusNativeView/Canvas.Focus seam, no finger needed.
- "coldtap": hosts a full-viewport page input (any tap inside the host area lands on the editor — no CSS coordinate math) and then idles; the launch → tap → keyboard-visible? loop is driven entirely from the host machine (#143 item 1).
- "latency": the same full-viewport input plus in-page instrumentation that reports, per keystroke, the delivery latency (event.timeStamp → JS handler) and the paint latency (input event → next rAF) over the bridge. The stall-detector spinner is NOT created in this mode — it forces a full-canvas GL redraw at frame rate, which is probe cost, not backend cost (#143 item 2).
- "latency-spinner": latency mode WITH the spinner, to price the spinner itself by comparison.