Skip to content

DlDeferredImageGPUImpeller::ImageWrapper texture thread safety improvements#183429

Merged
auto-submit[bot] merged 2 commits into
flutter:masterfrom
jason-simmons:dl_deferred_image_texture_atomic
Mar 10, 2026
Merged

DlDeferredImageGPUImpeller::ImageWrapper texture thread safety improvements#183429
auto-submit[bot] merged 2 commits into
flutter:masterfrom
jason-simmons:dl_deferred_image_texture_atomic

Conversation

@jason-simmons

Copy link
Copy Markdown
Member
  • Use atomic read/write operations on ImageWrapper::texture_ (which is accessed from both the raster and UI threads)
  • Remove an assert that restricted ImageWrapper::texture() to the raster thread
  • Avoid calling DlImage::skia_image() on the UI thread in CanvasImage::colorSpace(). The DlDeferredImageGPUSkia::skia_image() implementation is only usable on the raster thread.

See discussion at #183046

…ements

* Use atomic read/write operations on ImageWrapper::texture_ (which is accessed from both the raster and UI threads)
* Remove an assert that restricted ImageWrapper::texture() to the raster thread
* Avoid calling DlImage::skia_image() on the UI thread in CanvasImage::colorSpace().  The DlDeferredImageGPUSkia::skia_image() implementation is only usable on the raster thread.

See discussion at flutter#183046
@jason-simmons jason-simmons requested a review from gaaclarke March 10, 2026 00:57
@flutter-dashboard

Copy link
Copy Markdown

It looks like this pull request may not have tests. Please make sure to add tests or get an explicit test exemption before merging.

If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix?

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. If you believe this PR qualifies for a test exemption, contact "@test-exemption-reviewer" in the #hackers channel in Discord (don't just cc them here, they won't see it!). The test exemption team is a small volunteer group, so all reviewers should feel empowered to ask for tests, without delegating that responsibility entirely to the test exemption group.

@github-actions github-actions Bot added the engine flutter/engine related. See also e: labels. label Mar 10, 2026

@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 improves thread safety by using atomic operations for accessing ImageWrapper::texture_, which can be accessed from both the UI and raster threads. It also removes a problematic call to DlImage::skia_image() from the UI thread. My review includes suggestions to adhere to the C++ style guide by removing a const qualifier from a by-value return type, and to refactor isTextureBacked() to reuse the new texture() method for better code consistency and maintainability.

Comment thread engine/src/flutter/lib/ui/painting/display_list_deferred_image_gpu_impeller.cc Outdated
Comment thread engine/src/flutter/lib/ui/painting/display_list_deferred_image_gpu_impeller.h Outdated

@gaaclarke gaaclarke left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

lgtm, thanks for moving that over. I'm surprised you didn't get the msvc errors, i guess it is able to pick up the clang pragmas?

@jason-simmons jason-simmons added the autosubmit Merge PR when tree becomes green via auto submit App label Mar 10, 2026
@auto-submit auto-submit Bot added this pull request to the merge queue Mar 10, 2026
Merged via the queue into flutter:master with commit 7eb606b Mar 10, 2026
185 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Mar 10, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Mar 10, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Mar 10, 2026
Roll Flutter from 2ec61af30672 to 195ae7b3a122 (36 revisions)

flutter/flutter@2ec61af...195ae7b

