Verify the SystemUI disable instead of trusting what pm reported #55

Merged
JMR-dev merged 1 commits from ci/api37-debug into main 2026-08-23 14:49:16 +00:00
JMR-dev commented 2026-08-23 14:49:10 +00:00 (Migrated from github.com)

Four dispatches of one configuration — API 37.0, swiftshader_indirect, SystemUI disabled — came back three green and one not. The odd one out (run 32646029143) had pm disable-user report new state: disabled-user and SystemUI start eight more times anyway (ActivityManager: Start proc N:com.android.systemui … GradientColorWallpaper), with ten more RegionSampling aborts and a surfaceflinger pid that never sat still.

Two bugs, and the second is why the first went unnoticed:

  • one disable attempt was treated as sufficient;
  • the wait after adb shell stop was not a wait — it asked service check 0.3 s later and got found from the system_server that was still exiting. Both the good and the bad run printed services back after 5 s, so a broken fix looked identical to a working one.

Now it does up to three rounds: disable → take the framework down and confirm system_server is gone → bring it back → verify the package is in pm list packages -d → require a 45 s window with zero new aborts.

Also adds measure_baseline (default true) so the 45 s pre-measurement can be skipped when the question is reliability rather than rate.

Debug workflow only, same dispatch-only trigger, same admin-merge rationale.

actionlint 1.7.12 exit 0; PyYAML parse OK; embedded helpers pass bash -n.

🤖 Generated with Claude Code

Four dispatches of one configuration — API 37.0, `swiftshader_indirect`, SystemUI disabled — came back three green and one not. The odd one out ([run 32646029143](https://github.com/JMR-dev/LibreMediaConverter/actions/runs/32646029143)) had `pm disable-user` report `new state: disabled-user` and SystemUI start eight more times anyway (`ActivityManager: Start proc N:com.android.systemui … GradientColorWallpaper`), with ten more `RegionSampling` aborts and a surfaceflinger pid that never sat still. Two bugs, and the second is why the first went unnoticed: - one disable attempt was treated as sufficient; - the wait after `adb shell stop` was not a wait — it asked `service check` 0.3 s later and got `found` from the `system_server` that was still exiting. Both the good and the bad run printed `services back after 5 s`, so a broken fix looked identical to a working one. Now it does up to three rounds: disable → take the framework down and confirm `system_server` is gone → bring it back → verify the package is in `pm list packages -d` → require a 45 s window with zero new aborts. Also adds `measure_baseline` (default true) so the 45 s pre-measurement can be skipped when the question is reliability rather than rate. Debug workflow only, same dispatch-only trigger, same admin-merge rationale. actionlint 1.7.12 exit 0; PyYAML parse OK; embedded helpers pass `bash -n`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.