vulkan: remove use of lock in syncEncodersFor(CommandBuffer|Queue)

Change-Id: Ib3a15ed0da0134b36b29837b8f403a7710d06d25
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index b00a562..e0ab5ef 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -15,6 +15,8 @@
 
 #include "ResourceTracker.h"
 
+#include "Resources.h"
+
 #include "android/base/Optional.h"
 #include "android/base/threads/AndroidWorkPool.h"
 
@@ -276,13 +278,11 @@
     };
 
     struct VkCommandBuffer_Info {
-        VkEncoder* lastUsedEncoder = nullptr;
-        uint32_t sequenceNumber = 0;
+        uint32_t placeholder;
     };
 
     struct VkQueue_Info {
-        VkEncoder* lastUsedEncoder = nullptr;
-        uint32_t sequenceNumber = 0;
+        uint32_t placeholder;
     };
 
     // custom guest-side structs for images/buffers because of AHardwareBuffer :((
@@ -394,29 +394,20 @@
     }
 
     void unregister_VkCommandBuffer(VkCommandBuffer commandBuffer) {
-        AutoLock lock(mLock);
+        struct goldfish_VkCommandBuffer* cb = as_goldfish_VkCommandBuffer(commandBuffer);
+        if (!cb) return;
+        if (cb->lastUsedEncoder) { cb->lastUsedEncoder->decRef(); }
 
-        auto it = info_VkCommandBuffer.find(commandBuffer);
-        if (it == info_VkCommandBuffer.end()) return;
-        auto& info = it->second;
-        if (info.lastUsedEncoder) {
-            info.lastUsedEncoder->decRef();
-        }
-        info.lastUsedEncoder = nullptr;
+        AutoLock lock(mLock);
         info_VkCommandBuffer.erase(commandBuffer);
     }
 
     void unregister_VkQueue(VkQueue queue) {
-        AutoLock lock(mLock);
+        struct goldfish_VkQueue* q = as_goldfish_VkQueue(queue);
+        if (!q) return;
+        if (q->lastUsedEncoder) { q->lastUsedEncoder->decRef(); }
 
-        auto it = info_VkQueue.find(queue);
-        if (it == info_VkQueue.end()) return;
-        auto& info = it->second;
-        auto lastUsedEncoder = info.lastUsedEncoder;
-        if (info.lastUsedEncoder) {
-            info.lastUsedEncoder->decRef();
-        }
-        info.lastUsedEncoder = nullptr;
+        AutoLock lock(mLock);
         info_VkQueue.erase(queue);
     }
 
@@ -4927,45 +4918,28 @@
     }
 
     uint32_t syncEncodersForCommandBuffer(VkCommandBuffer commandBuffer, VkEncoder* currentEncoder) {
-        AutoLock lock(mLock);
-
-        auto it = info_VkCommandBuffer.find(commandBuffer);
-        if (it == info_VkCommandBuffer.end()) return 0;
-
-        auto& info = it->second;
+        struct goldfish_VkCommandBuffer* cb = as_goldfish_VkCommandBuffer(commandBuffer);
+        if (!cb) return 0;
 
         currentEncoder->incRef();
 
-        auto lastEncoder = info.lastUsedEncoder;
-        info.lastUsedEncoder = currentEncoder;
+        auto lastEncoder = cb->lastUsedEncoder;
+
+        cb->lastUsedEncoder = currentEncoder;
+
         if (!lastEncoder) return 0;
-        auto oldSeq = info.sequenceNumber;
-        bool lookupAgain = false;
 
         if (lastEncoder != currentEncoder) {
-            info.sequenceNumber += 2;
-            lookupAgain = true;
-            lock.unlock();
-
+            auto oldSeq = cb->sequenceNumber;
+            cb->sequenceNumber += 2;
             lastEncoder->vkCommandBufferHostSyncGOOGLE(commandBuffer, false, oldSeq + 1);
             lastEncoder->flush();
-
             currentEncoder->vkCommandBufferHostSyncGOOGLE(commandBuffer, true, oldSeq + 2);
-
-            lock.lock();
         }
 
         if (lastEncoder->decRef()) {
-            if (lookupAgain) {
-                auto it2 = info_VkCommandBuffer.find(commandBuffer);
-                if (it2 == info_VkCommandBuffer.end()) return 0;
-                auto& info2 = it2->second;
-                info2.lastUsedEncoder = nullptr;
-            } else {
-                info.lastUsedEncoder = nullptr;
-            }
+            cb->lastUsedEncoder = nullptr;
         }
-
         return 0;
     }
 
@@ -4974,42 +4948,27 @@
             return 0;
         }
 
-        AutoLock lock(mLock);
-
-        auto it = info_VkQueue.find(queue);
-        if (it == info_VkQueue.end()) return 0;
-
-        auto& info = it->second;
+        struct goldfish_VkQueue* q = as_goldfish_VkQueue(queue);
+        if (!q) return 0;
 
         currentEncoder->incRef();
 
-        auto lastEncoder = info.lastUsedEncoder;
-        info.lastUsedEncoder = currentEncoder;
+        auto lastEncoder = q->lastUsedEncoder;
+
+        q->lastUsedEncoder = currentEncoder;
+
         if (!lastEncoder) return 0;
-        auto oldSeq = info.sequenceNumber;
-        bool lookupAgain = false;
 
         if (lastEncoder != currentEncoder) {
-            info.sequenceNumber += 2;
-            lookupAgain = true;
-            lock.unlock();
-
+            auto oldSeq = q->sequenceNumber;
+            q->sequenceNumber += 2;
             lastEncoder->vkQueueHostSyncGOOGLE(queue, false, oldSeq + 1);
             lastEncoder->flush();
             currentEncoder->vkQueueHostSyncGOOGLE(queue, true, oldSeq + 2);
-
-            lock.lock();
         }
 
         if (lastEncoder->decRef()) {
-            if (lookupAgain) {
-                auto it2 = info_VkQueue.find(queue);
-                if (it2 == info_VkQueue.end()) return 0;
-                auto& info2 = it2->second;
-                info2.lastUsedEncoder = nullptr;
-            } else {
-                info.lastUsedEncoder = nullptr;
-            }
+            q->lastUsedEncoder = nullptr;
         }
 
         return 0;