From 1f8d5c7b84a781d421d3f5c0919eac33788f5de1 Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Fri, 13 Feb 2026 22:37:03 +0000 Subject: [PATCH] [Impeller] libImpeller: Dispose thread local caches on each Vulkan frame The Impeller Vulkan back end caches command pools in thread-local storage. These caches can grow unbounded unless the embedder calls ContextVK::DisposeThreadLocalCachedResources() This PR ensures that libImpeller Vulkan apps do this on each frame by calling DisposeThreadLocalCachedResources inside the ImpellerVulkanSwapchainAcquireNextSurfaceNew API. --- .../impeller/toolkit/interop/backend/vulkan/swapchain_vk.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/engine/src/flutter/impeller/toolkit/interop/backend/vulkan/swapchain_vk.cc b/engine/src/flutter/impeller/toolkit/interop/backend/vulkan/swapchain_vk.cc index ae55da72640..ffd91ffce8b 100644 --- a/engine/src/flutter/impeller/toolkit/interop/backend/vulkan/swapchain_vk.cc +++ b/engine/src/flutter/impeller/toolkit/interop/backend/vulkan/swapchain_vk.cc @@ -47,6 +47,9 @@ ScopedObject SwapchainVK::AcquireNextSurface() { return nullptr; } + auto& context_vk = impeller::ContextVK::Cast(*context_->GetContext()); + context_vk.DisposeThreadLocalCachedResources(); + auto impeller_surface = swapchain_->AcquireNextDrawable(); if (!impeller_surface) { VALIDATION_LOG << "Could not acquire next drawable.";