DlDeferredImageGPUImpeller::ImageWrapper texture thread safety improvements#183429
Conversation
…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
|
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. |
There was a problem hiding this comment.
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.
gaaclarke
left a comment
There was a problem hiding this comment.
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?
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: ...
…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
…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: ...
…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
…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
…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: ...
See discussion at #183046