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 [email protected] [web] Updates to the README (flutter/flutter#176292)
2026-03-10 [email protected] [Impeller] Do not log VK_ERROR_SURFACE_LOST_KHR errors returned by vkAcquireNextImageKHR (flutter/flutter#183338)
2026-03-10 [email protected] DlDeferredImageGPUImpeller::ImageWrapper texture thread safety improvements (flutter/flutter#183429)
2026-03-10 [email protected] refactor: remove material imports from system_context_menu_test, table_test (flutter/flutter#183368)
2026-03-10 [email protected] refactor: remove material from baseline_test, slivers_test (flutter/flutter#183367)
2026-03-10 [email protected] Migrated circle sdf to euclidean 2d derivative (flutter/flutter#183184)
2026-03-10 [email protected] Roll Packages from c717018 to ee460d6 (2 revisions) (flutter/flutter#183451)
2026-03-10 [email protected] Roll Skia from 68f24903b592 to 4b35832cc7ea (1 revision) (flutter/flutter#183449)
2026-03-10 [email protected] Roll Skia from 8eda160375ea to 68f24903b592 (1 revision) (flutter/flutter#183444)
2026-03-10 [email protected] Roll Skia from e7b957806202 to 8eda160375ea (2 revisions) (flutter/flutter#183440)
2026-03-10 [email protected] Roll Fuchsia Linux SDK from ox-II3wPpa818y78_... to 8C_qfgWgoNhkV0_Mn... (flutter/flutter#183437)
2026-03-10 [email protected] Roll Skia from 887df915a95e to e7b957806202 (1 revision) (flutter/flutter#183434)
2026-03-10 [email protected] Remove material from scrollable_test.dart (flutter/flutter#181429)
2026-03-09 [email protected] Update 'a: text input' globs (flutter/flutter#183405)
2026-03-09 [email protected] Roll Skia from 3aa442e0624a to 887df915a95e (7 revisions) (flutter/flutter#183423)
2026-03-09 [email protected] Adds geometry dirty nodes (flutter/flutter#180375)
2026-03-09 [email protected] Roll Dart SDK from 5b1aa4f8db14 to ebef6c849489 (1 revision) (flutter/flutter#183417)
2026-03-09 [email protected] Add Alexander Dmitriev to AUTHORS (flutter/flutter#183357)
2026-03-09 [email protected] Update org triage (flutter/flutter#183254)
2026-03-09 [email protected] [Android] Avoid plugin auto-registration during FlutterFragmentActivity recreate timing window (flutter/flutter#182963)
2026-03-09 [email protected] Standardize skia includes. (flutter/flutter#183404)
2026-03-09 [email protected] Add a note to `arcTo` docs about the 2PI drawing angle issue (flutter/flutter#183293)
2026-03-09 [email protected] Roll pub packages (flutter/flutter#183411)
2026-03-09 [email protected] [ Tool ] Fix --print-dtd not working for web targets (flutter/flutter#183171)
2026-03-09 [email protected] Add await or ignore lint to flutter_driver unawaited callsites (flutter/flutter#183334)
2026-03-09 [email protected] Cleanup MockVulkan when the vulkan instance is destroyed (flutter/flutter#183324)
2026-03-09 [email protected] Updates tests commit (flutter/flutter#183301)
2026-03-09 [email protected] Implements `ClipRSuperellipse` on backdrop filter on platform view (flutter/flutter#182643)
2026-03-09 [email protected] Roll Skia from ea4fd0e1472a to 3aa442e0624a (1 revision) (flutter/flutter#183397)
2026-03-09 [email protected] Roll Dart SDK from 050b2f646425 to 5b1aa4f8db14 (1 revision) (flutter/flutter#183393)
2026-03-09 [email protected] Roll Packages from fe3de64 to c717018 (10 revisions) (flutter/flutter#183396)
2026-03-09 [email protected] Roll Skia from a83dca75c531 to ea4fd0e1472a (1 revision) (flutter/flutter#183389)
2026-03-09 [email protected] Roll Skia from 254e44141861 to a83dca75c531 (7 revisions) (flutter/flutter#183388)
2026-03-09 [email protected] Roll Fuchsia Linux SDK from giLoee6arX5CRHuRh... to ox-II3wPpa818y78_... (flutter/flutter#183386)
2026-03-09 [email protected] Roll Dart SDK from 1604910613c7 to 050b2f646425 (1 revision) (flutter/flutter#183383)
2026-03-08 [email protected] 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 [email protected] 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 [email protected] [web] Updates to the README (flutter/flutter#176292)
2026-03-10 [email protected] [Impeller] Do not log VK_ERROR_SURFACE_LOST_KHR errors returned by vkAcquireNextImageKHR (flutter/flutter#183338)
2026-03-10 [email protected] DlDeferredImageGPUImpeller::ImageWrapper texture thread safety improvements (flutter/flutter#183429)
2026-03-10 [email protected] refactor: remove material imports from system_context_menu_test, table_test (flutter/flutter#183368)
2026-03-10 [email protected] refactor: remove material from baseline_test, slivers_test (flutter/flutter#183367)
2026-03-10 [email protected] Migrated circle sdf to euclidean 2d derivative (flutter/flutter#183184)
2026-03-10 [email protected] Roll Packages from c717018 to ee460d6 (2 revisions) (flutter/flutter#183451)
2026-03-10 [email protected] Roll Skia from 68f24903b592 to 4b35832cc7ea (1 revision) (flutter/flutter#183449)
2026-03-10 [email protected] Roll Skia from 8eda160375ea to 68f24903b592 (1 revision) (flutter/flutter#183444)
2026-03-10 [email protected] Roll Skia from e7b957806202 to 8eda160375ea (2 revisions) (flutter/flutter#183440)
2026-03-10 [email protected] Roll Fuchsia Linux SDK from ox-II3wPpa818y78_... to 8C_qfgWgoNhkV0_Mn... (flutter/flutter#183437)
2026-03-10 [email protected] Roll Skia from 887df915a95e to e7b957806202 (1 revision) (flutter/flutter#183434)
2026-03-10 [email protected] Remove material from scrollable_test.dart (flutter/flutter#181429)
2026-03-09 [email protected] Update 'a: text input' globs (flutter/flutter#183405)
2026-03-09 [email protected] Roll Skia from 3aa442e0624a to 887df915a95e (7 revisions) (flutter/flutter#183423)
2026-03-09 [email protected] Adds geometry dirty nodes (flutter/flutter#180375)
2026-03-09 [email protected] Roll Dart SDK from 5b1aa4f8db14 to ebef6c849489 (1 revision) (flutter/flutter#183417)
2026-03-09 [email protected] Add Alexander Dmitriev to AUTHORS (flutter/flutter#183357)
2026-03-09 [email protected] Update org triage (flutter/flutter#183254)
2026-03-09 [email protected] [Android] Avoid plugin auto-registration during FlutterFragmentActivity recreate timing window (flutter/flutter#182963)
2026-03-09 [email protected] Standardize skia includes. (flutter/flutter#183404)
2026-03-09 [email protected] Add a note to `arcTo` docs about the 2PI drawing angle issue (flutter/flutter#183293)
2026-03-09 [email protected] Roll pub packages (flutter/flutter#183411)
2026-03-09 [email protected] [ Tool ] Fix --print-dtd not working for web targets (flutter/flutter#183171)
2026-03-09 [email protected] Add await or ignore lint to flutter_driver unawaited callsites (flutter/flutter#183334)
2026-03-09 [email protected] Cleanup MockVulkan when the vulkan instance is destroyed (flutter/flutter#183324)
2026-03-09 [email protected] Updates tests commit (flutter/flutter#183301)
2026-03-09 [email protected] Implements `ClipRSuperellipse` on backdrop filter on platform view (flutter/flutter#182643)
2026-03-09 [email protected] Roll Skia from ea4fd0e1472a to 3aa442e0624a (1 revision) (flutter/flutter#183397)
2026-03-09 [email protected] Roll Dart SDK from 050b2f646425 to 5b1aa4f8db14 (1 revision) (flutter/flutter#183393)
2026-03-09 [email protected] Roll Packages from fe3de64 to c717018 (10 revisions) (flutter/flutter#183396)
2026-03-09 [email protected] Roll Skia from a83dca75c531 to ea4fd0e1472a (1 revision) (flutter/flutter#183389)
2026-03-09 [email protected] Roll Skia from 254e44141861 to a83dca75c531 (7 revisions) (flutter/flutter#183388)
2026-03-09 [email protected] Roll Fuchsia Linux SDK from giLoee6arX5CRHuRh... to ox-II3wPpa818y78_... (flutter/flutter#183386)
2026-03-09 [email protected] Roll Dart SDK from 1604910613c7 to 050b2f646425 (1 revision) (flutter/flutter#183383)
2026-03-08 [email protected] 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 [email protected] 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 [email protected] [web] Updates to the README (flutter/flutter#176292)
2026-03-10 [email protected] [Impeller] Do not log VK_ERROR_SURFACE_LOST_KHR errors returned by vkAcquireNextImageKHR (flutter/flutter#183338)
2026-03-10 [email protected] DlDeferredImageGPUImpeller::ImageWrapper texture thread safety improvements (flutter/flutter#183429)
2026-03-10 [email protected] refactor: remove material imports from system_context_menu_test, table_test (flutter/flutter#183368)
2026-03-10 [email protected] refactor: remove material from baseline_test, slivers_test (flutter/flutter#183367)
2026-03-10 [email protected] Migrated circle sdf to euclidean 2d derivative (flutter/flutter#183184)
2026-03-10 [email protected] Roll Packages from c717018 to ee460d6 (2 revisions) (flutter/flutter#183451)
2026-03-10 [email protected] Roll Skia from 68f24903b592 to 4b35832cc7ea (1 revision) (flutter/flutter#183449)
2026-03-10 [email protected] Roll Skia from 8eda160375ea to 68f24903b592 (1 revision) (flutter/flutter#183444)
2026-03-10 [email protected] Roll Skia from e7b957806202 to 8eda160375ea (2 revisions) (flutter/flutter#183440)
2026-03-10 [email protected] Roll Fuchsia Linux SDK from ox-II3wPpa818y78_... to 8C_qfgWgoNhkV0_Mn... (flutter/flutter#183437)
2026-03-10 [email protected] Roll Skia from 887df915a95e to e7b957806202 (1 revision) (flutter/flutter#183434)
2026-03-10 [email protected] Remove material from scrollable_test.dart (flutter/flutter#181429)
2026-03-09 [email protected] Update 'a: text input' globs (flutter/flutter#183405)
2026-03-09 [email protected] Roll Skia from 3aa442e0624a to 887df915a95e (7 revisions) (flutter/flutter#183423)
2026-03-09 [email protected] Adds geometry dirty nodes (flutter/flutter#180375)
2026-03-09 [email protected] Roll Dart SDK from 5b1aa4f8db14 to ebef6c849489 (1 revision) (flutter/flutter#183417)
2026-03-09 [email protected] Add Alexander Dmitriev to AUTHORS (flutter/flutter#183357)
2026-03-09 [email protected] Update org triage (flutter/flutter#183254)
2026-03-09 [email protected] [Android] Avoid plugin auto-registration during FlutterFragmentActivity recreate timing window (flutter/flutter#182963)
2026-03-09 [email protected] Standardize skia includes. (flutter/flutter#183404)
2026-03-09 [email protected] Add a note to `arcTo` docs about the 2PI drawing angle issue (flutter/flutter#183293)
2026-03-09 [email protected] Roll pub packages (flutter/flutter#183411)
2026-03-09 [email protected] [ Tool ] Fix --print-dtd not working for web targets (flutter/flutter#183171)
2026-03-09 [email protected] Add await or ignore lint to flutter_driver unawaited callsites (flutter/flutter#183334)
2026-03-09 [email protected] Cleanup MockVulkan when the vulkan instance is destroyed (flutter/flutter#183324)
2026-03-09 [email protected] Updates tests commit (flutter/flutter#183301)
2026-03-09 [email protected] Implements `ClipRSuperellipse` on backdrop filter on platform view (flutter/flutter#182643)
2026-03-09 [email protected] Roll Skia from ea4fd0e1472a to 3aa442e0624a (1 revision) (flutter/flutter#183397)
2026-03-09 [email protected] Roll Dart SDK from 050b2f646425 to 5b1aa4f8db14 (1 revision) (flutter/flutter#183393)
2026-03-09 [email protected] Roll Packages from fe3de64 to c717018 (10 revisions) (flutter/flutter#183396)
2026-03-09 [email protected] Roll Skia from a83dca75c531 to ea4fd0e1472a (1 revision) (flutter/flutter#183389)
2026-03-09 [email protected] Roll Skia from 254e44141861 to a83dca75c531 (7 revisions) (flutter/flutter#183388)
2026-03-09 [email protected] Roll Fuchsia Linux SDK from giLoee6arX5CRHuRh... to ox-II3wPpa818y78_... (flutter/flutter#183386)
2026-03-09 [email protected] Roll Dart SDK from 1604910613c7 to 050b2f646425 (1 revision) (flutter/flutter#183383)
2026-03-08 [email protected] 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 [email protected] 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