Slint's android-activity backend wakes the main loop from a dedicated "slint vsync" Choreographer thread while any animation is active (i-slint-backend-android-activity/vsync.rs). Android schedules that thread at nice +10 (lowest on device), while our 4 turbojpeg workers inherited the UI thread's nice -10. Under CPU bursts the +10 waker starves and the main loop's next wakeup lands 3-4 frames late: 25-33 ms of pure wake latency at 120 Hz, with zero cost in our tick (d=7-34 us) — exactly the phone stall signature (measured: 28-39 ms gaps, catch-up events). - prio module: setpriority FFI (self + by-tid), raise_slint_vsync() - thumb workers + dispatcher: nice +2 at spawn (ahead of background apps, behind the UI's -10) - android_main: prio-fix thread raises "slint vsync" to nice 0 with a readback log - verified on emulator: thumb-* hold nice 2, slint vsync holds 0 while foreground (Android re-nices backgrounded processes — expected) - emulator scroll cadence unchanged (llvmpipe rasterization ceiling, not a priority issue) — phone is the acceptance target, A/B test planned for when it is back online Also: drop unused android_logger dependency (nblog replaced it). |
||
|---|---|---|
| scripts | ||
| src | ||
| .gitignore | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| HANDOFF.md | ||
| LICENSE | ||
| README.md | ||
gallery
A high-performance image gallery for Android (primary), Linux and macOS — Rust + Slint 1.18.
Status: M1 (metadata scan + DB) done. See HANDOFF.md — the development hand-off with the full plan: architecture, thumbnail pipeline, milestones M1–M7, Slint gotchas, permission flow, and performance targets. Next: M2 (thumbnail engine).
Build
./scripts/build.sh debug # debug x86_64 APK + install on emulator
./scripts/build.sh # release x86_64 (emulator)
./scripts/build.sh aarch64 # release aarch64 (device)
cargo run # desktop (Linux needs libfontconfig1 + pkg-config)
Requires: Rust (rustup), cargo-apk2, Android SDK + NDK 27 (see HANDOFF.md §3
for exact paths/env).
License
GPL-3.0 (see LICENSE). Built on Slint, used under the Slint royalty-free license for proprietary apps (see HANDOFF.md §10.4).