2026-03-10 mdebbar@google.com [web] Updates to the README (flutter/flutter#176292)
2026-03-10 jason-simmons@users.noreply.github.com [Impeller] Do not log VK_ERROR_SURFACE_LOST_KHR errors returned by vkAcquireNextImageKHR (flutter/flutter#183338)
2026-03-10 jason-simmons@users.noreply.github.com DlDeferredImageGPUImpeller::ImageWrapper texture thread safety improvements (flutter/flutter#183429)
2026-03-10 34465683+rkishan516@users.noreply.github.com refactor: remove material imports from system_context_menu_test, table_test (flutter/flutter#183368)
2026-03-10 34465683+rkishan516@users.noreply.github.com refactor: remove material from baseline_test, slivers_test (flutter/flutter#183367)
2026-03-10 30870216+gaaclarke@users.noreply.github.com Migrated circle sdf to euclidean 2d derivative (flutter/flutter#183184)
2026-03-10 engine-flutter-autoroll@skia.org Roll Packages from c717018 to ee460d6 (2 revisions) (flutter/flutter#183451)
2026-03-10 engine-flutter-autoroll@skia.org Roll Skia from 68f24903b592 to 4b35832cc7ea (1 revision) (flutter/flutter#183449)
2026-03-10 engine-flutter-autoroll@skia.org Roll Skia from 8eda160375ea to 68f24903b592 (1 revision) (flutter/flutter#183444)
2026-03-10 engine-flutter-autoroll@skia.org Roll Skia from e7b957806202 to 8eda160375ea (2 revisions) (flutter/flutter#183440)
2026-03-10 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from ox-II3wPpa818y78_... to 8C_qfgWgoNhkV0_Mn... (flutter/flutter#183437)
2026-03-10 engine-flutter-autoroll@skia.org Roll Skia from 887df915a95e to e7b957806202 (1 revision) (flutter/flutter#183434)
2026-03-10 brackenavaron@gmail.com Remove material from scrollable_test.dart (flutter/flutter#181429)
2026-03-09 737941+loic-sharma@users.noreply.github.com Update 'a: text input' globs (flutter/flutter#183405)
2026-03-09 engine-flutter-autoroll@skia.org Roll Skia from 3aa442e0624a to 887df915a95e (7 revisions) (flutter/flutter#183423)
2026-03-09 47866232+chunhtai@users.noreply.github.com Adds geometry dirty nodes (flutter/flutter#180375)
2026-03-09 engine-flutter-autoroll@skia.org Roll Dart SDK from 5b1aa4f8db14 to ebef6c849489 (1 revision) (flutter/flutter#183417)
2026-03-09 Veselblu@yandex.ru Add Alexander Dmitriev to AUTHORS (flutter/flutter#183357)
2026-03-09 katelovett@google.com Update org triage (flutter/flutter#183254)
2026-03-09 8847263+littleGnAl@users.noreply.github.com [Android] Avoid plugin auto-registration during FlutterFragmentActivity recreate timing window (flutter/flutter#182963)
2026-03-09 chingjun@google.com Standardize skia includes. (flutter/flutter#183404)
2026-03-09 116356835+AbdeMohlbi@users.noreply.github.com Add a note to `arcTo` docs about the 2PI drawing angle issue (flutter/flutter#183293)
2026-03-09 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#183411)
2026-03-09 bkonyi@google.com [ Tool ] Fix --print-dtd not working for web targets (flutter/flutter#183171)
2026-03-09 victorsanniay@gmail.com Add await or ignore lint to flutter_driver unawaited callsites (flutter/flutter#183334)
2026-03-09 30870216+gaaclarke@users.noreply.github.com Cleanup MockVulkan when the vulkan instance is destroyed (flutter/flutter#183324)
2026-03-09 52160996+FMorschel@users.noreply.github.com Updates tests commit (flutter/flutter#183301)
2026-03-09 22373191+Hari-07@users.noreply.github.com Implements `ClipRSuperellipse` on backdrop filter on platform view (flutter/flutter#182643)
2026-03-09 engine-flutter-autoroll@skia.org Roll Skia from ea4fd0e1472a to 3aa442e0624a (1 revision) (flutter/flutter#183397)
2026-03-09 engine-flutter-autoroll@skia.org Roll Dart SDK from 050b2f646425 to 5b1aa4f8db14 (1 revision) (flutter/flutter#183393)
2026-03-09 engine-flutter-autoroll@skia.org Roll Packages from fe3de64 to c717018 (10 revisions) (flutter/flutter#183396)
2026-03-09 engine-flutter-autoroll@skia.org Roll Skia from a83dca75c531 to ea4fd0e1472a (1 revision) (flutter/flutter#183389)
2026-03-09 engine-flutter-autoroll@skia.org Roll Skia from 254e44141861 to a83dca75c531 (7 revisions) (flutter/flutter#183388)
2026-03-09 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from giLoee6arX5CRHuRh... to ox-II3wPpa818y78_... (flutter/flutter#183386)
2026-03-09 engine-flutter-autoroll@skia.org Roll Dart SDK from 1604910613c7 to 050b2f646425 (1 revision) (flutter/flutter#183383)
2026-03-08 engine-flutter-autoroll@skia.org Roll Skia from af994ae4d990 to 254e44141861 (2 revisions) (flutter/flutter#183377)

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

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

To report a problem with the AutoRoller itself, please file a bug:
...
xxxOVALxxx pushed a commit to xxxOVALxxx/flutter that referenced this pull request Mar 10, 2026
…ements (flutter#183429)

* Use atomic read/write operations on ImageWrapper::texture_ (which is
accessed from both the raster and UI threads)
* Remove an assert that restricted ImageWrapper::texture() to the raster
thread
* Avoid calling DlImage::skia_image() on the UI thread in
CanvasImage::colorSpace(). The DlDeferredImageGPUSkia::skia_image()
implementation is only usable on the raster thread.

See discussion at flutter#183046
okorohelijah pushed a commit to okorohelijah/packages that referenced this pull request Mar 26, 2026
…r#11222)

Roll Flutter from 2ec61af30672 to 195ae7b3a122 (36 revisions)

flutter/flutter@2ec61af...195ae7b

2026-03-10 mdebbar@google.com [web] Updates to the README (flutter/flutter#176292)
2026-03-10 jason-simmons@users.noreply.github.com [Impeller] Do not log VK_ERROR_SURFACE_LOST_KHR errors returned by vkAcquireNextImageKHR (flutter/flutter#183338)
2026-03-10 jason-simmons@users.noreply.github.com DlDeferredImageGPUImpeller::ImageWrapper texture thread safety improvements (flutter/flutter#183429)
2026-03-10 34465683+rkishan516@users.noreply.github.com refactor: remove material imports from system_context_menu_test, table_test (flutter/flutter#183368)
2026-03-10 34465683+rkishan516@users.noreply.github.com refactor: remove material from baseline_test, slivers_test (flutter/flutter#183367)
2026-03-10 30870216+gaaclarke@users.noreply.github.com Migrated circle sdf to euclidean 2d derivative (flutter/flutter#183184)
2026-03-10 engine-flutter-autoroll@skia.org Roll Packages from c717018 to ee460d6 (2 revisions) (flutter/flutter#183451)
2026-03-10 engine-flutter-autoroll@skia.org Roll Skia from 68f24903b592 to 4b35832cc7ea (1 revision) (flutter/flutter#183449)
2026-03-10 engine-flutter-autoroll@skia.org Roll Skia from 8eda160375ea to 68f24903b592 (1 revision) (flutter/flutter#183444)
2026-03-10 engine-flutter-autoroll@skia.org Roll Skia from e7b957806202 to 8eda160375ea (2 revisions) (flutter/flutter#183440)
2026-03-10 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from ox-II3wPpa818y78_... to 8C_qfgWgoNhkV0_Mn... (flutter/flutter#183437)
2026-03-10 engine-flutter-autoroll@skia.org Roll Skia from 887df915a95e to e7b957806202 (1 revision) (flutter/flutter#183434)
2026-03-10 brackenavaron@gmail.com Remove material from scrollable_test.dart (flutter/flutter#181429)
2026-03-09 737941+loic-sharma@users.noreply.github.com Update 'a: text input' globs (flutter/flutter#183405)
2026-03-09 engine-flutter-autoroll@skia.org Roll Skia from 3aa442e0624a to 887df915a95e (7 revisions) (flutter/flutter#183423)
2026-03-09 47866232+chunhtai@users.noreply.github.com Adds geometry dirty nodes (flutter/flutter#180375)
2026-03-09 engine-flutter-autoroll@skia.org Roll Dart SDK from 5b1aa4f8db14 to ebef6c849489 (1 revision) (flutter/flutter#183417)
2026-03-09 Veselblu@yandex.ru Add Alexander Dmitriev to AUTHORS (flutter/flutter#183357)
2026-03-09 katelovett@google.com Update org triage (flutter/flutter#183254)
2026-03-09 8847263+littleGnAl@users.noreply.github.com [Android] Avoid plugin auto-registration during FlutterFragmentActivity recreate timing window (flutter/flutter#182963)
2026-03-09 chingjun@google.com Standardize skia includes. (flutter/flutter#183404)
2026-03-09 116356835+AbdeMohlbi@users.noreply.github.com Add a note to `arcTo` docs about the 2PI drawing angle issue (flutter/flutter#183293)
2026-03-09 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#183411)
2026-03-09 bkonyi@google.com [ Tool ] Fix --print-dtd not working for web targets (flutter/flutter#183171)
2026-03-09 victorsanniay@gmail.com Add await or ignore lint to flutter_driver unawaited callsites (flutter/flutter#183334)
2026-03-09 30870216+gaaclarke@users.noreply.github.com Cleanup MockVulkan when the vulkan instance is destroyed (flutter/flutter#183324)
2026-03-09 52160996+FMorschel@users.noreply.github.com Updates tests commit (flutter/flutter#183301)
2026-03-09 22373191+Hari-07@users.noreply.github.com Implements `ClipRSuperellipse` on backdrop filter on platform view (flutter/flutter#182643)
2026-03-09 engine-flutter-autoroll@skia.org Roll Skia from ea4fd0e1472a to 3aa442e0624a (1 revision) (flutter/flutter#183397)
2026-03-09 engine-flutter-autoroll@skia.org Roll Dart SDK from 050b2f646425 to 5b1aa4f8db14 (1 revision) (flutter/flutter#183393)
2026-03-09 engine-flutter-autoroll@skia.org Roll Packages from fe3de64 to c717018 (10 revisions) (flutter/flutter#183396)
2026-03-09 engine-flutter-autoroll@skia.org Roll Skia from a83dca75c531 to ea4fd0e1472a (1 revision) (flutter/flutter#183389)
2026-03-09 engine-flutter-autoroll@skia.org Roll Skia from 254e44141861 to a83dca75c531 (7 revisions) (flutter/flutter#183388)
2026-03-09 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from giLoee6arX5CRHuRh... to ox-II3wPpa818y78_... (flutter/flutter#183386)
2026-03-09 engine-flutter-autoroll@skia.org Roll Dart SDK from 1604910613c7 to 050b2f646425 (1 revision) (flutter/flutter#183383)
2026-03-08 engine-flutter-autoroll@skia.org Roll Skia from af994ae4d990 to 254e44141861 (2 revisions) (flutter/flutter#183377)

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

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

To report a problem with the AutoRoller itself, please file a bug:
...
mboetger pushed a commit to mboetger/flutter that referenced this pull request Mar 26, 2026
…ements (flutter#183429)

* Use atomic read/write operations on ImageWrapper::texture_ (which is
accessed from both the raster and UI threads)
* Remove an assert that restricted ImageWrapper::texture() to the raster
thread
* Avoid calling DlImage::skia_image() on the UI thread in
CanvasImage::colorSpace(). The DlDeferredImageGPUSkia::skia_image()
implementation is only usable on the raster thread.

See discussion at flutter#183046
ahmedsameha1 pushed a commit to ahmedsameha1/flutter that referenced this pull request Apr 14, 2026
…ements (flutter#183429)

* Use atomic read/write operations on ImageWrapper::texture_ (which is
accessed from both the raster and UI threads)
* Remove an assert that restricted ImageWrapper::texture() to the raster
thread
* Avoid calling DlImage::skia_image() on the UI thread in
CanvasImage::colorSpace(). The DlDeferredImageGPUSkia::skia_image()
implementation is only usable on the raster thread.

See discussion at flutter#183046
creatorpiyush pushed a commit to creatorpiyush/packages that referenced this pull request Jun 10, 2026
…r#11222)

Roll Flutter from 2ec61af30672 to 195ae7b3a122 (36 revisions)

flutter/flutter@2ec61af...195ae7b

2026-03-10 mdebbar@google.com [web] Updates to the README (flutter/flutter#176292)
2026-03-10 jason-simmons@users.noreply.github.com [Impeller] Do not log VK_ERROR_SURFACE_LOST_KHR errors returned by vkAcquireNextImageKHR (flutter/flutter#183338)
2026-03-10 jason-simmons@users.noreply.github.com DlDeferredImageGPUImpeller::ImageWrapper texture thread safety improvements (flutter/flutter#183429)
2026-03-10 34465683+rkishan516@users.noreply.github.com refactor: remove material imports from system_context_menu_test, table_test (flutter/flutter#183368)
2026-03-10 34465683+rkishan516@users.noreply.github.com refactor: remove material from baseline_test, slivers_test (flutter/flutter#183367)
2026-03-10 30870216+gaaclarke@users.noreply.github.com Migrated circle sdf to euclidean 2d derivative (flutter/flutter#183184)
2026-03-10 engine-flutter-autoroll@skia.org Roll Packages from c717018 to ee460d6 (2 revisions) (flutter/flutter#183451)
2026-03-10 engine-flutter-autoroll@skia.org Roll Skia from 68f24903b592 to 4b35832cc7ea (1 revision) (flutter/flutter#183449)
2026-03-10 engine-flutter-autoroll@skia.org Roll Skia from 8eda160375ea to 68f24903b592 (1 revision) (flutter/flutter#183444)
2026-03-10 engine-flutter-autoroll@skia.org Roll Skia from e7b957806202 to 8eda160375ea (2 revisions) (flutter/flutter#183440)
2026-03-10 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from ox-II3wPpa818y78_... to 8C_qfgWgoNhkV0_Mn... (flutter/flutter#183437)
2026-03-10 engine-flutter-autoroll@skia.org Roll Skia from 887df915a95e to e7b957806202 (1 revision) (flutter/flutter#183434)
2026-03-10 brackenavaron@gmail.com Remove material from scrollable_test.dart (flutter/flutter#181429)
2026-03-09 737941+loic-sharma@users.noreply.github.com Update 'a: text input' globs (flutter/flutter#183405)
2026-03-09 engine-flutter-autoroll@skia.org Roll Skia from 3aa442e0624a to 887df915a95e (7 revisions) (flutter/flutter#183423)
2026-03-09 47866232+chunhtai@users.noreply.github.com Adds geometry dirty nodes (flutter/flutter#180375)
2026-03-09 engine-flutter-autoroll@skia.org Roll Dart SDK from 5b1aa4f8db14 to ebef6c849489 (1 revision) (flutter/flutter#183417)
2026-03-09 Veselblu@yandex.ru Add Alexander Dmitriev to AUTHORS (flutter/flutter#183357)
2026-03-09 katelovett@google.com Update org triage (flutter/flutter#183254)
2026-03-09 8847263+littleGnAl@users.noreply.github.com [Android] Avoid plugin auto-registration during FlutterFragmentActivity recreate timing window (flutter/flutter#182963)
2026-03-09 chingjun@google.com Standardize skia includes. (flutter/flutter#183404)
2026-03-09 116356835+AbdeMohlbi@users.noreply.github.com Add a note to `arcTo` docs about the 2PI drawing angle issue (flutter/flutter#183293)
2026-03-09 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#183411)
2026-03-09 bkonyi@google.com [ Tool ] Fix --print-dtd not working for web targets (flutter/flutter#183171)
2026-03-09 victorsanniay@gmail.com Add await or ignore lint to flutter_driver unawaited callsites (flutter/flutter#183334)
2026-03-09 30870216+gaaclarke@users.noreply.github.com Cleanup MockVulkan when the vulkan instance is destroyed (flutter/flutter#183324)
2026-03-09 52160996+FMorschel@users.noreply.github.com Updates tests commit (flutter/flutter#183301)
2026-03-09 22373191+Hari-07@users.noreply.github.com Implements `ClipRSuperellipse` on backdrop filter on platform view (flutter/flutter#182643)
2026-03-09 engine-flutter-autoroll@skia.org Roll Skia from ea4fd0e1472a to 3aa442e0624a (1 revision) (flutter/flutter#183397)
2026-03-09 engine-flutter-autoroll@skia.org Roll Dart SDK from 050b2f646425 to 5b1aa4f8db14 (1 revision) (flutter/flutter#183393)
2026-03-09 engine-flutter-autoroll@skia.org Roll Packages from fe3de64 to c717018 (10 revisions) (flutter/flutter#183396)
2026-03-09 engine-flutter-autoroll@skia.org Roll Skia from a83dca75c531 to ea4fd0e1472a (1 revision) (flutter/flutter#183389)
2026-03-09 engine-flutter-autoroll@skia.org Roll Skia from 254e44141861 to a83dca75c531 (7 revisions) (flutter/flutter#183388)
2026-03-09 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from giLoee6arX5CRHuRh... to ox-II3wPpa818y78_... (flutter/flutter#183386)
2026-03-09 engine-flutter-autoroll@skia.org Roll Dart SDK from 1604910613c7 to 050b2f646425 (1 revision) (flutter/flutter#183383)
2026-03-08 engine-flutter-autoroll@skia.org Roll Skia from af994ae4d990 to 254e44141861 (2 revisions) (flutter/flutter#183377)

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

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

To report a problem with the AutoRoller itself, please file a bug:
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

engine flutter/engine related. See also e: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants