Skip to content

[pull] master from flutter:master#3

Merged
pull[bot] merged 4 commits into
g-star1024:masterfrom
flutter:master
May 29, 2026
Merged

[pull] master from flutter:master#3
pull[bot] merged 4 commits into
g-star1024:masterfrom
flutter:master

Conversation

@pull

@pull pull Bot commented May 29, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

bdero and others added 4 commits May 29, 2026 00:12
GOODNIGHT, SWEET PRINCE.

No semantic change, baby.

Follow-up to #186556 (and its tracking issue #186554), where I
deprecated one of the worst landmines in Impeller by absorbing OpenGL
ES's Y-axis difference into the vertex stage and pinned
`Texture::GetYCoordScale()` to 1.0. Every call site is now passing 1.0
and every `IPRemapCoords` call reduces to identity, so this PR removes
the cruft. :)

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
Removes the Material import from the sliver tree rendering test by
replacing the MaterialApp wrapper with lower-layer test scaffolding that
preserves the fallback text metrics. Also removes the test from the
rendering cross-import allowlist.

Part of #177412
Refs #177028

Tests:
- `bin/cache/dart-sdk/bin/dart --enable-asserts
dev/bots/check_tests_cross_imports.dart`
- `bin/cache/dart-sdk/bin/dart analyze
packages/flutter/test/rendering/sliver_tree_test.dart
dev/bots/check_tests_cross_imports.dart`
- `./bin/flutter analyze --no-pub
packages/flutter/test/rendering/sliver_tree_test.dart
dev/bots/check_tests_cross_imports.dart`
- `./bin/flutter test --no-pub
packages/flutter/test/rendering/sliver_tree_test.dart`
- `git diff --check`
…... (#187279)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter
Please CC codefu@google.com,zra@google.com on the revert to ensure that
a human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…ynamic boxing churn under Wasm (#186978)

Avoids heap allocations and GC sweeps caused by dynamic boxing of
primitive integers (struct allocations) inside high-frequency paragraph
layout, segmenter, and line-breaking loops.

1. **Optimized Local Typed List Copy Loops**:
- Replaced generic closure parameters and generic `List<int>.generate`
copy loops inside `paragraph.dart` and `path.dart` with specialized
local pointer extensions (`toUint8List` / `toUint32List`).
- Standard FFI `Pointer.asTypedList` is not supported at runtime under
`dart2wasm` in the Web Engine's external memory layout (since FFI
allocations are mapped to Skwasm's C++ heap rather than the standard
Dart heap, leaving the global FFI helper null at runtime).
- While these custom extensions still perform a memory copy step, they
allocate concrete, specialized typed arrays (`Uint8List` / `Uint32List`)
and copy elements using unboxed, register-level pointer lookups.
- Loops are structured to iterate backwards (`length - 1` down to `0`).
Compiling this to WebAssembly translates the loop condition to a direct
comparison against a constant zero register (`i64.ge_s` to `i64.const
0`), eliminating a register load instruction (`local.get $length`)
inside the high-frequency loop body on every iteration.
- Under `dart2wasm`, the copy loops are fully inlined and compile to raw
WebAssembly array loads and stores (`i32.load` / `i32.store`) with **0
generic closure callbacks** and **0 dynamic integer boxing** ($BoxedInt
heap allocations).
- For signed `Pointer<Int8>` buffers (such as in `path.dart`'s
`toSvgString`), the copy block explicitly masks values with `& 0xFF` to
convert them to positive unsigned bytes ($0$ to $255$), preventing
runtime `FormatException` issues under `utf8.decode` at zero memory
overhead.

2. **Pattern-Based Switch Expression Comparisons**:
- Replaced generic `Set<int>` lookup collections (`_kNewlines`,
`_kSpaces`) inside `breakLinesUsingV8BreakIterator` with
pattern-matching switch expressions (`_isNewline`, `_isSpace`).
- Under `dart2wasm`, this completely eliminates the dynamic boxing of
checked primitive `codeUnit` integers into heap-allocated `$BoxedInt`
wrappers (originally required for generic `Set.contains` lookup
parameters).
- Because the Unicode newline case numbers are sparse, the compiler
lowers the switch statement to inline, register-level direct comparisons
and conditional jumps (`i64.eq` and `br_if`) rather than an indirect
jump table (`br_table`), avoiding binary size bloat while executing
entirely on CPU registers with **0 heap allocations**.

Fixes #186972
@pull pull Bot locked and limited conversation to collaborators May 29, 2026
@pull pull Bot added the ⤵️ pull label May 29, 2026
@pull pull Bot merged commit eb9b7d0 into g-star1024:master May 29, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants