Skip to content

[Impeller] Remove shared rendering data from TextFrame#182886

Merged
auto-submit[bot] merged 4 commits into
flutter:masterfrom
flar:impeller-text-frame-no-per-frame-data
Feb 27, 2026
Merged

[Impeller] Remove shared rendering data from TextFrame#182886
auto-submit[bot] merged 4 commits into
flutter:masterfrom
flar:impeller-text-frame-no-per-frame-data

Conversation

@flar

@flar flar commented Feb 25, 2026

Copy link
Copy Markdown
Contributor

Impeller has been storing rendering data specific to a single invocation of a text operation in the TextFrame object itself. Unfortunately, the TextFrame lives (most commonly, especially in a Flutter app) in the DisplayList which should be an immutable data store. Even more importantly, DisplayLists can be shared and appear multiple times in different graphics contexts within a single frame. This potentially means that Impeller might store "this TextFrame is rendering at a scale of 2x" and "this TextFrame is rendering at a scale of 50x" into the same TextFrame object in the same scene and then try to render that TextFrame with the most recently stored information for both instances. This issue was discovered during a code read of the way that glyph caches are managed in Impeller as mentioned in the targeted issue:

Fixes: #177424

Pre-launch Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

@github-actions github-actions Bot added a: text input Entering text in a text field or keyboard related problems engine flutter/engine related. See also e: labels. e: impeller Impeller rendering backend issues and features requests labels Feb 25, 2026
@flar

flar commented Feb 25, 2026

Copy link
Copy Markdown
Contributor Author

A note on the unit tests. Currently 2 entire files worth of unit tests that are intimately involved with testing the "old way" of storing the render data into the TextFrame object itself are commented out in their entirety.

New rendering tests were added that rendered poorly under the old system, but render correctly now. This are just to verify the behavior that is intended to be fixed, but unit tests for the mechanisms themselves will be added, both by rewriting the 2 unit test files that are commented out, but also potentially some new tests will also be added.

The PR is in draft form to see if the new behavior causes any higher level tests to fail.

@flar flar requested a review from eyebrowsoffire February 25, 2026 09:59
@flar flar marked this pull request as ready for review February 26, 2026 09:27

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request correctly refactors the text rendering logic to remove per-invocation state from TextFrame, making it immutable and safely reusable across different rendering contexts. This resolves a potential correctness issue where shared TextFrame instances could be rendered incorrectly. The changes are well-contained, and the addition of new tests to verify the fix is appreciated.

I have a few minor suggestions for improving code clarity and correctness.

As a follow-up, you might want to update the class comment for TextFrame in engine/src/flutter/impeller/typographer/text_frame.h. It currently states that TextFrame should not be reused, which is no longer true after these changes.

Comment thread engine/src/flutter/impeller/display_list/aiks_dl_text_unittests.cc Outdated
Comment thread engine/src/flutter/impeller/entity/contents/text_contents.h Outdated
Comment thread engine/src/flutter/impeller/typographer/lazy_glyph_atlas.h Outdated

@eyebrowsoffire eyebrowsoffire left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me!

@eyebrowsoffire eyebrowsoffire left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Whoops, I had one minor thing that didn't get added to the review, but it's very small.

Comment thread engine/src/flutter/impeller/display_list/aiks_dl_text_unittests.cc Outdated
@flutter-dashboard

Copy link
Copy Markdown

Golden file changes have been found for this pull request. Click here to view and triage (e.g. because this is an intentional change).

If you are still iterating on this change and are not ready to resolve the images on the Flutter Gold dashboard, consider marking this PR as a draft pull request above. You will still be able to view image results on the dashboard, commenting will be silenced, and the check will not try to resolve itself until marked ready for review.

For more guidance, visit Writing a golden file test for package:flutter.

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.

Changes reported for pull request #182886 at sha 48a16c1

@flutter-dashboard flutter-dashboard Bot added the will affect goldens Changes to golden files label Feb 26, 2026
@flutter-dashboard

Copy link
Copy Markdown

Golden file changes are available for triage from new commit, Click here to view.

For more guidance, visit Writing a golden file test for package:flutter.

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.

Changes reported for pull request #182886 at sha bbe8d48

@flar flar added the autosubmit Merge PR when tree becomes green via auto submit App label Feb 27, 2026
@flar

flar commented Feb 27, 2026

Copy link
Copy Markdown
Contributor Author

As a follow-up, you might want to update the class comment for TextFrame in engine/src/flutter/impeller/typographer/text_frame.h. It currently states that TextFrame should not be reused, which is no longer true after these changes.

