Repository navigation
Fix the three nightly failures in #6160 - #6172
Conversation
dash: GameSocketTest slept out the countdown and then sent the host's jump. Two runners who never jump are both out 6.4 s into Neon Causeway, the race ends, and a later jump is dropped, so the jump had about 6 s to land; a stalled CI container missed that and the guest waited for the server's 300 s idle close (reproduced by delaying the jump). The jump is now sent during the countdown, which the server stamps for tick INPUT_DELAY, a read timeout fails a missing frame in 30 s, and the race ending first is reported by name. OnlineRaceTest now holds the stamping of a mid-race jump on a driven clock, which the socket test no longer exercises. RaceRoom.intent's doc no longer says a countdown input is dropped. The Initializr template is regenerated. flutter-bench: the JavaScript code size moved +17.5% with #6163, whose emitter reads instance fields as o.name instead of through the o[_qN] alias table (valueEscape 20% faster). The gallery's wire bytes in the same run moved +0.03%. Rebaselined with that reason. nightly-watchdog: ios-accessibility-thread joined the nightly in #6128, merged after that night's slot, and was reported as a schedule that stopped firing. A suite with no scheduled run at all whose file reached master inside the window is now listed as awaiting its first run, which keeps the issue open; one that ran before and went quiet is still a problem. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Developer Guide build artifacts are available for download from this workflow run:
Developer Guide quality checks: |
Cloudflare Preview
|
✅ Continuous Quality ReportTest & Coverage
Static Analysis
Generated automatically by the PR CI workflow. |
Flutter vs Codename OneSame application, built both ways: Flutter's AOT compile of the gallery, and the identical Dart source transpiled to Java on Codename One. Lower is better for every metric, so a ratio above 1.00x means Codename One is ahead by that factor. android9 interleaved rounds; host load 0.51, 1.82, 1.65
Compute -- the VM workloads (
Gate: within tolerance against
ios9 interleaved rounds; host load 23.72, 22.83, 20.7
Compute -- the VM workloads ( Not measured: iOS compute is not measured: a device build needs signed hardware, and on the simulator Flutter runs its JIT debug engine rather than AOT code. The macOS row runs the same ParparVM and Dart AOT compilers on the same Apple silicon. Gate: within tolerance against
javascript9 interleaved rounds; host load 1.9, 1.11, 0.46
Compute -- the VM workloads (
Gate: within tolerance against
linux9 interleaved rounds; host load 0.49, 2.94, 2.37
Compute -- the VM workloads (
Gate: within tolerance against
macos9 interleaved rounds; host load 1.68, 12.04, 17.59
Compute -- the VM workloads (
Gate: within tolerance against
windows9 interleaved rounds
Compute -- the VM workloads (
Gate: within tolerance against
Codename One wins 26 of 26 measured metrics across 6 platform(s). |
…ranspiler PR #6154 merged a transpiler under which the Flutter gallery (the Flutter benchmark's application) no longer compiled, and nothing on its PR ran it: flutter-bench.yml runs on a PR only when its own tree changes. Every benchmark leg of every PR since then failed in javac. Fixed, each where it went wrong: - a library-private class's static tear-off (`_DialogDemoState::_route`) was taken for a bound one and handed the class name as a receiver; - a function-type witness nested in another reused its lambda parameter; - an explicit `<num>` on a call whose parameter is `Comparable<T>` was written as `<Number>`, which no Long or Double satisfies; - named arguments did not bind a generic function's type parameters, so `ease(begin: radius, end: 0)` emitted `0` as a long; - List<E>.generate's generator had no E-typed return context; - `double + (c ? x : 0)` took the Number arms of a num slot; - the restorablePush stubs declared their route builder Object, and ScrollNotification's depth getter did not follow its siblings' naming. flutter-gallery-compile.yml runs the benchmark's own path up to javac (prepare.sh, then the generated project's compile) on every change to the transpiler, the runtimes or the Flutter build steps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The gallery compiles again with this PR, so this is its first measurement under #6154's transpiler: code and install grow 1,208,552 bytes while wire_bytes moves +0.22%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 231 screenshots: 231 matched. |
|
Compared 195 screenshots: 195 matched. Native Android coverage
✅ Native Android screenshot tests passed. Native Android coverage
Benchmark ResultsDetailed Performance Metrics
|
#6154's FunctionType and TypeWitness split type-variable lists with String.split, which is in neither vm/JavaAPI nor Ports/CLDC11: the JVM legs pass and the native Linux and Windows translations fail to compile an undeclared java_lang_String_split. DartUri and ContentType had the same call. All four now split on a literal by hand. Also rebaselines the Android gallery's dex size for #6154's code generation; the APK itself moved +0.21%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ation Both native galleries build again now that the Dart runtime no longer calls String.split; code grows about 11% on each while the gallery's wire size moves under 1%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The gallery now transpiles and compiles inside Maven's JVM under #6154's larger output, and the macOS runner's default quarter of 7 GB ran out in jar packaging on the iOS leg. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both now build with the 4 GB heap; code grows about 11% on each while wire size moves under 1.5%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CityRunTest, PartyTest, PromoVideoTest and driveToBusy called driveFor
in a loop of 100-200 ms windows. Each call removed the bot's hook when
it returned, so the game ticked unsteered between calls, and on a slow
CI runner the city run crashed in one of those gaps before its first
landmark ("still running at the landmark"). driveUntil keeps one bot
on the controls until the condition holds, the run ends or time is up.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 196 screenshots: 196 matched. Benchmark Results
Detailed Performance Metrics
ParparVM vs HotSpot (JDK 25): macOS arm64Runner CPU: Apple M1 (Virtual) (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 188 screenshots: 188 matched. |
|
Compared 193 screenshots: 193 matched. Benchmark Results
Build and Run Timing
Detailed Performance Metrics
|
|
Compared 253 screenshots: 253 matched. |
|
Compared 192 screenshots: 192 matched. Benchmark Results
Detailed Performance Metrics
|
#6154 gave the Flutter gallery 340 new classes, 320 of them in DartFnSigs: a bridge class and a static factory for every signed SAM whether or not a call site used it (105 bridges, 18 used), and an interface per signature even where one SAM was its only carrier. Each is a class in the native executable, which put Linux's code behind Flutter's. Only the members a generated file names are emitted now, and a signature with a single carrier is written into that SAM. Subclass const keys share ConstCanon.join instead of inlining the concatenation into every keyed class. Gallery: 904 -> 715 generated classes, 3.70 -> 3.45 MB of class files. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 193 screenshots: 193 matched. Benchmark Results
Build and Run Timing
Detailed Performance Metrics
|
Measured on the gallery's Linux executable, built in a container with the same toolchain on both sides: 15.30 MB before #6154, 17.00 MB after it, 16.40 MB with this change. - A statically typed num.clamp went through Dyn.call, which made every builtin's dynamic dispatch reachable (178 KB for four clamps). It calls Dyn.numClamp directly, and invoking a callable object takes a path that reaches only transpiled objects (Dyn.objectCall), not List/Map/String. - Each class of a library with renamed private names registered the whole library's spellings from a static initializer of its own. They are registered once, from FlutterRegistry.invokeMain, one packed literal per library; the behavior harness enters through invokeMain as an app does. - An enum builds its Dart-name table only when a value was renamed for Java. - $constKey() is kept only for classes constructed as constants and their superclasses (64 of 278 in the gallery). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A lambda becomes an instance of a carrier -- one class per functional interface and capture shape -- holding a function address and its captures. Brought over from the python-hero-ports work; on the Flutter gallery it cuts 268 KB of native code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The frameless path rejected any custom instruction, and FunctionAddress -- a constant push -- is the one every lambda factory has, so all 2,080 of the Flutter gallery's factories got a full frame. -103 KB. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CN1_FAST_NEW expanded the always_inline bump allocator at all 9,951 NEW sites of the Flutter gallery: 894 KB of a 16.0 MB executable. cn1BibopFastNew is the same path behind one direct call. Interleaved vm/benchmarks A/B against -DCN1_INLINE_ALLOC_SITES: geomean 1.004, objectAllocation 1.009, checksums identical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 210 screenshots: 210 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows x64Runner CPU: AMD64 Family 25 Model 17 Stepping 1, AuthenticAMD (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 210 screenshots: 210 matched. Benchmark ResultsDetailed Performance Metrics
|
|
Compared 210 screenshots: 210 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows arm64Runner CPU: ARMv8 (64-bit) Family 8 Model D49 Revision 0, MICROSOFT CORPORATION (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
✅ ByteCodeTranslator Quality ReportTest & Coverage
Benchmark Results
Static Analysis
Generated automatically by the PR CI workflow. |
|
Compared 210 screenshots: 210 matched. ParparVM vs HotSpot (JDK 25): Linux x64Runner CPU: Intel(R) Xeon(R) 6973P-C (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 210 screenshots: 210 matched. ParparVM vs HotSpot (JDK 25): Linux arm64Runner CPU: Neoverse-N2 (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
Lowering lambdas to shared carriers made translating HelloCodenameOne cheaper on both runtimes; ParparVM got faster, JDK 25 faster still, so the ratio moved without a VM regression. Measurements are in the row's reason. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…heck Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ration Every run since the gallery compiles again measured 0.76-0.85 (still faster than Flutter); the commits here do not move start-up. Evidence in the row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Dash and Skirmish online tests asserted wall-clock totals (360 ticks in 30 s, 100 server ticks in 30 s), so a runner shared with a dozen other jobs failed them while the game was still ticking. They now fail only when the ticks stop for 10 s, which is the stall they were written to catch. The site search test ran against wrangler pages dev, whose workerd exits when Chromium resets a connection on navigation; settling first (#6092) did not stop it. Search is static files only, so it now runs against a plain file server; the redirect checks keep the Pages runtime. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fixes the three items the nightly watchdog reported in #6160.
dash:
GameSocketTesthung for 300 s in the generated template. Two runners who never jump are both out 6.4 s into Neon Causeway, so the race ends; the test slept out the countdown before sending the host's jump, leaving it about 6 s to land. A stalled CI container missed that, the server dropped the late jump (correctly: the race was over), and the guest waited for the WebSocket idle close. Reproduced locally by delaying the jump. The jump is now sent during the countdown (stamped for tickINPUT_DELAY), the sockets get a 30 s read timeout, and the race ending first fails by name. The stamping of a mid-race jump is now held byOnlineRaceTeston a driven clock. Initializr template regenerated.flutter-bench: JavaScript code size +17.5%. From #6163, which reads instance fields as
o.nameinstead of through theo[_qN]alias table (valueEscape 20% faster). The gallery's wire bytes in the same run moved +0.03%. Rebaselined inpr/6172.jsonwith that reason.nightly-watchdog:
ios-accessibility-thread.yml"no scheduled run in 30 hours". Its cron arrived with #6128 after that night's slot. A suite with no scheduled run at all whose file reached master inside the window is now listed as awaiting its first run (keeps the issue open, own heading); one that ran before and went quiet is still reported.🤖 Generated with Claude Code