Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
331 commits
Select commit Hold shift + click to select a range
09f13f1
Pair the decode invalidation with the callback that drops the textures
shai-almog Aug 23, 2026
2c73b09
Record the shader-rounding result in the benchmark dataset
shai-almog Aug 23, 2026
487007a
Add a start-up phase probe, and measure the Mac Catalyst tax properly
shai-almog Aug 24, 2026
d36b368
Add a GPU frame-time probe, and record what the repaint ratio says
shai-almog Aug 24, 2026
f78d0ae
Repair the half-merged createImageFromARGBImpl, and restore its one-p…
shaiblah Sep 1, 2026
5a888d2
mac port: cut cold-start cost, and make start-up measurable
shai-almog Sep 2, 2026
b4c6248
flutter-runtime: stop paying per node for state that never changes
shai-almog Sep 2, 2026
075505a
vm/benchmarks: a Dart port of CommonWorkloads, for head-to-head VM nu…
shai-almog Sep 2, 2026
f50988e
flutter-runtime: an image with no fit must never be enlarged
shai-almog Sep 7, 2026
467f30b
flutter-runtime: a LayoutBuilder must not latch onto a measurement
shai-almog Sep 7, 2026
d46aee4
flutter-runtime: a TabBar has to pad and colour its labels
shai-almog Sep 7, 2026
3edcb4c
flutter-runtime: an app bar title falls back to the text theme
shai-almog Sep 7, 2026
6a5c5b4
flutter-runtime: place, shape and colour a floating action button
shai-almog Sep 8, 2026
712c24a
flutter-runtime: a text field draws its prefix icon
shai-almog Sep 8, 2026
f52011f
flutter-runtime: a text field resolves against the input decoration t…
shai-almog Sep 8, 2026
8dc2c64
flutter-runtime: a painter keeps the ground a Transform shifts it onto
shai-almog Sep 8, 2026
35f6f32
flutter-runtime: only sit out a LayoutBuilder pass that is a measurement
shai-almog Sep 8, 2026
1f78bb2
flutter-runtime: a floating action button is a Material size, in a Ma…
shai-almog Sep 8, 2026
a33225e
flutter-runtime: a navigation rail lays out its destinations
shai-almog Sep 8, 2026
ac4d1c0
flutter-runtime: give the files this branch touches their copyright h…
shai-almog Sep 8, 2026
81b1697
flutter-runtime: a bottom app bar is Material 3's height, and the FAB…
shai-almog Sep 8, 2026
e6c12fe
flutter-runtime: a text field draws the icon beside it, not only the …
shai-almog Sep 8, 2026
7658bbf
flutter-runtime: a placeholder takes the size it is given
shai-almog Sep 8, 2026
43a2fd5
flutter-runtime: the bottom strip owns the display's bottom padding
shai-almog Sep 8, 2026
c3fefc1
flutter-runtime: a scroll view pads itself with the safe area, as Flu…
shai-almog Sep 8, 2026
ac2af66
flutter-runtime: round a cover image by its box, not by what it draws
shai-almog Sep 8, 2026
ab1e26f
flutter-runtime: the form must not inset the canvas Flutter already i…
shai-almog Sep 8, 2026
2fb5276
flutter-runtime: read a PNG's size from its IHDR chunk, wherever it is
shai-almog Sep 9, 2026
fffa421
flutter-runtime: paint a transformed subtree through a layer
shai-almog Sep 9, 2026
72e343e
flutter-runtime: round each of a Material's corners on its own
shai-almog Sep 9, 2026
3b8ea33
flutter-runtime: hide the Form Toolbar no Scaffold claimed
shai-almog Sep 9, 2026
4adc756
flutter-runtime: interpolate the four tweens that stepped at the midp…
shai-almog Sep 9, 2026
e46dde0
flutter-runtime: make scheduler.timeDilation actually slow the animat…
shai-almog Sep 9, 2026
a03dd86
flutter-runtime: ask the subtree's own Form for the safe area
shai-almog Sep 9, 2026
11990a1
flutter-runtime: fill a gradient by bands so its SHAPE survives
shai-almog Sep 9, 2026
67614bf
Add the Codename One licence header to the new modules
shai-almog Sep 9, 2026
37f9512
flutter-runtime: a tracked text run must end where it was measured
shai-almog Sep 9, 2026
dbcda81
flutter-runtime: clip a subtree through what the port actually honours
shai-almog Sep 9, 2026
5764446
flutter-runtime: mark the two shape clips that are still inert on iOS
shai-almog Sep 9, 2026
325992d
flutter-runtime: a gesture callback that throws must say so
shai-almog Sep 9, 2026
1756744
core: a path is not equal to the rectangle that bounds it
shai-almog Sep 9, 2026
5e3bc3b
flutter-runtime: a subtree built late must still paint in tree order
shai-almog Sep 9, 2026
fb531f8
flutter-runtime: a tap survives a tremor, as Flutter's does
shai-almog Sep 9, 2026
03be248
flutter-runtime: an ImageIcon has to draw its image
shai-almog Sep 9, 2026
0c76987
flutter-runtime: an OverflowBox has to let its child overflow
shai-almog Sep 9, 2026
20bc99d
flutter-runtime: an icon button is 48 logical pixels, as Flutter's is
shai-almog Sep 9, 2026
a5d7df0
flutter-runtime: an iOS sliver nav bar is not a material app bar
shai-almog Sep 9, 2026
05ca8e9
flutter-runtime: honour TextStyle.height
shai-almog Sep 9, 2026
8b992d1
flutter-runtime: a bottom app bar cuts the notch its shape describes
shai-almog Sep 9, 2026
7fe898f
flutter-runtime: the arc in a notch, the platform's back arrow, and ink
shai-almog Sep 9, 2026
b5254c0
flutter-runtime: extendBody, a bar that grows, and buttons with no panel
shai-almog Sep 9, 2026
8a3339e
flutter-runtime: a model change has to rebuild what READ the model
shai-almog Sep 9, 2026
d26984b
flutter-runtime: a route belongs to its navigator, not to whatever pu…
shai-almog Sep 9, 2026
74bea25
flutter-runtime: a run's first frame notifies, even though nothing ha…
shai-almog Sep 9, 2026
1d8dd40
flutter-runtime: write down the safe-area rule where consumers read it
shai-almog Sep 9, 2026
9eb6e71
flutter-runtime: give routes their transitions, and eased runs their …
shai-almog Sep 9, 2026
9c23534
flutter-runtime: lay out the hosts that are born during a layout pass
shai-almog Sep 10, 2026
701d4ea
flutter-runtime: let a scroll speak, and let a curve tick
shai-almog Sep 10, 2026
f44256d
flutter-runtime: the bottom bar owns its inset, so folding it away re…
shai-almog Sep 10, 2026
467bb9b
flutter-runtime: the container transform is a real morph, both ways
shai-almog Sep 10, 2026
43b16e2
flutter-runtime: PageTransitionSwitcher actually switches
shai-almog Sep 10, 2026
d17e389
Restore what the rebase onto master dropped, and close two merge wounds
shai-almog Sep 12, 2026
019e74c
Drop the no-backing-copy image feature the merge resurrected
shai-almog Sep 12, 2026
6790f04
javase: restore the blit trace the rebase dropped
shai-almog Sep 12, 2026
139ea74
vm: remove a conflict marker the rebase left in cn1_globals.m
shai-almog Sep 12, 2026
c541821
flutter-runtime: make motion measurable, and report the platform bein…
shai-almog Sep 14, 2026
527099c
flutter-runtime: an animateTo covers part of the range in part of the…
shai-almog Sep 15, 2026
53b7ede
flutter-runtime: the floating action button scales in and out
shai-almog Sep 15, 2026
797ce06
Capture a form transition by asking Codename One for it
shai-almog Sep 15, 2026
d4cba26
core: a transition's motion must survive being copied
shai-almog Sep 15, 2026
051f58c
flutter-runtime: a page switch shows the page it is leaving
shai-almog Sep 15, 2026
f9a30b7
core: a container transform, because a circular reveal is a different…
shai-almog Sep 15, 2026
449bfc9
flutter-runtime: lay a line of text out at the height the FACE says
shai-almog Sep 15, 2026
23b258b
flutter-runtime: resolve a theme's text styles instead of returning t…
shai-almog Sep 15, 2026
a2f6c92
flutter-runtime: read a face's line height the way the face asks for it
shai-almog Sep 15, 2026
2435867
Drive the container transform's scrim off the curve, and close on its…
shai-almog Sep 15, 2026
a05db54
flutter-runtime: make the ink a ripple again rather than a grey flash
shai-almog Sep 15, 2026
3ed1e2e
flutter-runtime: a line box is ascent plus descent, not the font's li…
shai-almog Sep 15, 2026
964dd6c
flutter-runtime: a Scaffold establishes the text style for what it co…
shai-almog Sep 15, 2026
3ba5b6d
flutter-runtime: size a list tile by its line count, not by its avatar
shai-almog Sep 15, 2026
3eb23ec
flutter-runtime: ease the shared-axis transition, and let the outgoin…
shai-almog Sep 15, 2026
ea2723c
flutter-runtime: ease the fade-through transition's two legs
shai-almog Sep 15, 2026
ef51356
Push an iOS page in on the curve the arriving page actually uses
shai-almog Sep 15, 2026
7701c01
Give the iOS push its parallax: two pages, two distances, two curves
shai-almog Sep 15, 2026
4c6da44
flutter-runtime: make a collapsed input decoration actually collapse
shai-almog Sep 15, 2026
3a0e0ef
Fix the elevation shadow's weight, and make the container transform c…
shai-almog Sep 15, 2026
c34dd2e
flutter-runtime: let the widget walkers see through layout wrappers
shai-almog Sep 15, 2026
09860a6
flutter-runtime: a text field keeps its decoration when it has focus
shai-almog Sep 15, 2026
4daff62
flutter-runtime: give IgnorePointer its one job, and end a vertical drag
shai-almog Sep 15, 2026
2c2ddcf
Keep the transcode mojo's sources ASCII
shai-almog Sep 18, 2026
258a3f9
flutter-runtime: record where the runtime does not match the reference
shai-almog Sep 19, 2026
64a0d4f
flutter-runtime: readiness -- verify the top two gaps by using the app
shai-almog Sep 19, 2026
aec88f4
flutter-runtime: implement swipe to dismiss
shai-almog Sep 19, 2026
e352b1e
flutter-runtime: readiness -- record the list-removal defect that now…
shai-almog Sep 19, 2026
f27133d
flutter-runtime: detach a component from whatever container holds it
shai-almog Sep 19, 2026
556d930
flutter-runtime: readiness -- root-cause the list-removal defect
shai-almog Sep 19, 2026
b39bbe7
flutter-runtime: readiness -- narrow the list-removal defect to host …
shai-almog Sep 19, 2026
70bd0a0
flutter-runtime: let the Dismissible's children be seen by the tree walk
shai-almog Sep 19, 2026
b2416cc
flutter-runtime: pin the visitChildren contract, and close the list d…
shai-almog Sep 19, 2026
0e29394
flutter-runtime: readiness -- a nested GestureDetector loses its release
shai-almog Sep 19, 2026
4c97639
flutter-runtime: readiness -- retract the nested-gesture entry, it wa…
shai-almog Sep 19, 2026
1d7e235
flutter-runtime: present a modal popup as a sheet, not as a dialog
shai-almog Sep 20, 2026
d16e340
flutter-runtime: readiness -- the Cupertino pickers are stubs, and in…
shai-almog Sep 20, 2026
f560309
flutter-runtime: give a text field the type and label colour its them…
shai-almog Sep 20, 2026
76d351b
flutter-runtime: give an overflow bar its alignment and spacing, and …
shai-almog Sep 20, 2026
98247c2
flutter-runtime: let a transition photograph the page it is folding a…
shai-almog Sep 20, 2026
f165f2c
Make the container transform a transform: the shape, the corners and …
shai-almog Sep 20, 2026
40831c6
core: scale pictures down with every pixel counted, and clear the Spo…
shai-almog Sep 20, 2026
d8322d2
Make the Cupertino pickers real wheels, on the spinners Codename One …
shai-almog Sep 20, 2026
c94144c
flutter-runtime: bring the readiness tracker up to today's measurements
shai-almog Sep 20, 2026
9213a92
flutter-runtime: an outline input border is an outline
shai-almog Sep 20, 2026
a6192d9
flutter-runtime: a resting label is not a placeholder
shai-almog Sep 20, 2026
2c30e13
flutter-runtime: stop a clipped subtree escaping its scroller, and st…
shai-almog Sep 20, 2026
9401e25
flutter-runtime: a push during a pop's transition recorded the wrong …
shai-almog Sep 20, 2026
0c00bc1
flutter-runtime: an elevated button is a pale face with a coloured la…
shai-almog Sep 20, 2026
efcc7cc
flutter-runtime: record what the text field gets wrong, with the numbers
shai-almog Sep 20, 2026
c0689b0
RoundBorder draws itself when there is nothing to draw it into
shai-almog Sep 22, 2026
2fb7f19
flutter-runtime: a paint-only shift has to own a box it can paint into
shai-almog Sep 22, 2026
8975f71
Measure the transpiled gallery against Flutter's own build, in CI
shai-almog Sep 22, 2026
652e959
Document running Flutter widget code, and teach the skill to port it
shai-almog Sep 22, 2026
4d37f26
Merge remote-tracking branch 'origin/master' into flutter-dart-transp…
shai-almog Sep 22, 2026
dbd6e91
Give Spinner3D the project's copyright header
shai-almog Sep 22, 2026
2725fda
Keep the JDK 17 modules out of a JDK 8 reactor
shai-almog Sep 22, 2026
76bbd15
Make RoundBorder's direct painting opt-in, not the default
shai-almog Sep 22, 2026
b0ee4f8
Build the benchmark's framework once, on the JDK that can build it
shai-almog Sep 22, 2026
01af30f
Clear the PMD and cast-semantics findings on the new transitions
shai-almog Sep 22, 2026
8f119d3
Generate archetype projects for the JDK that will build them
shai-almog Sep 22, 2026
9d09ae6
Make the guide's Flutter snippets real compiled code
shai-almog Sep 22, 2026
f440966
Use the container's own JDKs for the benchmark's framework build
shai-almog Sep 22, 2026
18780f1
Keep the generate command on one line
shai-almog Sep 22, 2026
94eec9f
Build the benchmark's framework with the JavaSE profile
shai-almog Sep 22, 2026
ec534ab
Let generate-app-project choose the generated project's Java release
shai-almog Sep 22, 2026
ede8f5e
Take the workspace's dependencies with the gallery, not just its source
shai-almog Sep 22, 2026
2c44093
Take the EDT phase trace back out of the event loop
shai-almog Sep 22, 2026
3eb1c18
Drop Image.scaledSmooth and fillSmooth
shai-almog Sep 22, 2026
0f86820
Document the lightweight spinners now that they are public API
shai-almog Sep 22, 2026
bfe9b83
Pin the Flutter release the benchmark measures against
shai-almog Sep 22, 2026
192db7b
CI: give the generated projects a JDK they can target, and a display …
shai-almog Sep 22, 2026
98e31e8
flutter-bench: give the Linux native build its real dependency stack
shai-almog Sep 22, 2026
8e98818
core-unittests: stop a touch-device leak from breaking a later test
shai-almog Sep 22, 2026
7c92538
flutter-bench: build the macOS benchmark unsigned
shai-almog Sep 22, 2026
3c60429
flutter-bench: ask pub where the assets are instead of guessing
shai-almog Sep 22, 2026
7b35709
flutter-bench: say why Windows has no Visual Studio, at the point it …
shai-almog Sep 22, 2026
972930b
flutter-bench: pin the Windows runner too, and check the generator ma…
shai-almog Sep 22, 2026
f2af86e
flutter-bench: build the iOS project by target, not by a scheme it do…
shai-almog Sep 22, 2026
8cc9de7
dart-runtime: five places transpiled code diverged from Dart
shai-almog Sep 22, 2026
7c21c80
flutter-runtime: load NetworkImage headers and MemoryImage, unmount w…
shai-almog Sep 22, 2026
a2f2727
cn1:transcode-flutter: remove flattened assets that left the source tree
shai-almog Sep 22, 2026
39e447e
flutter-bench: make every leg able to produce a number, and the gate …
shai-almog Sep 22, 2026
8abd738
Port Status: render the Flutter benchmark in its own section
shai-almog Sep 22, 2026
3770612
flutter-bench: no POSIX-only paths in the measurement
shai-almog Sep 22, 2026
dfed704
flutter-bench: size Android by the ABI a phone is delivered
shai-almog Sep 22, 2026
b3a601f
flutter-bench: time the Flutter side at all, and size machine code, n…
shai-almog Sep 22, 2026
9604361
flutter-bench: take the start-up ratio from the end least favourable …
shai-almog Sep 22, 2026
991df0b
flutter-bench: arm the gate for Android, Linux, Windows and iOS
shai-almog Sep 22, 2026
378c216
flutter-bench: size the web build from the war that survives the build
shai-almog Sep 22, 2026
f5caddd
flutter-bench: arm the macOS gate for sizes and memory, not start-up
shai-almog Sep 22, 2026
34d3df0
flutter-bench: time Android apps at steady state, not mid-compilation
shai-almog Sep 22, 2026
fb8880b
flutter-bench: arm the JavaScript gate
shai-almog Sep 22, 2026
5728f43
flutter-bench: warm Android up properly, and base its gate on the env…
shai-almog Sep 22, 2026
5f45109
flutter-bench: retry the Flutter APK build on a corrupt SDK download …
shai-almog Sep 22, 2026
81bf45e
iOS: do not call the Metal-only setNoBackingCopy on the watch slice
shai-almog Sep 23, 2026
9bd3a88
flutter-bench: make each Android note's list boundary explicit
shai-almog Sep 23, 2026
b694141
screenshots: reseed Apple graphics-clip, which the shape-clip fix cor…
shai-almog Sep 23, 2026
c861b95
iOS: finish removing the no-backing-copy feature, and the per-frame G…
shai-almog Sep 23, 2026
8acf413
dart-runtime: seven more places transpiled code diverged from Dart
shai-almog Sep 23, 2026
7dc80c0
dart-transpiler: an async function's exceptions go to the Future it r…
shai-almog Sep 23, 2026
ab55c27
flutter-runtime: animation controls return their run's future; attach…
shai-almog Sep 23, 2026
7f9814e
flutter-bench: stage every asset package, and fail the gate when unme…
shai-almog Sep 23, 2026
311de54
Merge remote-tracking branch 'origin/master' into flutter-dart-transp…
shai-almog Sep 23, 2026
0b59573
flutter-bench: read the asset-package list without Windows line endings
shai-almog Sep 23, 2026
155c073
Flutter assets: a prefix-free flat name, so no two assets share a file
shai-almog Sep 23, 2026
e0e54e2
dart-transpiler: key the incremental skip on the package and the tran…
shai-almog Sep 23, 2026
b16bc7e
dart-runtime: honour catchError's test, default ports, DateTime zone …
shai-almog Sep 23, 2026
9808bc8
flutter-runtime: GlobalKey reaches its element; identity keys, Locale…
shai-almog Sep 23, 2026
0aa571f
flutter-bench: read the Codename One version without spawning echo
shai-almog Sep 23, 2026
a59f8c8
dart-runtime: Future.wait settles through listeners; Pattern, ==, toS…
shai-almog Sep 23, 2026
92417e8
flutter-runtime: isolate a throwing listener from the rest
shai-almog Sep 23, 2026
0006e6d
dart-transpiler: ??= on members, dynamic operators, argument order, a…
shai-almog Sep 23, 2026
5f83129
dart-transpiler: sequence arguments only where an effect can be reord…
shai-almog Sep 23, 2026
ccba375
vm: restore the CN1_GC_CONFORM banner line the conflict cleanup fused
shai-almog Sep 23, 2026
af0eaf8
dart-runtime: numeric keys, mixed sorts, Completer, Timer, Uri host, …
shai-almog Sep 23, 2026
35b058d
flutter-runtime: -0.0 hashes like 0.0; live Matrix4.storage; requireD…
shai-almog Sep 23, 2026
b9bce65
dart-transpiler: lazy statics, ?? in place, tryParse null, catch imports
shai-almog Sep 23, 2026
2921bbc
dart-runtime: test a key's integrality without Math.rint
shai-almog Sep 23, 2026
33285a2
dart-runtime: DateTime microseconds, identity maps, Dart notation, pa…
shai-almog Sep 23, 2026
410a20e
flutter-runtime: FutureBuilder listens, pushes answer results, reader…
shai-almog Sep 23, 2026
68d3dc1
dart-transpiler: int.parse radix, locale-free case, stub-directory di…
shai-almog Sep 23, 2026
b3c3812
dart-runtime: identity sets, live entries, Map<int,int> API, Dart shi…
shai-almog Sep 23, 2026
e570fe8
flutter-runtime: notifier equality, stop(canceled: false), zero digit…
shai-almog Sep 23, 2026
68a900d
dart-transpiler: Dart shifts, rounding, trim, typed collection lambdas
shai-almog Sep 23, 2026
133ab4a
dart-runtime: List.from(growable:) and indexOf with a start
shai-almog Sep 23, 2026
4282b90
flutter-runtime: drag gestures, ScrollController, row heights, async …
shai-almog Sep 23, 2026
68d6616
dart-transpiler: num keeps int, String * int, List.from growable, ind…
shai-almog Sep 23, 2026
12c4d23
release: publish the Flutter and Dart runtimes
shai-almog Sep 23, 2026
357d9be
dart-runtime: list lengths, ByteData offsets, long delays, Uri valida…
shai-almog Sep 23, 2026
563065c
flutter-runtime: inherited scope order, didChangeDependencies, notifi…
shai-almog Sep 23, 2026
0113c37
animations: a flat three-point segment, and a transform with no sourc…
shai-almog Sep 23, 2026
f21a3d7
dart-runtime: then onError, fail-fast int maps, addAll equality, wide…
shai-almog Sep 23, 2026
0db5f35
flutter-runtime: canPop/maybePop see an open dialog
shai-almog Sep 23, 2026
b458863
dart-transpiler: then's onError and catchError's test are named argum…
shai-almog Sep 23, 2026
785e6b8
core-unittests: copyright headers on the two animation tests this cha…
shai-almog Sep 23, 2026
d3d7618
ios screenshots: reseed metal-27 graphics-clip from CI
shai-almog Sep 23, 2026
fa4912e
Merge remote-tracking branch 'origin/master' into flutter-dart-transp…
shai-almog Sep 23, 2026
186b8b1
dart-runtime: non-finite conversions, clamp ranges, live asMap view, …
shai-almog Sep 24, 2026
b4e45da
flutter-runtime: controller stop paths, shared text controllers, canv…
shai-almog Sep 24, 2026
389a6b2
dart-transpiler: lower clamp/toInt/toList(growable) through the runti…
shai-almog Sep 24, 2026
cfc2f83
dart-runtime: exact int/double compareTo, RegExp dotAll, async whenCo…
shai-almog Sep 24, 2026
f739a90
flutter-runtime: FocusNode drives its field, tristate checkbox, Value…
shai-almog Sep 24, 2026
292291c
dart-transpiler: numeric compareTo, int-preserving min/max/pow, valid…
shai-almog Sep 24, 2026
a8d236f
flutter-bench: Maven through retry.sh, and a dispatch measures only t…
shai-almog Sep 24, 2026
ff27b71
dart-runtime: live getRange, Dart-equality map values and int keys, n…
shai-almog Sep 24, 2026
194bff8
flutter-runtime: skip listeners removed mid-dispatch, asset manifest …
shai-almog Sep 24, 2026
032374e
maven-plugin: bundle a Flutter asset manifest listing every asset key
shai-almog Sep 24, 2026
b35d969
dart-transpiler: no state file after a failed write; lower Map.contai…
shai-almog Sep 24, 2026
c88cef8
dart-runtime: Future.wait eagerError/cleanUp, typed List.from checks,…
shai-almog Sep 24, 2026
cae92d7
flutter-runtime: animateTo animates over its duration and curve; Comp…
shai-almog Sep 24, 2026
145775c
dart-transpiler: checked late fields, per-iteration sync*, hashAll ov…
shai-almog Sep 24, 2026
b7f265b
dart-runtime: int == double as the VM does, lastIndexWhere/lastIndexO…
shai-almog Sep 24, 2026
99463de
flutter-runtime: a provider given a new value rebuilds its dependents
shai-almog Sep 24, 2026
d1c9485
dart-transpiler: skip the packages/ asset root, lower List.lastIndexO…
shai-almog Sep 24, 2026
8a55429
Dialog: dispose a timed-out dialog only on the EDT
shai-almog Sep 24, 2026
13a6230
ContainerTransformTransition: cleanup releases the source and destina…
shai-almog Sep 24, 2026
e044ca2
dart-runtime: RegExp compiles in its constructor, IterableMixin throw…
shai-almog Sep 24, 2026
8f28bd9
flutter-runtime: ReverseAnimation and ProxyAnimation forward their pa…
shai-almog Sep 24, 2026
9d6cdee
dart-transpiler: lower Iterable.generate without type arguments
shai-almog Sep 24, 2026
39e3f69
fidelity: crop a screen that has stopped changing, not one fixed-slee…
shai-almog Sep 24, 2026
8d2733a
dart-runtime: thrown values are carried and caught as themselves; unm…
shai-almog Sep 24, 2026
72e48e7
flutter-runtime: awaitable dialogs, Selector's rebuild test, slider s…
shai-almog Sep 24, 2026
e375507
dart-transpiler: one ordered catch chain per try; lower identical, Li…
shai-almog Sep 24, 2026
71a8de9
flutter-bench: discount a slow runner, measured by pinned Flutter, fr…
shai-almog Sep 24, 2026
d83694e
dart-runtime: checked List.from and Uint8List.fromList, Dart-consiste…
shai-almog Sep 24, 2026
b294c09
flutter-runtime: per-element Selector cache, combining marks of every…
shai-almog Sep 24, 2026
c022e45
dart-transpiler: checked List.from, Object.hash through Dart hashes, …
shai-almog Sep 24, 2026
4c21456
dart-runtime: Dart errors for division by zero, Future.wait over a th…
shai-almog Sep 24, 2026
c6b6d6f
flutter-runtime: maxLength 0 is a limit, pushReplacementNamed keeps t…
shai-almog Sep 24, 2026
20bf6fa
dart-transpiler: lower replaceFirst, dynamic operands of && and ||, a…
shai-almog Sep 24, 2026
4009dc0
SimpleDateFormat: setTimeZone/getTimeZone, as java.text.DateFormat has
shai-almog Sep 24, 2026
83112e9
dart-runtime: identity collections use Dart identity; forEach detects…
shai-almog Sep 24, 2026
e415785
flutter-runtime: StatefulBuilder setState rebuilds, viewPadding carri…
shai-almog Sep 24, 2026
0a190c7
dart-transpiler: a class mixing in ChangeNotifier owns its listener list
shai-almog Sep 24, 2026
1c2be1e
copyright gate: header on SimpleDateFormatTest; SimpleDateFormat keep…
shai-almog Sep 24, 2026
570a391
flutter-bench: re-record the JavaScript size baseline
shai-almog Sep 24, 2026
424c67c
Merge remote-tracking branch 'origin/master' into flutter-dart-transp…
shai-almog Sep 24, 2026
1da7051
flutter-bench: settle from the marker, fail on a missing gated metric…
shai-almog Sep 24, 2026
50338ba
dart-transpiler: named arguments keep source order around any call
shai-almog Sep 24, 2026
8390e27
Merge remote-tracking branch 'origin/master' into flutter-dart-transp…
shai-almog Sep 25, 2026
daa510f
flutter-bench: fail the gate when Codename One is behind Flutter, and…
shai-almog Sep 25, 2026
e0003b5
builders: ship only the native theme the app loads, no transpiler met…
shai-almog Sep 25, 2026
4e38ce7
flutter-bench: measure what ships -- no MCP driver in the app, a stri…
shai-almog Sep 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
466 changes: 466 additions & 0 deletions .github/workflows/flutter-bench.yml

Large diffs are not rendered by default.

30 changes: 4 additions & 26 deletions .github/workflows/linux-build-run.yml
Original file line number Diff line number Diff line change
Expand Up @@ -170,33 +170,11 @@ jobs:
- name: Check out repository
uses: actions/checkout@v6

# The native Linux port's full dependency stack: GTK3 + Cairo + Pango +
# GdkPixbuf + GLib/GIO (render/widgets), FontConfig/FreeType (bundled-font
# registration), libcurl (HTTP), GStreamer (media/camera/audio), WebKitGTK
# (browser), libsecret (secure storage), libnotify (notifications), GeoClue
# (location), libepoxy + EGL/GLES + the Mesa software driver (the offscreen
# 3D backend). Plus CMake/Ninja, Xvfb and a font for Pango to lay out.
#
# The GStreamer plugin set matters as much as the library: base + good carry
# appsrc/appsink, videoconvert and mp4mux but NO codec. VideoIO's encoder is
# x264enc/x265enc (plugins-ugly) parsed by h264parse/h265parse (plugins-bad)
# with avenc_aac for audio and avdec_* for playback (libav), so without those
# three packages the port has no encoder and no H.264 decoder at all.
# The port's full dependency stack, shared with the Flutter benchmark,
# which builds the same local-linux-device target. See the script for what
# each group is for and why the GStreamer plugin set is part of it.
- name: Install the GTK build stack + toolchain
run: |
set -e
# Through the shared helper: it refreshes the index once when a .deb
# 404s, which is what a point release landing mid-job looks like --
# three openssl packages took this job out on 2026-08-25.
bash scripts/ci/apt-get-install.sh \
cmake ninja-build pkg-config unzip xvfb fonts-dejavu-core \
libgtk-3-dev libcairo2-dev libpango1.0-dev libgdk-pixbuf-2.0-dev libglib2.0-dev \
libfontconfig1-dev libfreetype-dev \
libcurl4-openssl-dev libssl-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav \
libwebkit2gtk-4.1-dev libsecret-1-dev libnotify-dev libgeoclue-2-dev \
libepoxy-dev libegl1-mesa-dev libgles2-mesa-dev libgl1-mesa-dri
run: bash scripts/ci/install-linux-native-deps.sh

