diff --git a/lib/ui/painting/image_decoder_impeller.cc b/lib/ui/painting/image_decoder_impeller.cc index adb06b435fcb7..6a1118954a9be 100644 --- a/lib/ui/painting/image_decoder_impeller.cc +++ b/lib/ui/painting/image_decoder_impeller.cc @@ -483,6 +483,9 @@ ImageDecoderImpeller::UploadTextureToStorage( } texture->SetLabel(impeller::SPrintF("ui.Image(%p)", texture.get()).c_str()); + + context->DisposeThreadLocalCachedResources(); + return std::make_pair(impeller::DlImageImpeller::Make(std::move(texture)), std::string()); } diff --git a/lib/ui/painting/image_decoder_unittests.cc b/lib/ui/painting/image_decoder_unittests.cc index d8f76671ae09b..69096eeca3866 100644 --- a/lib/ui/painting/image_decoder_unittests.cc +++ b/lib/ui/painting/image_decoder_unittests.cc @@ -92,8 +92,12 @@ class TestImpellerContext : public impeller::Context { tasks_.clear(); } + void DisposeThreadLocalCachedResources() override { did_dispose_ = true; } + void Shutdown() override {} + bool DidDisposeResources() const { return did_dispose_; } + mutable size_t command_buffer_count_ = 0; private: @@ -103,6 +107,7 @@ class TestImpellerContext : public impeller::Context { }; std::vector tasks_; std::shared_ptr capabilities_; + bool did_dispose_ = false; }; } // namespace impeller @@ -367,12 +372,14 @@ TEST_F(ImageDecoderFixtureTest, ImpellerUploadToSharedNoGpu) { EXPECT_EQ(no_gpu_access_context->command_buffer_count_, 0ul); EXPECT_FALSE(invoked); + EXPECT_EQ(no_gpu_access_context->DidDisposeResources(), false); auto result = ImageDecoderImpeller::UploadTextureToStorage( no_gpu_access_context, bitmap); ASSERT_EQ(no_gpu_access_context->command_buffer_count_, 0ul); ASSERT_EQ(result.second, ""); + EXPECT_EQ(no_gpu_access_context->DidDisposeResources(), true); no_gpu_access_context->FlushTasks(/*fail=*/true); }