iris: List::fling with Android's spline physics, and fix the drag-slop scroll jitter
Adds VelocityTracker and a port of AOSP SplineOverScroller's fling curve (FlingCalculator, cited at the definition) to iris::sense, and wires List::fling/is_scrolling/cancel_fling/tick_fling through Selection::drag's release path -- a pan's release now decelerates instead of stopping dead on the finger lifting, matching IRIS_TODO.md's "swiping has no momentum" ask. Clamped at the loaded content's start/end and cancelled by the next touch-down. Also fixes the scroll jitter DragArbiter's slop release caused: crossing DRAG_SLOP applied the whole pre-threshold drag (measured from press_start) in one step, since nothing pans while a gesture might still resolve to a selection. Now only the excess past DRAG_SLOP is applied on that frame, the same way Android's own touch handling consumes touch slop rather than replaying it. Root-caused by reading DragArbiter's state machine and covered by new unit tests (fling distance against the closed-form spline result within 1%, cancel-on-touch, start/end clamp, the slop-crossing regression); no emulator was used this pass, so an on-device trace/feel-check is still open, and Benchmark v2's four-phase bench_client.rs spec was not attempted. docs/IRIS.md, docs/IRIS_TODO.md and docs/RUST.md's P0 box record what's done and what's left. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
560a74caf8
commit
f06ee259b4
6 files changed
+814
-26
No files matched your search
@@ -4438,6 +4438,26 @@ device.
|
||||
apk/release/iris-bench-arm64.apk`; that repo's own README gained a
|
||||
dated entry. Still not confirmed on Iris's actual phone.
|
||||
|
||||
**Fling and jitter, 2026-09-06.** The two `IRIS_TODO.md` "From the
|
||||
phone" items this box's own text names as follow-ups are fixed --
|
||||
`List::fling`/`VelocityTracker`/`FlingCalculator` (IRIS.md's
|
||||
2026-09-06 entry) and the `DragArbiter` slop-release jump (fixed by
|
||||
applying only the excess past `DRAG_SLOP` on the crossing frame,
|
||||
not the whole pre-threshold drag) -- both wired through
|
||||
`Selection::drag`'s release path, both covered by new unit tests in
|
||||
`iris/src/sense.rs` and `iris/src/widget/list.rs`. **Root-caused by
|
||||
reading `DragArbiter::update` and testing it directly, not by an
|
||||
emulator trace** -- this pass did not open an emulator, so the
|
||||
"trace the list's offset per frame" verification this box's own
|
||||
todo asked for is still open, as is a feel-check of the fling on
|
||||
real touch input. **Benchmark v2's four-phase spec (fling/stream/
|
||||
type/keyboard) in `bench_client.rs` was not attempted this pass** --
|
||||
wiring a real IME show/hide and refresh-rate read through
|
||||
`bench_jni.rs`, and `FrameReport`'s per-phase accounting, is real
|
||||
scope on its own and was left rather than shipped half-verified;
|
||||
the Compose half above is already done and is the reference shape
|
||||
for whoever picks this up. No redelivery this pass.
|
||||
|
||||
- [ ] **P1 — session screen parity.** History paging backward (with the
|
||||
page-boundary healing `client-core` does not have yet, below),
|
||||
`TranscriptSource`-backed cache/server stitching, jump-to-latest,
|
||||
|
||||
Reference in new issue
Block a user