android: the handoff — the pending rounds, the pipeline, and what is unverified
Everything written this session that has not been through the device: rounds 43 to 48 (each patch adversarially verified, 43's transient-notice expectation fixed), a partial round 49, the pipeline scripts, the Android Auto design and the icon comparison mock. Also the two harness changes that were never A/B'd — adaptive waits, which may only shorten a declared wait and never lengthen it, and a ship that runs the mock walk and the deploy at the same time. The A/B and its 255-step baseline are in handoff/tools; main stays at what the phone has actually walked.
This commit is contained in:
1 parent
867fd42972
commit
9f0601027c
400 files changed
+26401
-3
No files matched your search
@@ -0,0 +1,54 @@
|
||||
android: the boot chain goes out in one round, and a census that holds it there
|
||||
|
||||
Thirty rounds of onMount had never been read end to end, and read end to end
|
||||
it was a queue: two dozen commands with a critical path ten deep, because
|
||||
Tauri's `listen` is an invoke like any other. loadLibrary asked for five
|
||||
independent SQLite reads one behind the other, bindSlsk registered eight
|
||||
listeners one behind the other, and watchLibrary and the player's bindEvents
|
||||
did two each. None of them depended on anything before them. They go out in
|
||||
one round now — the same commands, critical path 10 to 3, and ten of them
|
||||
used to leave in the shell's own first turn where twenty-three do now — and
|
||||
in a rig that runs the real store modules with the bridge instrumented,
|
||||
lib.loaded lands at 53 ms instead of 85 at a 6 ms round trip and 62 instead
|
||||
of 148 at 20 ms. Those are a desktop rig's milliseconds with the round trip
|
||||
swept rather than measured; the phone's own numbers are unproven until the
|
||||
walk prints bootMs and bootLibMs.
|
||||
|
||||
The behaviour is meant to be identical. loadLibrary's only movable part was
|
||||
lib.error, which has two writers and used to be decided by the order they were
|
||||
awaited in; the two messages are now carried out of the round and applied in
|
||||
that same order, so a failing library still shows the library's message. Every
|
||||
combination of which of the five reads fails, over six latency shapes, comes
|
||||
out identical to the old code. bindSlsk still does not return until every
|
||||
handler is up, so connectStored cannot let a fast connected state land with
|
||||
nobody listening, and bindEvents still hands back the transport's unlisten and
|
||||
still rejects only when the transport is the one that failed.
|
||||
|
||||
src/lib/boot.js is the project's first launch instrument — one counter every
|
||||
invoke and every listen passes, sealed at the first frame the shell paints and
|
||||
never re-opened, so a probe landing a second and a half later still reads the
|
||||
launch. perf.mjs measures frames; nothing measured the launch. The mock walk's
|
||||
Home step now holds a budget against it and both walks print bootCalls,
|
||||
bootSync, bootMs and bootLibMs on every step. bootSync is the clause with no
|
||||
clock in it: a call that waits on the one before it can only issue its first
|
||||
in the shell's own turn, so a chain put back in a queue falls under the floor
|
||||
whatever the machine is doing. A bootCalls of -2 means __ss.boot is not there
|
||||
at all, which is the census itself being broken rather than the app.
|
||||
|
||||
One import line goes with it: Sheet.svelte's `import * as api`, the only one
|
||||
of the ten dead imports this round turned up whose reason is the bundle at
|
||||
all. Rollup already drops an unreferenced NAMED import, so a dead name on an
|
||||
import line is hygiene rather than bytes; a namespace import is the one shape
|
||||
tree-shaking cannot see through, and this one was dead. It frees nothing on
|
||||
its own — twenty-nine other files in the phone's graph hold the same module
|
||||
the same way, so api.js is pinned into the chunk whatever Sheet.svelte does —
|
||||
but it is the only one of the ten that belongs to a round about weight. The
|
||||
nine that are drift go out with the sweep in the round after this one.
|
||||
|
||||
Two things were looked at and left alone, both written down in ANDROID.md
|
||||
rather than half-done. Home's per-artist catalog walk is the deepest chain in
|
||||
the app, and that serial walk is the Deezer and MusicBrainz pacing, not an
|
||||
oversight. And the follows really are read twice at launch, but the obvious
|
||||
guard does not work: Home's effect calls loadHome with force the first time
|
||||
they land, so the guard would never fire. One small local read, left for a
|
||||
round that can do it properly.
|
||||
Reference in new issue
Block a user