diff options
author | Stan Iliev <stani@google.com> | 2019-03-26 15:14:34 -0400 |
---|---|---|
committer | Stan Iliev <stani@google.com> | 2019-03-26 15:14:34 -0400 |
commit | bc5f06bdaa95da7e2a94d8827fffbadad7bc813d (patch) | |
tree | f1504301fc81b3680363f719e8d3903b27740181 /libs/hwui/renderthread/VulkanManager.cpp | |
parent | dece92b28744012f6db87f5100b511cd459218a1 (diff) |
Fix crash after dequeueNativeBuffer fails
Anytime dequeueNativeBuffer fails, it sets mDequeuedIndex to -1.
This is causing a crash latter, when getCurrentSkSurface tries
to index mNativeBuffers[mDequeuedIndex].
This CL removes mDequeuedIndex and improves Vulkan swapchain
error handling.
Test: Ran Camera app
Bug: 129024275
Change-Id: Ieeb685c3a1b33f23ce2334d286199a44ace53165
Diffstat (limited to 'libs/hwui/renderthread/VulkanManager.cpp')
-rw-r--r-- | libs/hwui/renderthread/VulkanManager.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp index b8ebf3bb0ca9..c92909898652 100644 --- a/libs/hwui/renderthread/VulkanManager.cpp +++ b/libs/hwui/renderthread/VulkanManager.cpp @@ -493,6 +493,12 @@ void VulkanManager::swapBuffers(VulkanSurface* surface, const SkRect& dirtyRect) mDeviceWaitIdle(mDevice); } + VulkanSurface::NativeBufferInfo* bufferInfo = surface->getCurrentBufferInfo(); + if (!bufferInfo) { + // If VulkanSurface::dequeueNativeBuffer failed earlier, then swapBuffers is a no-op. + return; + } + VkExportSemaphoreCreateInfo exportInfo; exportInfo.sType = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO; exportInfo.pNext = nullptr; @@ -509,8 +515,6 @@ void VulkanManager::swapBuffers(VulkanSurface* surface, const SkRect& dirtyRect) GrBackendSemaphore backendSemaphore; backendSemaphore.initVulkan(semaphore); - VulkanSurface::NativeBufferInfo* bufferInfo = surface->getCurrentBufferInfo(); - int fenceFd = -1; GrSemaphoresSubmitted submitted = bufferInfo->skSurface->flush(SkSurface::BackendSurfaceAccess::kPresent, |