- name: Set up JDK 8
uses: actions/setup-java@v5
Expand Down
46 changes: 45 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,46 @@ jobs:
[ "$code" = "200" ] || { echo "MISSING on R2: codenameone-guibuilder (HTTP $code)" >&2; exit 1; }
echo "ok: codenameone-guibuilder ${GITHUB_REF_NAME} on R2"

# --- Flutter runtime and Dart runtime -----------------------------------
# codenameone-dart-runtime and codenameone-flutter-runtime compile at
# release 17, so the maven/ reactor only includes them on JDK 17 (the
# flutter-modules profile) and the JDK 8 core pass above never builds them.
# Without this pass a project that declares codenameone-flutter-runtime at a
# released version -- as the archetype documentation says to -- cannot
# resolve it. The transpiler itself builds on JDK 8 and ships with the core.
- name: Build and stage the Flutter runtimes
id: deploy_flutter
continue-on-error: true
if: >-
always() && (steps.deploy.outcome == 'success' ||
steps.r2_core.outcome == 'success')
run: |
export GPG_TTY=$(tty)
cd maven
# -pl without -am: the parent and core were released above and are in
# the local repository at this version; re-staging them here would
# produce new signatures for artifacts that are already immutable on R2.
# With -pl the plugin stages under the FIRST reactor module's target --
# maven/dart-runtime/target/central-staging, holding both runtimes --
# not under maven/target, so the core tree is left untouched.
xvfb-run -a mvn deploy -Psign-artifacts -Dgpg.passphrase=$MAVEN_GPG_PASSPHRASE \
-pl dart-runtime,flutter-runtime -DskipTests -DskipPublishing=true
env:
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}

