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 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: ...
…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 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: ...
…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 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: ...
See discussion at #183046