mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
[Impeller] fix memory leak during gif upload. (flutter/engine#55920)
Fixes https://github.com/flutter/flutter/issues/156728 Need to periodically flush the TLS command buffer pools in multiframe codec just like single frame codec.
This commit is contained in:
parent
a8961f9449
commit
5c6ab792a2
@ -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());
|
||||
}
|
||||
|
||||
@ -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<PendingTask> tasks_;
|
||||
std::shared_ptr<const Capabilities> 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);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user