- name: Publish Flutter runtimes to R2
id: r2_flutter
continue-on-error: true
if: always() && steps.deploy_flutter.conclusion != 'skipped'
run: |
bash maven/scripts/r2/publish-staging-to-r2.sh maven/dart-runtime/target/central-staging
for artifact in codenameone-dart-runtime codenameone-flutter-runtime; do
url="${R2_BASE_URL}/com/codenameone/${artifact}/${GITHUB_REF_NAME}/${artifact}-${GITHUB_REF_NAME}.pom?cb=${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}"
code=$(curl -s -o /dev/null -w "%{http_code}" "$url")
[ "$code" = "200" ] || { echo "MISSING on R2: $artifact (HTTP $code)" >&2; exit 1; }
echo "ok: $artifact ${GITHUB_REF_NAME} on R2"
done

- name: Mark the R2 release complete
id: r2_mark_complete
continue-on-error: true
Expand Down Expand Up @@ -387,12 +427,14 @@ jobs:
steps.deploy_certificatewizard.outcome == 'success' &&
steps.deploy_settings.outcome == 'success' &&
steps.deploy_guibuilder.outcome == 'success' &&
steps.deploy_flutter.outcome == 'success' &&
steps.r2_core.outcome == 'success' &&
steps.r2_core_confirm.outcome == 'success' &&
steps.r2_gamebuilder.outcome == 'success' &&
steps.r2_certificatewizard.outcome == 'success' &&
steps.r2_settings.outcome == 'success' &&
steps.r2_guibuilder.outcome == 'success'
steps.r2_guibuilder.outcome == 'success' &&
steps.r2_flutter.outcome == 'success'
run: bash maven/scripts/r2/mark-release-complete.sh "${GITHUB_REF_NAME}"

