From e8ac9d01642817e6d45bfefc8071313f41c6934f Mon Sep 17 00:00:00 2001 From: Yilong Li Date: Wed, 26 Aug 2020 19:24:21 -0700 Subject: vulkan: Do not abort if color buffer already exists It's possible that two vulkan clients creates color buffer for the same VMO. The latter one will see a ZX_ERR_ALREADY_EXISTS message, but it should not crash, instead it should continue allcoating memory from external buffer collection. Bug: fxbug.dev/51868 Change-Id: Ia531d39703179616ecf30560d57966d0fde25f14 --- system/vulkan_enc/ResourceTracker.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp index 3fee4115..00806e2b 100644 --- a/system/vulkan_enc/ResourceTracker.cpp +++ b/system/vulkan_enc/ResourceTracker.cpp @@ -50,6 +50,7 @@ void zx_event_create(int, zx_handle_t*) { } #include #include #include +#include #include #include #include @@ -2564,9 +2565,16 @@ public: auto result = mControlDevice->CreateColorBuffer2(std::move(vmo_copy), std::move(createParams)); if (!result.ok() || result.Unwrap()->res != ZX_OK) { - ALOGE("CreateColorBuffer failed: %d:%d", - result.status(), GET_STATUS_SAFE(result, res)); - abort(); + if (result.ok() && + result.Unwrap()->res == ZX_ERR_ALREADY_EXISTS) { + ALOGD("CreateColorBuffer: color buffer already " + "exists\n"); + } else { + ALOGE("CreateColorBuffer failed: %d:%d", + result.status(), + GET_STATUS_SAFE(result, res)); + abort(); + } } } @@ -3036,8 +3044,13 @@ public: auto result = mControlDevice->CreateColorBuffer2(std::move(vmo), std::move(createParams)); if (!result.ok() || result.Unwrap()->res != ZX_OK) { - ALOGE("CreateColorBuffer failed: %d:%d", result.status(), - GET_STATUS_SAFE(result, res)); + if (result.ok() && + result.Unwrap()->res == ZX_ERR_ALREADY_EXISTS) { + ALOGD("CreateColorBuffer: color buffer already exists"); + } else { + ALOGE("CreateColorBuffer failed: %d:%d", result.status(), + GET_STATUS_SAFE(result, res)); + } } } isSysmemBackedMemory = true; -- cgit v1.2.3