Link test: download series (bulk sampled, warm bursts, paced) and burst-vs-idle; car results
CI / Analyze & Test (push) Successful in 10s
CI / Debug APK (push) Successful in 15s

Orin -> tablet over NCM: paced streams up to 4 MB/s are clean; unpaced
bursts and bulk hit multi-second holds that inflate the RTO to 10-16 s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz
This commit is contained in:
2026-10-11 16:33:55 +09:00
parent 66eab916bc
commit 8f4e34d956
6 changed files with 330 additions and 12 deletions
+9 -3
View File
@@ -18,14 +18,20 @@ Future<void> main() async {
await usb.bindFor(Uri.parse(defaultUrl));
final boundary = Boundary(defaultUrl)..start();
final linkTest = LinkTest(usb);
// Development hook: `am start ... --es linktest <label>[@<host>]` runs the test,
// on the gateway's host unless one is given.
// Development hook: `am start ... --es linktest [dl:|bi:]<label>[@<host>]` runs the test
// (`dl:` the download series, `bi:` burst latency against idle gaps), on the gateway's host unless one is given.
Future<void> runLinkTest(String request) async {
final mode = request.startsWith('dl:') || request.startsWith('bi:') ? request.substring(0, 2) : '';
if (mode.isNotEmpty) request = request.substring(3);
final at = request.indexOf('@');
final label = at < 0 ? request : request.substring(0, at);
final host = at < 0 ? Uri.parse(boundary.url).host : request.substring(at + 1);
navigatorKey.currentState?.push(MaterialPageRoute<void>(builder: (_) => linkTestPage(boundary, linkTest, usb)));
await linkTest.run(host, label);
await switch (mode) {
'dl' => linkTest.runDownload(host, label),
'bi' => linkTest.runBurstIdle(host, label),
_ => linkTest.run(host, label),
};
await usb.bindFor(Uri.parse(boundary.url));
}