- name: Regenerate R2 metadata and archetype catalog
Expand Down Expand Up @@ -445,12 +487,14 @@ jobs:
bad "${{ steps.deploy_certificatewizard.outcome }}" && fail "Signing Wizard build"
bad "${{ steps.deploy_settings.outcome }}" && fail "Settings build"
bad "${{ steps.deploy_guibuilder.outcome }}" && fail "GUI Builder build"
bad "${{ steps.deploy_flutter.outcome }}" && fail "Flutter runtimes build"
bad "${{ steps.r2_core.outcome }}" && fail "core reactor -> R2"
bad "${{ steps.r2_core_confirm.outcome }}" && fail "core artifacts missing on R2"
bad "${{ steps.r2_gamebuilder.outcome }}" && fail "Game Builder -> R2"
bad "${{ steps.r2_certificatewizard.outcome }}" && fail "Signing Wizard -> R2"
bad "${{ steps.r2_settings.outcome }}" && fail "Settings -> R2"
bad "${{ steps.r2_guibuilder.outcome }}" && fail "GUI Builder -> R2"
bad "${{ steps.r2_flutter.outcome }}" && fail "Flutter runtimes -> R2"
bad "${{ steps.r2_mark_complete.outcome }}" && fail "marking the R2 release complete"
bad "${{ steps.r2_metadata.outcome }}" && fail "R2 metadata regeneration"
# A skipped marker is not a legitimate skip: it is how a release ends up
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -190,3 +190,8 @@ cn1-build-hints.json
# Concatenated CSS the native-theme build feeds the compiler. Regenerated on
# every run; the parts under native-themes/<theme>/*.css are the source.
native-themes/*/target/

# Resolved from the port-status-data branch during the website build
# (scripts/website/sync_port_status_reports.sh); never committed, because
# there is no checked-in fallback for it.
docs/website/data/port_status_flutter_benchmark.json
14 changes: 14 additions & 0 deletions CodenameOne/src/com/codename1/impl/CodenameOneImplementation.java
Original file line number Diff line number Diff line change
Expand Up @@ -1176,6 +1176,7 @@ public void drawImageRounded(Object graphics, Object img, int x, int y, int w, i
drawImage(graphics, img, x, y, w, h);
}


/// Returns the width of a native image
///
/// #### Parameters
Expand Down Expand Up @@ -5312,6 +5313,19 @@ public boolean downloadBytesAsFile(String fileName, byte[] bytes) {
///
/// #### Returns
///
/// The platform's own logical-pixel scale factor: device pixels per logical pixel,
/// the number iOS calls `UIScreen.scale` and Android calls `density`.
///
/// This is NOT the same question as [#getDeviceDensity], even though the two are
/// easily confused. Density is a coarse DPI bucket used to pick artwork and to size
/// things in physical units. The scale factor is what the platform itself uses to
/// convert its own layout units into pixels, and on iOS it is only ever 1, 2 or 3 --
/// never the 3.5 that a 560-dpi bucket would imply. Anything laying out in
/// platform-logical units (a Flutter-style `dp`) has to ask this question, not the
/// density one, or it renders every dimension off by the ratio between them.
///
/// #### Returns
///
/// pixels per logical pixel, or 0 when the platform does not report one -- callers
/// should then fall back to deriving it from the density bucket
public float getDevicePixelRatio() {
Expand Down
30 changes: 28 additions & 2 deletions CodenameOne/src/com/codename1/l10n/SimpleDateFormat.java
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ public class SimpleDateFormat extends DateFormat {
private String pattern;
/// The parsed pattern
private List<String> patternTokens;
/// The zone fields are formatted in; null means the device's default zone.
private TimeZone timeZone;

/// Construct a SimpleDateFormat with no pattern.
public SimpleDateFormat() {
Expand Down Expand Up @@ -242,9 +244,33 @@ public int hashCode() {
public Object clone() {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
sdf.setDateFormatSymbols(dateFormatSymbols);
sdf.timeZone = timeZone;
return sdf;
}

/// Sets the time zone the date's fields are formatted in, as `java.text.DateFormat`
/// does. Without one the device's default zone is used.
///
/// A formatter fixed to the device zone cannot print an instant's fields in any other:
/// a UTC time had to be moved onto a local one first, and inside a daylight-saving gap
/// that local time does not exist, so its hour came out shifted.
///
/// #### Parameters
///
/// - `zone`: the zone, or null for the device's default
public void setTimeZone(TimeZone zone) {
this.timeZone = zone;
}

/// The zone set with `setTimeZone`, or the device's default when none was.
///
/// #### Returns
///
/// the zone fields are formatted in
public TimeZone getTimeZone() {
return timeZone != null ? timeZone : TimeZone.getDefault();
}

/*
* (non-Javadoc)
*
Expand Down Expand Up @@ -274,8 +300,8 @@ String format(Date source, StringBuilder toAppendTo) {
if (pattern == null) {
return super.format(source, toAppendTo);
}
// format based on local timezone
Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
// format in the configured zone, the device's by default
Calendar calendar = Calendar.getInstance(getTimeZone());
calendar.setTime(source);
List<String> pattern = getPatternTokens();
for (String token : pattern) {
Expand Down
10 changes: 10 additions & 0 deletions CodenameOne/src/com/codename1/ui/Dialog.java
Original file line number Diff line number Diff line change
Expand Up @@ -3900,6 +3900,16 @@ public boolean animate() {
}

private boolean isTimedOut() {
// Disposing is EDT work, and this is reached from off it: invokeAndBlock's
// waiting thread polls isDisposed() while a modal show blocks, and it used to
// dispose the dialog and deregister its animation from that thread, while the
// EDT was walking the same animation list -- an ArrayIndexOutOfBoundsException
// out of ArrayList.remove. Off the EDT the deadline is left alone; the EDT's own
// poll (animate) and the timeout clock, which calls back onto the EDT, dispose
// it, and the waiting thread sees it disposed on its next check.
if (!Display.getInstance().isEdt()) {
return false;
}
if (time != 0 && System.currentTimeMillis() >= time) {
time = 0;
cancelTimeoutClock();
Expand Down
25 changes: 25 additions & 0 deletions CodenameOne/src/com/codename1/ui/Display.java
Original file line number Diff line number Diff line change
Expand Up @@ -1334,6 +1334,31 @@ public boolean isInTransition() {
return false;
}

/// The form transition currently being painted, or null when there is none.
///
/// The companion to [isInTransition()][#isInTransition()], for code that needs the
/// transition itself rather than the fact of one. A transition paints the frame
/// BETWEEN two forms, so neither form can be asked what is on screen while one is
/// running - painting the destination gives the finished state and painting the
/// source gives the state before it began. Handing back the transition lets a caller
/// paint the frame that is actually being shown, which is what capturing a transition
/// for comparison needs, and pairs with
/// [AnimationTime][com.codename1.ui.animations.AnimationTime] to step one frame by
/// frame.
///
/// #### Returns
///
/// the running transition, or null
public Transition getRunningTransition() {
if (animationQueue != null && !animationQueue.isEmpty()) {
Animation a = animationQueue.get(0);
if (a instanceof Transition) {
return (Transition) a;
}
}
return null;
}

// Seems to be a false positive on this rule
@SuppressWarnings({"PMD.SimplifyConditional", "PMD.AvoidBranchingStatementAsLastInLoop"})
private void paintTransitionAnimation() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1441,6 +1441,15 @@ public Transition copy(boolean reverse) {
break;
}
retVal.linearMotion = linearMotion;
// A motion the caller supplied has to survive the copy. Display copies a
// transition before running it, so everything set through setMotion() -- which is
// public API, documented as the way to give a transition "a more appropriate
// physical feel" -- was dropped on the way to the screen and the default ease ran
// instead. Silently: the transition still played, just not the one that was asked
// for.
retVal.motionSetManually = motionSetManually;
retVal.motion = motion;
retVal.lazyMotion = lazyMotion;
return retVal;
}

Expand Down
Loading
Loading