Interesting. This wasn't listed as a change request so I didn't see it at first. It's true that that comment is out of date, but I'll let it stay there for this PR as I want to make a bunch of changes to the documentation for the multiple pass rendering system as per #182639

@auto-submit auto-submit Bot added this pull request to the merge queue Feb 27, 2026
Merged via the queue into flutter:master with commit aaf5c0c Feb 27, 2026
185 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Feb 27, 2026
ahmedsameha1 pushed a commit to ahmedsameha1/flutter that referenced this pull request Feb 27, 2026
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

Impeller has been storing rendering data specific to a single invocation
of a text operation in the TextFrame object itself. Unfortunately, the
TextFrame lives (most commonly, especially in a Flutter app) in the
DisplayList which should be an immutable data store. Even more
importantly, DisplayLists can be shared and appear multiple times in
different graphics contexts within a single frame. This potentially
means that Impeller might store "this TextFrame is rendering at a scale
of 2x" and "this TextFrame is rendering at a scale of 50x" into the same
TextFrame object in the same scene and then try to render that TextFrame
with the most recently stored information for both instances. This issue
was discovered during a code read of the way that glyph caches are
managed in Impeller as mentioned in the targeted issue:

Fixes: flutter#177424

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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.
- [ ] 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.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Feb 27, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Feb 27, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Feb 27, 2026
Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions)

flutter/flutter@b31548f...1141b2b

