Repository navigation
0.0.13
Fixed
-
dusk:perf_endprinted a complete-looking report over a subset of the session's frames, so an empty attribution read as "nothing was slow". Two counters in the payload measure different things and nothing compared them:liveness.advancedcomes from a post-frame callback and cannot miss a frame, whileframeSummary.frame_countcounts what Flutter'sonReportTimingsdelivered, and Flutter batches those. Measured driving a real app on Chrome, a theme toggle drew 4 frames, 2 were reported, and the 2 block maps that joined were the pre-tap frames, which were empty. The report said "2 frames, worst build 114ms" withblockAttribution: [], which is exactly what a session with no hot blocks looks like; the frames carrying the work had simply never arrived. The payload now carriescoverage: {framesDrawn, framesSummarized, complete}plus adetailstring on the incomplete case, and the CLI prints aPartial:line beside the human summary rather than leaving the caveat in the JSON. It reports rather than refuses, because a subset is still a measurement. (lib/src/extensions/ext_perf.dart,lib/src/commands/dusk_perf_end_command.dart,doc/commands/dusk-perf-end.md,doc/mcp/tool-reference.md) -
The refusal explained a frameless session with the wrong cause first. It led with a backgrounded page, which sent a reader hunting for a visibility problem that usually is not there. On Flutter web the ordinary cause is an idle app: nothing schedules a frame when nothing is dirty, so a session that opens, sleeps and closes legitimately draws zero. Both causes were observed in one investigation, the idle one twice (once at
advanced: 0on a settled page, once atadvanced: 1when a wheel gesture hit a region that does not scroll). The message now names the idle case first and keeps the hidden-page case, which is still why the threshold is 1 rather than 0. (lib/src/extensions/ext_perf.dart,doc/commands/dusk-perf-end.md)