2026-02-27 maxime.pontoire@me.com flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362)
2026-02-27 engine-flutter-autoroll@skia.org Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004)
2026-02-27 vegorov@google.com Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883)
2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992)
2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989)
2026-02-27 oss@simonbinder.eu Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004)
2026-02-27 engine-flutter-autoroll@skia.org Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986)
2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980)
2026-02-27 flar@google.com [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886)
2026-02-27 robert.ancell@canonical.com Add fl_view_new_sized_to_content() (flutter/flutter#182924)
2026-02-27 737941+loic-sharma@users.noreply.github.com [Shortcuts] Improve focus node debug labels (flutter/flutter#181834)
2026-02-27 34871572+gmackall@users.noreply.github.com Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516)
2026-02-27 nate.w5687@gmail.com `SizedBox.square()` (flutter/flutter#182731)
2026-02-27 1961493+harryterkelsen@users.noreply.github.com [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912)
2026-02-26 jason-simmons@users.noreply.github.com Roll zlib to 7eda07b1e067 (flutter/flutter#182692)
2026-02-26 bkonyi@google.com [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854)
2026-02-26 34871572+gmackall@users.noreply.github.com Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961)
2026-02-26 engine-flutter-autoroll@skia.org Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957)
2026-02-26 robert.ancell@canonical.com Support sending window constraints in metrics events (flutter/flutter#182921)
2026-02-26 34465683+rkishan516@users.noreply.github.com Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891)
2026-02-26 116356835+AbdeMohlbi@users.noreply.github.com Remove some instances of useMaterial3: true (flutter/flutter#182944)
2026-02-26 serhatguler@hotmail.de [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224)
2026-02-26 chingjun@google.com Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930)
2026-02-26 chingjun@google.com Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931)
2026-02-26 mdebbar@google.com [web] Roll Firefox to 148 (flutter/flutter#182859)
2026-02-26 engine-flutter-autoroll@skia.org Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946)
2026-02-26 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942)
2026-02-26 robert.ancell@canonical.com Add test for WindowPositioner.toString (flutter/flutter#182906)
2026-02-26 robert.ancell@canonical.com Remove unused function prototype (flutter/flutter#182915)
2026-02-26 ahmedsameha1@gmail.com Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531)
2026-02-26 51901607+O-Hannonen@users.noreply.github.com Fix false positives for hit test misses in flutter_test (flutter/flutter#180856)
2026-02-26 116356835+AbdeMohlbi@users.noreply.github.com Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655)
2026-02-26 146823759+brahim-guaali@users.noreply.github.com Use null-aware elements in widgets/routes.dart (flutter/flutter#181242)
2026-02-26 37593616+itsAdityaRathore@users.noreply.github.com Fix typos in method names across multiple files (flutter/flutter#182584)
2026-02-26 brunocorona.alcantar@gmail.com Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785)
2026-02-26 flar@google.com Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916)
2026-02-26 ahmedsameha1@gmail.com Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499)
2026-02-26 srawlins@google.com framework: Use a super-parameter in several missed cases (flutter/flutter#182580)
2026-02-25 nate.w5687@gmail.com `WidgetStatesConstraint` as a mixin (flutter/flutter#181704)
2026-02-25 Rusino@users.noreply.github.com Paint the paragraph as a single image (flutter/flutter#181206)
2026-02-25 rmolivares@renzo-olivares.dev Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642)
2026-02-25 34465683+rkishan516@users.noreply.github.com feat: add few required properties to test widgets app (flutter/flutter#182805)
2026-02-25 prbillingsley89@gmail.com Updates MenuAnchor to respect software keyboard (flutter/flutter#180975)
2026-02-25 jason-simmons@users.noreply.github.com Roll ImGui to v1.92.6-docking (flutter/flutter#182799)
2026-02-25 jason-simmons@users.noreply.github.com Roll GoogleTest to e9907112b472 (flutter/flutter#182795)
2026-02-25 Veselblu@yandex.ru Make positionInlineChildren assert much clearer (flutter/flutter#182093)
...
github-merge-queue Bot pushed a commit that referenced this pull request Mar 3, 2026
…#183050)

This is a follow-on to #182886
where new information about the Impeller 2-pass rendering system and, in
particular, how it applies to glyph caching was uncovered. Some of the
comments were stale after those discoveries so this PR addresses those
changes.

Most of the changes are added or modified comments.
One obsolete method had a declaration and no definition, the declaration
is removed.
One new structure is moved to a different header file with which it is
more closely associated.

There are no test updates since no implementations were changed.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gaaclarke <30870216+gaaclarke@users.noreply.github.com>
xxxOVALxxx pushed a commit to xxxOVALxxx/flutter that referenced this pull request Mar 10, 2026
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

Impeller has been storing rendering data specific to a single invocation
of a text operation in the TextFrame object itself. Unfortunately, the
TextFrame lives (most commonly, especially in a Flutter app) in the
DisplayList which should be an immutable data store. Even more
importantly, DisplayLists can be shared and appear multiple times in
different graphics contexts within a single frame. This potentially
means that Impeller might store "this TextFrame is rendering at a scale
of 2x" and "this TextFrame is rendering at a scale of 50x" into the same
TextFrame object in the same scene and then try to render that TextFrame
with the most recently stored information for both instances. This issue
was discovered during a code read of the way that glyph caches are
managed in Impeller as mentioned in the targeted issue:

Fixes: flutter#177424

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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.
- [ ] 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.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
xxxOVALxxx pushed a commit to xxxOVALxxx/flutter that referenced this pull request Mar 10, 2026
…flutter#183050)

This is a follow-on to flutter#182886
where new information about the Impeller 2-pass rendering system and, in
particular, how it applies to glyph caching was uncovered. Some of the
comments were stale after those discoveries so this PR addresses those
changes.

Most of the changes are added or modified comments.
One obsolete method had a declaration and no definition, the declaration
is removed.
One new structure is moved to a different header file with which it is
more closely associated.

There are no test updates since no implementations were changed.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gaaclarke <30870216+gaaclarke@users.noreply.github.com>
okorohelijah pushed a commit to okorohelijah/packages that referenced this pull request Mar 26, 2026
…r#11137)

Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions)

flutter/flutter@b31548f...1141b2b

2026-02-27 maxime.pontoire@me.com flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362)
2026-02-27 engine-flutter-autoroll@skia.org Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004)
2026-02-27 vegorov@google.com Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883)
2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992)
2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989)
2026-02-27 oss@simonbinder.eu Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004)
2026-02-27 engine-flutter-autoroll@skia.org Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986)
2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980)
2026-02-27 flar@google.com [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886)
2026-02-27 robert.ancell@canonical.com Add fl_view_new_sized_to_content() (flutter/flutter#182924)
2026-02-27 737941+loic-sharma@users.noreply.github.com [Shortcuts] Improve focus node debug labels (flutter/flutter#181834)
2026-02-27 34871572+gmackall@users.noreply.github.com Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516)
2026-02-27 nate.w5687@gmail.com `SizedBox.square()` (flutter/flutter#182731)
2026-02-27 1961493+harryterkelsen@users.noreply.github.com [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912)
2026-02-26 jason-simmons@users.noreply.github.com Roll zlib to 7eda07b1e067 (flutter/flutter#182692)
2026-02-26 bkonyi@google.com [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854)
2026-02-26 34871572+gmackall@users.noreply.github.com Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961)
2026-02-26 engine-flutter-autoroll@skia.org Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957)
2026-02-26 robert.ancell@canonical.com Support sending window constraints in metrics events (flutter/flutter#182921)
2026-02-26 34465683+rkishan516@users.noreply.github.com Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891)
2026-02-26 116356835+AbdeMohlbi@users.noreply.github.com Remove some instances of useMaterial3: true (flutter/flutter#182944)
2026-02-26 serhatguler@hotmail.de [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224)
2026-02-26 chingjun@google.com Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930)
2026-02-26 chingjun@google.com Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931)
2026-02-26 mdebbar@google.com [web] Roll Firefox to 148 (flutter/flutter#182859)
2026-02-26 engine-flutter-autoroll@skia.org Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946)
2026-02-26 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942)
2026-02-26 robert.ancell@canonical.com Add test for WindowPositioner.toString (flutter/flutter#182906)
2026-02-26 robert.ancell@canonical.com Remove unused function prototype (flutter/flutter#182915)
2026-02-26 ahmedsameha1@gmail.com Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531)
2026-02-26 51901607+O-Hannonen@users.noreply.github.com Fix false positives for hit test misses in flutter_test (flutter/flutter#180856)
2026-02-26 116356835+AbdeMohlbi@users.noreply.github.com Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655)
2026-02-26 146823759+brahim-guaali@users.noreply.github.com Use null-aware elements in widgets/routes.dart (flutter/flutter#181242)
2026-02-26 37593616+itsAdityaRathore@users.noreply.github.com Fix typos in method names across multiple files (flutter/flutter#182584)
2026-02-26 brunocorona.alcantar@gmail.com Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785)
2026-02-26 flar@google.com Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916)
2026-02-26 ahmedsameha1@gmail.com Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499)
2026-02-26 srawlins@google.com framework: Use a super-parameter in several missed cases (flutter/flutter#182580)
2026-02-25 nate.w5687@gmail.com `WidgetStatesConstraint` as a mixin (flutter/flutter#181704)
2026-02-25 Rusino@users.noreply.github.com Paint the paragraph as a single image (flutter/flutter#181206)
2026-02-25 rmolivares@renzo-olivares.dev Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642)
2026-02-25 34465683+rkishan516@users.noreply.github.com feat: add few required properties to test widgets app (flutter/flutter#182805)
2026-02-25 prbillingsley89@gmail.com Updates MenuAnchor to respect software keyboard (flutter/flutter#180975)
2026-02-25 jason-simmons@users.noreply.github.com Roll ImGui to v1.92.6-docking (flutter/flutter#182799)
2026-02-25 jason-simmons@users.noreply.github.com Roll GoogleTest to e9907112b472 (flutter/flutter#182795)
2026-02-25 Veselblu@yandex.ru Make positionInlineChildren assert much clearer (flutter/flutter#182093)
...
mboetger pushed a commit to mboetger/flutter that referenced this pull request Mar 26, 2026
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

Impeller has been storing rendering data specific to a single invocation
of a text operation in the TextFrame object itself. Unfortunately, the
TextFrame lives (most commonly, especially in a Flutter app) in the
DisplayList which should be an immutable data store. Even more
importantly, DisplayLists can be shared and appear multiple times in
different graphics contexts within a single frame. This potentially
means that Impeller might store "this TextFrame is rendering at a scale
of 2x" and "this TextFrame is rendering at a scale of 50x" into the same
TextFrame object in the same scene and then try to render that TextFrame
with the most recently stored information for both instances. This issue
was discovered during a code read of the way that glyph caches are
managed in Impeller as mentioned in the targeted issue:

Fixes: flutter#177424

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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.
- [ ] 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.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
mboetger pushed a commit to mboetger/flutter that referenced this pull request Mar 26, 2026
…flutter#183050)

This is a follow-on to flutter#182886
where new information about the Impeller 2-pass rendering system and, in
particular, how it applies to glyph caching was uncovered. Some of the
comments were stale after those discoveries so this PR addresses those
changes.

Most of the changes are added or modified comments.
One obsolete method had a declaration and no definition, the declaration
is removed.
One new structure is moved to a different header file with which it is
more closely associated.

There are no test updates since no implementations were changed.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gaaclarke <30870216+gaaclarke@users.noreply.github.com>
pull Bot pushed a commit to TheRakeshPurohit/flutter that referenced this pull request Jun 3, 2026
While fixing flutter#182886 the
positioning of text shadows was disrupted with all of the shadows being
positioned at `0, 0` coordinates despite the positional arguments to the
text call.

Fixes: flutter#187341

## 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.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.
creatorpiyush pushed a commit to creatorpiyush/packages that referenced this pull request Jun 10, 2026
…r#11137)

Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions)

flutter/flutter@b31548f...1141b2b

2026-02-27 maxime.pontoire@me.com flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362)
2026-02-27 engine-flutter-autoroll@skia.org Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004)
2026-02-27 vegorov@google.com Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883)
2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992)
2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989)
2026-02-27 oss@simonbinder.eu Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004)
2026-02-27 engine-flutter-autoroll@skia.org Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986)
2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980)
2026-02-27 flar@google.com [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886)
2026-02-27 robert.ancell@canonical.com Add fl_view_new_sized_to_content() (flutter/flutter#182924)
2026-02-27 737941+loic-sharma@users.noreply.github.com [Shortcuts] Improve focus node debug labels (flutter/flutter#181834)
2026-02-27 34871572+gmackall@users.noreply.github.com Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516)
2026-02-27 nate.w5687@gmail.com `SizedBox.square()` (flutter/flutter#182731)
2026-02-27 1961493+harryterkelsen@users.noreply.github.com [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912)
2026-02-26 jason-simmons@users.noreply.github.com Roll zlib to 7eda07b1e067 (flutter/flutter#182692)
2026-02-26 bkonyi@google.com [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854)
2026-02-26 34871572+gmackall@users.noreply.github.com Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961)
2026-02-26 engine-flutter-autoroll@skia.org Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957)
2026-02-26 robert.ancell@canonical.com Support sending window constraints in metrics events (flutter/flutter#182921)
2026-02-26 34465683+rkishan516@users.noreply.github.com Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891)
2026-02-26 116356835+AbdeMohlbi@users.noreply.github.com Remove some instances of useMaterial3: true (flutter/flutter#182944)
2026-02-26 serhatguler@hotmail.de [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224)
2026-02-26 chingjun@google.com Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930)
2026-02-26 chingjun@google.com Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931)
2026-02-26 mdebbar@google.com [web] Roll Firefox to 148 (flutter/flutter#182859)
2026-02-26 engine-flutter-autoroll@skia.org Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946)
2026-02-26 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942)
2026-02-26 robert.ancell@canonical.com Add test for WindowPositioner.toString (flutter/flutter#182906)
2026-02-26 robert.ancell@canonical.com Remove unused function prototype (flutter/flutter#182915)
2026-02-26 ahmedsameha1@gmail.com Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531)
2026-02-26 51901607+O-Hannonen@users.noreply.github.com Fix false positives for hit test misses in flutter_test (flutter/flutter#180856)
2026-02-26 116356835+AbdeMohlbi@users.noreply.github.com Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655)
2026-02-26 146823759+brahim-guaali@users.noreply.github.com Use null-aware elements in widgets/routes.dart (flutter/flutter#181242)
2026-02-26 37593616+itsAdityaRathore@users.noreply.github.com Fix typos in method names across multiple files (flutter/flutter#182584)
2026-02-26 brunocorona.alcantar@gmail.com Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785)
2026-02-26 flar@google.com Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916)
2026-02-26 ahmedsameha1@gmail.com Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499)
2026-02-26 srawlins@google.com framework: Use a super-parameter in several missed cases (flutter/flutter#182580)
2026-02-25 nate.w5687@gmail.com `WidgetStatesConstraint` as a mixin (flutter/flutter#181704)
2026-02-25 Rusino@users.noreply.github.com Paint the paragraph as a single image (flutter/flutter#181206)
2026-02-25 rmolivares@renzo-olivares.dev Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642)
2026-02-25 34465683+rkishan516@users.noreply.github.com feat: add few required properties to test widgets app (flutter/flutter#182805)
2026-02-25 prbillingsley89@gmail.com Updates MenuAnchor to respect software keyboard (flutter/flutter#180975)
2026-02-25 jason-simmons@users.noreply.github.com Roll ImGui to v1.92.6-docking (flutter/flutter#182799)
2026-02-25 jason-simmons@users.noreply.github.com Roll GoogleTest to e9907112b472 (flutter/flutter#182795)
2026-02-25 Veselblu@yandex.ru Make positionInlineChildren assert much clearer (flutter/flutter#182093)
...
via-guy pushed a commit to via-guy/flutter that referenced this pull request Jun 26, 2026
While fixing flutter#182886 the
positioning of text shadows was disrupted with all of the shadows being
positioned at `0, 0` coordinates despite the positional arguments to the
text call.

Fixes: flutter#187341

## 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.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

a: text input Entering text in a text field or keyboard related problems e: impeller Impeller rendering backend issues and features requests engine flutter/engine related. See also e: labels. will affect goldens Changes to golden files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[impeller] TextFrame::SetPerFrameData is weird and possibly buggy

2 participants