[vulkan] Take codegen for more logging

bug: 111137294

- Add rudimentary logging facility to the guest side that can be turned
on/off via system property

Change-Id: I342838df08fea25a9e0e83737448b73b5097953b
diff --git a/system/vulkan_enc/VkEncoder.cpp b/system/vulkan_enc/VkEncoder.cpp
index 7b9e989..5d0df77 100644
--- a/system/vulkan_enc/VkEncoder.cpp
+++ b/system/vulkan_enc/VkEncoder.cpp
@@ -34,6 +34,8 @@
 #include "android/base/AlignedBuf.h"
 #include "android/base/Pool.h"
 
+#include <cutils/properties.h>
+
 #include "goldfish_vk_marshaling_guest.h"
 #include "goldfish_vk_deepcopy_guest.h"
 #include "goldfish_vk_handlemap_guest.h"
@@ -53,18 +55,30 @@
 
 class VkEncoder::Impl {
 public:
-    Impl(IOStream* stream) : m_stream(stream) { }
+    Impl(IOStream* stream) : m_stream(stream), m_logEncodes(false) {
+        const char* emuVkLogEncodesPropName = "qemu.vk.log";
+        char encodeProp[PROPERTY_VALUE_MAX];
+        if (property_get(emuVkLogEncodesPropName, encodeProp, nullptr) > 0) {
+            m_logEncodes = atoi(encodeProp) > 0;
+        }
+    }
     VulkanCountingStream* countingStream() { return &m_countingStream; }
     VulkanStream* stream() { return &m_stream; }
     Pool* pool() { return &m_pool; }
     ResourceTracker* resources() { return ResourceTracker::get(); }
     Validation* validation() { return &m_validation; }
+
+    void log(const char* text) {
+        if (!m_logEncodes) return;
+        ALOGD("encoder log: %s", text);
+    }
 private:
     VulkanCountingStream m_countingStream;
     VulkanStream m_stream;
     Pool m_pool { 8, 4096, 64 };
 
     Validation m_validation;
+    bool m_logEncodes;
 };
 
 VkEncoder::VkEncoder(IOStream *stream) :
@@ -84,6 +98,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkInstance* pInstance)
 {
+    mImpl->log("start vkCreateInstance");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -154,6 +169,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateInstance");;
     return vkCreateInstance_VkResult_return;
 }
 
@@ -161,6 +177,7 @@
     VkInstance instance,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyInstance");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -209,6 +226,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkInstance((VkInstance*)&instance);
+    mImpl->log("finish vkDestroyInstance");;
 }
 
 VkResult VkEncoder::vkEnumeratePhysicalDevices(
@@ -216,6 +234,7 @@
     uint32_t* pPhysicalDeviceCount,
     VkPhysicalDevice* pPhysicalDevices)
 {
+    mImpl->log("start vkEnumeratePhysicalDevices");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -314,6 +333,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkEnumeratePhysicalDevices");;
     return vkEnumeratePhysicalDevices_VkResult_return;
 }
 
@@ -321,6 +341,7 @@
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceFeatures* pFeatures)
 {
+    mImpl->log("start vkGetPhysicalDeviceFeatures");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -349,6 +370,7 @@
     {
         transform_fromhost_VkPhysicalDeviceFeatures(mImpl->resources(), (VkPhysicalDeviceFeatures*)(pFeatures));
     }
+    mImpl->log("finish vkGetPhysicalDeviceFeatures");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceFormatProperties(
@@ -356,6 +378,7 @@
     VkFormat format,
     VkFormatProperties* pFormatProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceFormatProperties");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -388,6 +411,7 @@
     {
         transform_fromhost_VkFormatProperties(mImpl->resources(), (VkFormatProperties*)(pFormatProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceFormatProperties");;
 }
 
 VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties(
@@ -399,6 +423,7 @@
     VkImageCreateFlags flags,
     VkImageFormatProperties* pImageFormatProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceImageFormatProperties");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -452,6 +477,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceImageFormatProperties");;
     return vkGetPhysicalDeviceImageFormatProperties_VkResult_return;
 }
 
@@ -459,6 +485,7 @@
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceProperties* pProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceProperties");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -487,6 +514,7 @@
     {
         transform_fromhost_VkPhysicalDeviceProperties(mImpl->resources(), (VkPhysicalDeviceProperties*)(pProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceProperties");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties(
@@ -494,6 +522,7 @@
     uint32_t* pQueueFamilyPropertyCount,
     VkQueueFamilyProperties* pQueueFamilyProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceQueueFamilyProperties");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -581,12 +610,14 @@
             transform_fromhost_VkQueueFamilyProperties(mImpl->resources(), (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
         }
     }
+    mImpl->log("finish vkGetPhysicalDeviceQueueFamilyProperties");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceMemoryProperties(
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceMemoryProperties* pMemoryProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceMemoryProperties");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -616,12 +647,14 @@
         transform_fromhost_VkPhysicalDeviceMemoryProperties(mImpl->resources(), (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
     }
     mImpl->resources()->on_vkGetPhysicalDeviceMemoryProperties(this, physicalDevice, pMemoryProperties);
+    mImpl->log("finish vkGetPhysicalDeviceMemoryProperties");;
 }
 
 PFN_vkVoidFunction VkEncoder::vkGetInstanceProcAddr(
     VkInstance instance,
     const char* pName)
 {
+    mImpl->log("start vkGetInstanceProcAddr");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -656,6 +689,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetInstanceProcAddr");;
     return vkGetInstanceProcAddr_PFN_vkVoidFunction_return;
 }
 
@@ -663,6 +697,7 @@
     VkDevice device,
     const char* pName)
 {
+    mImpl->log("start vkGetDeviceProcAddr");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -697,6 +732,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetDeviceProcAddr");;
     return vkGetDeviceProcAddr_PFN_vkVoidFunction_return;
 }
 
@@ -706,6 +742,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDevice* pDevice)
 {
+    mImpl->log("start vkCreateDevice");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -785,6 +822,7 @@
     stream->clearPool();
     pool->freeAll();
     mImpl->resources()->on_vkCreateDevice(this, vkCreateDevice_VkResult_return, physicalDevice, pCreateInfo, pAllocator, pDevice);
+    mImpl->log("finish vkCreateDevice");;
     return vkCreateDevice_VkResult_return;
 }
 
@@ -792,6 +830,7 @@
     VkDevice device,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyDevice");
     mImpl->resources()->on_vkDestroyDevice_pre(this, device, pAllocator);
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
@@ -842,6 +881,7 @@
     }
     resources->destroyMapping()->mapHandles_VkDevice((VkDevice*)&device);
     stream->flush();
+    mImpl->log("finish vkDestroyDevice");;
 }
 
 VkResult VkEncoder::vkEnumerateInstanceExtensionProperties(
@@ -849,6 +889,7 @@
     uint32_t* pPropertyCount,
     VkExtensionProperties* pProperties)
 {
+    mImpl->log("start vkEnumerateInstanceExtensionProperties");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -941,6 +982,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkEnumerateInstanceExtensionProperties");;
     return vkEnumerateInstanceExtensionProperties_VkResult_return;
 }
 
@@ -952,6 +994,7 @@
 {
     VkResult vkEnumerateDeviceExtensionProperties_VkResult_return = (VkResult)0;
     vkEnumerateDeviceExtensionProperties_VkResult_return = mImpl->resources()->on_vkEnumerateDeviceExtensionProperties(this, VK_SUCCESS, physicalDevice, pLayerName, pPropertyCount, pProperties);
+    mImpl->log("finish vkEnumerateDeviceExtensionProperties");;
     return vkEnumerateDeviceExtensionProperties_VkResult_return;
 }
 
@@ -959,6 +1002,7 @@
     uint32_t* pPropertyCount,
     VkLayerProperties* pProperties)
 {
+    mImpl->log("start vkEnumerateInstanceLayerProperties");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1043,6 +1087,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkEnumerateInstanceLayerProperties");;
     return vkEnumerateInstanceLayerProperties_VkResult_return;
 }
 
@@ -1051,6 +1096,7 @@
     uint32_t* pPropertyCount,
     VkLayerProperties* pProperties)
 {
+    mImpl->log("start vkEnumerateDeviceLayerProperties");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1143,6 +1189,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkEnumerateDeviceLayerProperties");;
     return vkEnumerateDeviceLayerProperties_VkResult_return;
 }
 
@@ -1152,6 +1199,7 @@
     uint32_t queueIndex,
     VkQueue* pQueue)
 {
+    mImpl->log("start vkGetDeviceQueue");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1194,6 +1242,7 @@
     stream->read((uint64_t*)&cgen_var_77, 8);
     stream->handleMapping()->mapHandles_u64_VkQueue(&cgen_var_77, (VkQueue*)pQueue, 1);
     stream->unsetHandleMapping();
+    mImpl->log("finish vkGetDeviceQueue");;
 }
 
 VkResult VkEncoder::vkQueueSubmit(
@@ -1202,6 +1251,7 @@
     const VkSubmitInfo* pSubmits,
     VkFence fence)
 {
+    mImpl->log("start vkQueueSubmit");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1265,12 +1315,14 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkQueueSubmit");;
     return vkQueueSubmit_VkResult_return;
 }
 
 VkResult VkEncoder::vkQueueWaitIdle(
     VkQueue queue)
 {
+    mImpl->log("start vkQueueWaitIdle");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1297,12 +1349,14 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkQueueWaitIdle");;
     return vkQueueWaitIdle_VkResult_return;
 }
 
 VkResult VkEncoder::vkDeviceWaitIdle(
     VkDevice device)
 {
+    mImpl->log("start vkDeviceWaitIdle");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1329,6 +1383,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkDeviceWaitIdle");;
     return vkDeviceWaitIdle_VkResult_return;
 }
 
@@ -1338,6 +1393,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDeviceMemory* pMemory)
 {
+    mImpl->log("start vkAllocateMemory");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1416,6 +1472,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkAllocateMemory");;
     return vkAllocateMemory_VkResult_return;
 }
 
@@ -1424,6 +1481,7 @@
     VkDeviceMemory memory,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkFreeMemory");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1477,6 +1535,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkDeviceMemory((VkDeviceMemory*)&memory);
+    mImpl->log("finish vkFreeMemory");;
 }
 
 VkResult VkEncoder::vkMapMemory(
@@ -1489,6 +1548,7 @@
 {
     VkResult vkMapMemory_VkResult_return = (VkResult)0;
     vkMapMemory_VkResult_return = mImpl->resources()->on_vkMapMemory(this, VK_SUCCESS, device, memory, offset, size, flags, ppData);
+    mImpl->log("finish vkMapMemory");;
     return vkMapMemory_VkResult_return;
 }
 
@@ -1504,6 +1564,7 @@
     uint32_t memoryRangeCount,
     const VkMappedMemoryRange* pMemoryRanges)
 {
+    mImpl->log("start vkFlushMappedMemoryRanges");
     VALIDATE_RET(VkResult, VK_SUCCESS, mImpl->validation()->on_vkFlushMappedMemoryRanges(this, VK_SUCCESS, device, memoryRangeCount, pMemoryRanges));
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
@@ -1598,6 +1659,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkFlushMappedMemoryRanges");;
     return vkFlushMappedMemoryRanges_VkResult_return;
 }
 
@@ -1606,6 +1668,7 @@
     uint32_t memoryRangeCount,
     const VkMappedMemoryRange* pMemoryRanges)
 {
+    mImpl->log("start vkInvalidateMappedMemoryRanges");
     VALIDATE_RET(VkResult, VK_SUCCESS, mImpl->validation()->on_vkInvalidateMappedMemoryRanges(this, VK_SUCCESS, device, memoryRangeCount, pMemoryRanges));
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
@@ -1681,6 +1744,7 @@
             stream->read(targetRange, actualSize);
         }
     }
+    mImpl->log("finish vkInvalidateMappedMemoryRanges");;
     return vkInvalidateMappedMemoryRanges_VkResult_return;
 }
 
@@ -1689,6 +1753,7 @@
     VkDeviceMemory memory,
     VkDeviceSize* pCommittedMemoryInBytes)
 {
+    mImpl->log("start vkGetDeviceMemoryCommitment");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1722,6 +1787,7 @@
     stream->write((uint64_t*)&cgen_var_106, 1 * 8);
     stream->write((VkDeviceSize*)pCommittedMemoryInBytes, sizeof(VkDeviceSize));
     stream->read((VkDeviceSize*)pCommittedMemoryInBytes, sizeof(VkDeviceSize));
+    mImpl->log("finish vkGetDeviceMemoryCommitment");;
 }
 
 VkResult VkEncoder::vkBindBufferMemory(
@@ -1730,6 +1796,7 @@
     VkDeviceMemory memory,
     VkDeviceSize memoryOffset)
 {
+    mImpl->log("start vkBindBufferMemory");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1777,6 +1844,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkBindBufferMemory");;
     return vkBindBufferMemory_VkResult_return;
 }
 
@@ -1786,6 +1854,7 @@
     VkDeviceMemory memory,
     VkDeviceSize memoryOffset)
 {
+    mImpl->log("start vkBindImageMemory");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1833,6 +1902,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkBindImageMemory");;
     return vkBindImageMemory_VkResult_return;
 }
 
@@ -1841,6 +1911,7 @@
     VkBuffer buffer,
     VkMemoryRequirements* pMemoryRequirements)
 {
+    mImpl->log("start vkGetBufferMemoryRequirements");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1877,6 +1948,7 @@
     {
         transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
     }
+    mImpl->log("finish vkGetBufferMemoryRequirements");;
 }
 
 void VkEncoder::vkGetImageMemoryRequirements(
@@ -1884,6 +1956,7 @@
     VkImage image,
     VkMemoryRequirements* pMemoryRequirements)
 {
+    mImpl->log("start vkGetImageMemoryRequirements");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1920,6 +1993,7 @@
     {
         transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
     }
+    mImpl->log("finish vkGetImageMemoryRequirements");;
 }
 
 void VkEncoder::vkGetImageSparseMemoryRequirements(
@@ -1928,6 +2002,7 @@
     uint32_t* pSparseMemoryRequirementCount,
     VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
 {
+    mImpl->log("start vkGetImageSparseMemoryRequirements");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2023,6 +2098,7 @@
             transform_fromhost_VkSparseImageMemoryRequirements(mImpl->resources(), (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
         }
     }
+    mImpl->log("finish vkGetImageSparseMemoryRequirements");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties(
@@ -2035,6 +2111,7 @@
     uint32_t* pPropertyCount,
     VkSparseImageFormatProperties* pProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceSparseImageFormatProperties");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2142,6 +2219,7 @@
             transform_fromhost_VkSparseImageFormatProperties(mImpl->resources(), (VkSparseImageFormatProperties*)(pProperties + i));
         }
     }
+    mImpl->log("finish vkGetPhysicalDeviceSparseImageFormatProperties");;
 }
 
 VkResult VkEncoder::vkQueueBindSparse(
@@ -2150,6 +2228,7 @@
     const VkBindSparseInfo* pBindInfo,
     VkFence fence)
 {
+    mImpl->log("start vkQueueBindSparse");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2213,6 +2292,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkQueueBindSparse");;
     return vkQueueBindSparse_VkResult_return;
 }
 
@@ -2222,6 +2302,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkFence* pFence)
 {
+    mImpl->log("start vkCreateFence");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2300,6 +2381,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateFence");;
     return vkCreateFence_VkResult_return;
 }
 
@@ -2308,6 +2390,7 @@
     VkFence fence,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyFence");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2364,6 +2447,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkFence((VkFence*)&fence);
+    mImpl->log("finish vkDestroyFence");;
 }
 
 VkResult VkEncoder::vkResetFences(
@@ -2371,6 +2455,7 @@
     uint32_t fenceCount,
     const VkFence* pFences)
 {
+    mImpl->log("start vkResetFences");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2421,6 +2506,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkResetFences");;
     return vkResetFences_VkResult_return;
 }
 
@@ -2428,6 +2514,7 @@
     VkDevice device,
     VkFence fence)
 {
+    mImpl->log("start vkGetFenceStatus");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2462,6 +2549,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetFenceStatus");;
     return vkGetFenceStatus_VkResult_return;
 }
 
@@ -2472,6 +2560,7 @@
     VkBool32 waitAll,
     uint64_t timeout)
 {
+    mImpl->log("start vkWaitForFences");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2530,6 +2619,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkWaitForFences");;
     return vkWaitForFences_VkResult_return;
 }
 
@@ -2539,6 +2629,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSemaphore* pSemaphore)
 {
+    mImpl->log("start vkCreateSemaphore");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2617,6 +2708,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateSemaphore");;
     return vkCreateSemaphore_VkResult_return;
 }
 
@@ -2625,6 +2717,7 @@
     VkSemaphore semaphore,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroySemaphore");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2681,6 +2774,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkSemaphore((VkSemaphore*)&semaphore);
+    mImpl->log("finish vkDestroySemaphore");;
 }
 
 VkResult VkEncoder::vkCreateEvent(
@@ -2689,6 +2783,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkEvent* pEvent)
 {
+    mImpl->log("start vkCreateEvent");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2767,6 +2862,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateEvent");;
     return vkCreateEvent_VkResult_return;
 }
 
@@ -2775,6 +2871,7 @@
     VkEvent event,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyEvent");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2831,12 +2928,14 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkEvent((VkEvent*)&event);
+    mImpl->log("finish vkDestroyEvent");;
 }
 
 VkResult VkEncoder::vkGetEventStatus(
     VkDevice device,
     VkEvent event)
 {
+    mImpl->log("start vkGetEventStatus");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2871,6 +2970,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetEventStatus");;
     return vkGetEventStatus_VkResult_return;
 }
 
@@ -2878,6 +2978,7 @@
     VkDevice device,
     VkEvent event)
 {
+    mImpl->log("start vkSetEvent");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2912,6 +3013,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkSetEvent");;
     return vkSetEvent_VkResult_return;
 }
 
@@ -2919,6 +3021,7 @@
     VkDevice device,
     VkEvent event)
 {
+    mImpl->log("start vkResetEvent");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -2953,6 +3056,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkResetEvent");;
     return vkResetEvent_VkResult_return;
 }
 
@@ -2962,6 +3066,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkQueryPool* pQueryPool)
 {
+    mImpl->log("start vkCreateQueryPool");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3040,6 +3145,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateQueryPool");;
     return vkCreateQueryPool_VkResult_return;
 }
 
@@ -3048,6 +3154,7 @@
     VkQueryPool queryPool,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyQueryPool");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3104,6 +3211,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkQueryPool((VkQueryPool*)&queryPool);
+    mImpl->log("finish vkDestroyQueryPool");;
 }
 
 VkResult VkEncoder::vkGetQueryPoolResults(
@@ -3116,6 +3224,7 @@
     VkDeviceSize stride,
     VkQueryResultFlags flags)
 {
+    mImpl->log("start vkGetQueryPoolResults");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3175,6 +3284,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetQueryPoolResults");;
     return vkGetQueryPoolResults_VkResult_return;
 }
 
@@ -3184,6 +3294,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkBuffer* pBuffer)
 {
+    mImpl->log("start vkCreateBuffer");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3262,6 +3373,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateBuffer");;
     return vkCreateBuffer_VkResult_return;
 }
 
@@ -3270,6 +3382,7 @@
     VkBuffer buffer,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyBuffer");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3326,6 +3439,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkBuffer((VkBuffer*)&buffer);
+    mImpl->log("finish vkDestroyBuffer");;
 }
 
 VkResult VkEncoder::vkCreateBufferView(
@@ -3334,6 +3448,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkBufferView* pView)
 {
+    mImpl->log("start vkCreateBufferView");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3412,6 +3527,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateBufferView");;
     return vkCreateBufferView_VkResult_return;
 }
 
@@ -3420,6 +3536,7 @@
     VkBufferView bufferView,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyBufferView");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3476,6 +3593,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkBufferView((VkBufferView*)&bufferView);
+    mImpl->log("finish vkDestroyBufferView");;
 }
 
 VkResult VkEncoder::vkCreateImage(
@@ -3484,6 +3602,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkImage* pImage)
 {
+    mImpl->log("start vkCreateImage");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3563,6 +3682,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateImage");;
     return vkCreateImage_VkResult_return;
 }
 
@@ -3571,6 +3691,7 @@
     VkImage image,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyImage");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3627,6 +3748,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkImage((VkImage*)&image);
+    mImpl->log("finish vkDestroyImage");;
 }
 
 void VkEncoder::vkGetImageSubresourceLayout(
@@ -3635,6 +3757,7 @@
     const VkImageSubresource* pSubresource,
     VkSubresourceLayout* pLayout)
 {
+    mImpl->log("start vkGetImageSubresourceLayout");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3684,6 +3807,7 @@
     {
         transform_fromhost_VkSubresourceLayout(mImpl->resources(), (VkSubresourceLayout*)(pLayout));
     }
+    mImpl->log("finish vkGetImageSubresourceLayout");;
 }
 
 VkResult VkEncoder::vkCreateImageView(
@@ -3692,6 +3816,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkImageView* pView)
 {
+    mImpl->log("start vkCreateImageView");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3770,6 +3895,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateImageView");;
     return vkCreateImageView_VkResult_return;
 }
 
@@ -3778,6 +3904,7 @@
     VkImageView imageView,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyImageView");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3834,6 +3961,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkImageView((VkImageView*)&imageView);
+    mImpl->log("finish vkDestroyImageView");;
 }
 
 VkResult VkEncoder::vkCreateShaderModule(
@@ -3842,6 +3970,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkShaderModule* pShaderModule)
 {
+    mImpl->log("start vkCreateShaderModule");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3920,6 +4049,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateShaderModule");;
     return vkCreateShaderModule_VkResult_return;
 }
 
@@ -3928,6 +4058,7 @@
     VkShaderModule shaderModule,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyShaderModule");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -3984,6 +4115,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkShaderModule((VkShaderModule*)&shaderModule);
+    mImpl->log("finish vkDestroyShaderModule");;
 }
 
 VkResult VkEncoder::vkCreatePipelineCache(
@@ -3992,6 +4124,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkPipelineCache* pPipelineCache)
 {
+    mImpl->log("start vkCreatePipelineCache");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -4070,6 +4203,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreatePipelineCache");;
     return vkCreatePipelineCache_VkResult_return;
 }
 
@@ -4078,6 +4212,7 @@
     VkPipelineCache pipelineCache,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyPipelineCache");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -4134,6 +4269,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkPipelineCache((VkPipelineCache*)&pipelineCache);
+    mImpl->log("finish vkDestroyPipelineCache");;
 }
 
 VkResult VkEncoder::vkGetPipelineCacheData(
@@ -4142,6 +4278,7 @@
     size_t* pDataSize,
     void* pData)
 {
+    mImpl->log("start vkGetPipelineCacheData");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -4228,6 +4365,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPipelineCacheData");;
     return vkGetPipelineCacheData_VkResult_return;
 }
 
@@ -4237,6 +4375,7 @@
     uint32_t srcCacheCount,
     const VkPipelineCache* pSrcCaches)
 {
+    mImpl->log("start vkMergePipelineCaches");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -4295,6 +4434,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkMergePipelineCaches");;
     return vkMergePipelineCaches_VkResult_return;
 }
 
@@ -4306,6 +4446,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkPipeline* pPipelines)
 {
+    mImpl->log("start vkCreateGraphicsPipelines");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -4420,6 +4561,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateGraphicsPipelines");;
     return vkCreateGraphicsPipelines_VkResult_return;
 }
 
@@ -4431,6 +4573,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkPipeline* pPipelines)
 {
+    mImpl->log("start vkCreateComputePipelines");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -4545,6 +4688,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateComputePipelines");;
     return vkCreateComputePipelines_VkResult_return;
 }
 
@@ -4553,6 +4697,7 @@
     VkPipeline pipeline,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyPipeline");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -4609,6 +4754,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkPipeline((VkPipeline*)&pipeline);
+    mImpl->log("finish vkDestroyPipeline");;
 }
 
 VkResult VkEncoder::vkCreatePipelineLayout(
@@ -4617,6 +4763,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkPipelineLayout* pPipelineLayout)
 {
+    mImpl->log("start vkCreatePipelineLayout");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -4695,6 +4842,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreatePipelineLayout");;
     return vkCreatePipelineLayout_VkResult_return;
 }
 
@@ -4703,6 +4851,7 @@
     VkPipelineLayout pipelineLayout,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyPipelineLayout");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -4759,6 +4908,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkPipelineLayout((VkPipelineLayout*)&pipelineLayout);
+    mImpl->log("finish vkDestroyPipelineLayout");;
 }
 
 VkResult VkEncoder::vkCreateSampler(
@@ -4767,6 +4917,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSampler* pSampler)
 {
+    mImpl->log("start vkCreateSampler");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -4845,6 +4996,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateSampler");;
     return vkCreateSampler_VkResult_return;
 }
 
@@ -4853,6 +5005,7 @@
     VkSampler sampler,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroySampler");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -4909,6 +5062,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkSampler((VkSampler*)&sampler);
+    mImpl->log("finish vkDestroySampler");;
 }
 
 VkResult VkEncoder::vkCreateDescriptorSetLayout(
@@ -4917,6 +5071,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDescriptorSetLayout* pSetLayout)
 {
+    mImpl->log("start vkCreateDescriptorSetLayout");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -4995,6 +5150,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateDescriptorSetLayout");;
     return vkCreateDescriptorSetLayout_VkResult_return;
 }
 
@@ -5003,6 +5159,7 @@
     VkDescriptorSetLayout descriptorSetLayout,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyDescriptorSetLayout");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5059,6 +5216,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkDescriptorSetLayout((VkDescriptorSetLayout*)&descriptorSetLayout);
+    mImpl->log("finish vkDestroyDescriptorSetLayout");;
 }
 
 VkResult VkEncoder::vkCreateDescriptorPool(
@@ -5067,6 +5225,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDescriptorPool* pDescriptorPool)
 {
+    mImpl->log("start vkCreateDescriptorPool");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5145,6 +5304,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateDescriptorPool");;
     return vkCreateDescriptorPool_VkResult_return;
 }
 
@@ -5153,6 +5313,7 @@
     VkDescriptorPool descriptorPool,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyDescriptorPool");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5209,6 +5370,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkDescriptorPool((VkDescriptorPool*)&descriptorPool);
+    mImpl->log("finish vkDestroyDescriptorPool");;
 }
 
 VkResult VkEncoder::vkResetDescriptorPool(
@@ -5216,6 +5378,7 @@
     VkDescriptorPool descriptorPool,
     VkDescriptorPoolResetFlags flags)
 {
+    mImpl->log("start vkResetDescriptorPool");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5254,6 +5417,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkResetDescriptorPool");;
     return vkResetDescriptorPool_VkResult_return;
 }
 
@@ -5262,6 +5426,7 @@
     const VkDescriptorSetAllocateInfo* pAllocateInfo,
     VkDescriptorSet* pDescriptorSets)
 {
+    mImpl->log("start vkAllocateDescriptorSets");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5326,6 +5491,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkAllocateDescriptorSets");;
     return vkAllocateDescriptorSets_VkResult_return;
 }
 
@@ -5335,6 +5501,7 @@
     uint32_t descriptorSetCount,
     const VkDescriptorSet* pDescriptorSets)
 {
+    mImpl->log("start vkFreeDescriptorSets");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5409,6 +5576,7 @@
     {
         resources->destroyMapping()->mapHandles_VkDescriptorSet((VkDescriptorSet*)pDescriptorSets, ((descriptorSetCount)));
     }
+    mImpl->log("finish vkFreeDescriptorSets");;
     return vkFreeDescriptorSets_VkResult_return;
 }
 
@@ -5419,6 +5587,7 @@
     uint32_t descriptorCopyCount,
     const VkCopyDescriptorSet* pDescriptorCopies)
 {
+    mImpl->log("start vkUpdateDescriptorSets");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5498,6 +5667,7 @@
     {
         marshal_VkCopyDescriptorSet(stream, (VkCopyDescriptorSet*)(local_pDescriptorCopies + i));
     }
+    mImpl->log("finish vkUpdateDescriptorSets");;
 }
 
 VkResult VkEncoder::vkCreateFramebuffer(
@@ -5506,6 +5676,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkFramebuffer* pFramebuffer)
 {
+    mImpl->log("start vkCreateFramebuffer");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5584,6 +5755,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateFramebuffer");;
     return vkCreateFramebuffer_VkResult_return;
 }
 
@@ -5592,6 +5764,7 @@
     VkFramebuffer framebuffer,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyFramebuffer");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5648,6 +5821,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkFramebuffer((VkFramebuffer*)&framebuffer);
+    mImpl->log("finish vkDestroyFramebuffer");;
 }
 
 VkResult VkEncoder::vkCreateRenderPass(
@@ -5656,6 +5830,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkRenderPass* pRenderPass)
 {
+    mImpl->log("start vkCreateRenderPass");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5734,6 +5909,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateRenderPass");;
     return vkCreateRenderPass_VkResult_return;
 }
 
@@ -5742,6 +5918,7 @@
     VkRenderPass renderPass,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyRenderPass");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5798,6 +5975,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkRenderPass((VkRenderPass*)&renderPass);
+    mImpl->log("finish vkDestroyRenderPass");;
 }
 
 void VkEncoder::vkGetRenderAreaGranularity(
@@ -5805,6 +5983,7 @@
     VkRenderPass renderPass,
     VkExtent2D* pGranularity)
 {
+    mImpl->log("start vkGetRenderAreaGranularity");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5841,6 +6020,7 @@
     {
         transform_fromhost_VkExtent2D(mImpl->resources(), (VkExtent2D*)(pGranularity));
     }
+    mImpl->log("finish vkGetRenderAreaGranularity");;
 }
 
 VkResult VkEncoder::vkCreateCommandPool(
@@ -5849,6 +6029,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkCommandPool* pCommandPool)
 {
+    mImpl->log("start vkCreateCommandPool");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5927,6 +6108,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateCommandPool");;
     return vkCreateCommandPool_VkResult_return;
 }
 
@@ -5935,6 +6117,7 @@
     VkCommandPool commandPool,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyCommandPool");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -5991,6 +6174,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkCommandPool((VkCommandPool*)&commandPool);
+    mImpl->log("finish vkDestroyCommandPool");;
 }
 
 VkResult VkEncoder::vkResetCommandPool(
@@ -5998,6 +6182,7 @@
     VkCommandPool commandPool,
     VkCommandPoolResetFlags flags)
 {
+    mImpl->log("start vkResetCommandPool");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6036,6 +6221,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkResetCommandPool");;
     return vkResetCommandPool_VkResult_return;
 }
 
@@ -6044,6 +6230,7 @@
     const VkCommandBufferAllocateInfo* pAllocateInfo,
     VkCommandBuffer* pCommandBuffers)
 {
+    mImpl->log("start vkAllocateCommandBuffers");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6108,6 +6295,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkAllocateCommandBuffers");;
     return vkAllocateCommandBuffers_VkResult_return;
 }
 
@@ -6117,6 +6305,7 @@
     uint32_t commandBufferCount,
     const VkCommandBuffer* pCommandBuffers)
 {
+    mImpl->log("start vkFreeCommandBuffers");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6186,12 +6375,14 @@
     {
         resources->destroyMapping()->mapHandles_VkCommandBuffer((VkCommandBuffer*)pCommandBuffers, ((commandBufferCount)));
     }
+    mImpl->log("finish vkFreeCommandBuffers");;
 }
 
 VkResult VkEncoder::vkBeginCommandBuffer(
     VkCommandBuffer commandBuffer,
     const VkCommandBufferBeginInfo* pBeginInfo)
 {
+    mImpl->log("start vkBeginCommandBuffer");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6231,12 +6422,14 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkBeginCommandBuffer");;
     return vkBeginCommandBuffer_VkResult_return;
 }
 
 VkResult VkEncoder::vkEndCommandBuffer(
     VkCommandBuffer commandBuffer)
 {
+    mImpl->log("start vkEndCommandBuffer");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6263,6 +6456,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkEndCommandBuffer");;
     return vkEndCommandBuffer_VkResult_return;
 }
 
@@ -6270,6 +6464,7 @@
     VkCommandBuffer commandBuffer,
     VkCommandBufferResetFlags flags)
 {
+    mImpl->log("start vkResetCommandBuffer");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6300,6 +6495,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkResetCommandBuffer");;
     return vkResetCommandBuffer_VkResult_return;
 }
 
@@ -6308,6 +6504,7 @@
     VkPipelineBindPoint pipelineBindPoint,
     VkPipeline pipeline)
 {
+    mImpl->log("start vkCmdBindPipeline");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6341,6 +6538,7 @@
     uint64_t cgen_var_496;
     stream->handleMapping()->mapHandles_VkPipeline_u64(&local_pipeline, &cgen_var_496, 1);
     stream->write((uint64_t*)&cgen_var_496, 1 * 8);
+    mImpl->log("finish vkCmdBindPipeline");;
 }
 
 void VkEncoder::vkCmdSetViewport(
@@ -6349,6 +6547,7 @@
     uint32_t viewportCount,
     const VkViewport* pViewports)
 {
+    mImpl->log("start vkCmdSetViewport");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6403,6 +6602,7 @@
     {
         marshal_VkViewport(stream, (VkViewport*)(local_pViewports + i));
     }
+    mImpl->log("finish vkCmdSetViewport");;
 }
 
 void VkEncoder::vkCmdSetScissor(
@@ -6411,6 +6611,7 @@
     uint32_t scissorCount,
     const VkRect2D* pScissors)
 {
+    mImpl->log("start vkCmdSetScissor");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6465,12 +6666,14 @@
     {
         marshal_VkRect2D(stream, (VkRect2D*)(local_pScissors + i));
     }
+    mImpl->log("finish vkCmdSetScissor");;
 }
 
 void VkEncoder::vkCmdSetLineWidth(
     VkCommandBuffer commandBuffer,
     float lineWidth)
 {
+    mImpl->log("start vkCmdSetLineWidth");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6496,6 +6699,7 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_502, 1);
     stream->write((uint64_t*)&cgen_var_502, 1 * 8);
     stream->write((float*)&local_lineWidth, sizeof(float));
+    mImpl->log("finish vkCmdSetLineWidth");;
 }
 
 void VkEncoder::vkCmdSetDepthBias(
@@ -6504,6 +6708,7 @@
     float depthBiasClamp,
     float depthBiasSlopeFactor)
 {
+    mImpl->log("start vkCmdSetDepthBias");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6537,12 +6742,14 @@
     stream->write((float*)&local_depthBiasConstantFactor, sizeof(float));
     stream->write((float*)&local_depthBiasClamp, sizeof(float));
     stream->write((float*)&local_depthBiasSlopeFactor, sizeof(float));
+    mImpl->log("finish vkCmdSetDepthBias");;
 }
 
 void VkEncoder::vkCmdSetBlendConstants(
     VkCommandBuffer commandBuffer,
     const float blendConstants)
 {
+    mImpl->log("start vkCmdSetBlendConstants");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6568,6 +6775,7 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_506, 1);
     stream->write((uint64_t*)&cgen_var_506, 1 * 8);
     stream->write((float*)&local_blendConstants, 4 * sizeof(float));
+    mImpl->log("finish vkCmdSetBlendConstants");;
 }
 
 void VkEncoder::vkCmdSetDepthBounds(
@@ -6575,6 +6783,7 @@
     float minDepthBounds,
     float maxDepthBounds)
 {
+    mImpl->log("start vkCmdSetDepthBounds");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6604,6 +6813,7 @@
     stream->write((uint64_t*)&cgen_var_508, 1 * 8);
     stream->write((float*)&local_minDepthBounds, sizeof(float));
     stream->write((float*)&local_maxDepthBounds, sizeof(float));
+    mImpl->log("finish vkCmdSetDepthBounds");;
 }
 
 void VkEncoder::vkCmdSetStencilCompareMask(
@@ -6611,6 +6821,7 @@
     VkStencilFaceFlags faceMask,
     uint32_t compareMask)
 {
+    mImpl->log("start vkCmdSetStencilCompareMask");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6640,6 +6851,7 @@
     stream->write((uint64_t*)&cgen_var_510, 1 * 8);
     stream->write((VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
     stream->write((uint32_t*)&local_compareMask, sizeof(uint32_t));
+    mImpl->log("finish vkCmdSetStencilCompareMask");;
 }
 
 void VkEncoder::vkCmdSetStencilWriteMask(
@@ -6647,6 +6859,7 @@
     VkStencilFaceFlags faceMask,
     uint32_t writeMask)
 {
+    mImpl->log("start vkCmdSetStencilWriteMask");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6676,6 +6889,7 @@
     stream->write((uint64_t*)&cgen_var_512, 1 * 8);
     stream->write((VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
     stream->write((uint32_t*)&local_writeMask, sizeof(uint32_t));
+    mImpl->log("finish vkCmdSetStencilWriteMask");;
 }
 
 void VkEncoder::vkCmdSetStencilReference(
@@ -6683,6 +6897,7 @@
     VkStencilFaceFlags faceMask,
     uint32_t reference)
 {
+    mImpl->log("start vkCmdSetStencilReference");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6712,6 +6927,7 @@
     stream->write((uint64_t*)&cgen_var_514, 1 * 8);
     stream->write((VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
     stream->write((uint32_t*)&local_reference, sizeof(uint32_t));
+    mImpl->log("finish vkCmdSetStencilReference");;
 }
 
 void VkEncoder::vkCmdBindDescriptorSets(
@@ -6724,6 +6940,7 @@
     uint32_t dynamicOffsetCount,
     const uint32_t* pDynamicOffsets)
 {
+    mImpl->log("start vkCmdBindDescriptorSets");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6797,6 +7014,7 @@
     }
     stream->write((uint32_t*)&local_dynamicOffsetCount, sizeof(uint32_t));
     stream->write((uint32_t*)local_pDynamicOffsets, ((dynamicOffsetCount)) * sizeof(uint32_t));
+    mImpl->log("finish vkCmdBindDescriptorSets");;
 }
 
 void VkEncoder::vkCmdBindIndexBuffer(
@@ -6805,6 +7023,7 @@
     VkDeviceSize offset,
     VkIndexType indexType)
 {
+    mImpl->log("start vkCmdBindIndexBuffer");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6842,6 +7061,7 @@
     stream->write((uint64_t*)&cgen_var_524, 1 * 8);
     stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
     stream->write((VkIndexType*)&local_indexType, sizeof(VkIndexType));
+    mImpl->log("finish vkCmdBindIndexBuffer");;
 }
 
 void VkEncoder::vkCmdBindVertexBuffers(
@@ -6851,6 +7071,7 @@
     const VkBuffer* pBuffers,
     const VkDeviceSize* pOffsets)
 {
+    mImpl->log("start vkCmdBindVertexBuffers");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6908,6 +7129,7 @@
         stream->write((uint64_t*)cgen_var_528, ((bindingCount)) * 8);
     }
     stream->write((VkDeviceSize*)local_pOffsets, ((bindingCount)) * sizeof(VkDeviceSize));
+    mImpl->log("finish vkCmdBindVertexBuffers");;
 }
 
 void VkEncoder::vkCmdDraw(
@@ -6917,6 +7139,7 @@
     uint32_t firstVertex,
     uint32_t firstInstance)
 {
+    mImpl->log("start vkCmdDraw");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -6954,6 +7177,7 @@
     stream->write((uint32_t*)&local_instanceCount, sizeof(uint32_t));
     stream->write((uint32_t*)&local_firstVertex, sizeof(uint32_t));
     stream->write((uint32_t*)&local_firstInstance, sizeof(uint32_t));
+    mImpl->log("finish vkCmdDraw");;
 }
 
 void VkEncoder::vkCmdDrawIndexed(
@@ -6964,6 +7188,7 @@
     int32_t vertexOffset,
     uint32_t firstInstance)
 {
+    mImpl->log("start vkCmdDrawIndexed");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7005,6 +7230,7 @@
     stream->write((uint32_t*)&local_firstIndex, sizeof(uint32_t));
     stream->write((int32_t*)&local_vertexOffset, sizeof(int32_t));
     stream->write((uint32_t*)&local_firstInstance, sizeof(uint32_t));
+    mImpl->log("finish vkCmdDrawIndexed");;
 }
 
 void VkEncoder::vkCmdDrawIndirect(
@@ -7014,6 +7240,7 @@
     uint32_t drawCount,
     uint32_t stride)
 {
+    mImpl->log("start vkCmdDrawIndirect");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7055,6 +7282,7 @@
     stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
     stream->write((uint32_t*)&local_drawCount, sizeof(uint32_t));
     stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
+    mImpl->log("finish vkCmdDrawIndirect");;
 }
 
 void VkEncoder::vkCmdDrawIndexedIndirect(
@@ -7064,6 +7292,7 @@
     uint32_t drawCount,
     uint32_t stride)
 {
+    mImpl->log("start vkCmdDrawIndexedIndirect");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7105,6 +7334,7 @@
     stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
     stream->write((uint32_t*)&local_drawCount, sizeof(uint32_t));
     stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
+    mImpl->log("finish vkCmdDrawIndexedIndirect");;
 }
 
 void VkEncoder::vkCmdDispatch(
@@ -7113,6 +7343,7 @@
     uint32_t groupCountY,
     uint32_t groupCountZ)
 {
+    mImpl->log("start vkCmdDispatch");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7146,6 +7377,7 @@
     stream->write((uint32_t*)&local_groupCountX, sizeof(uint32_t));
     stream->write((uint32_t*)&local_groupCountY, sizeof(uint32_t));
     stream->write((uint32_t*)&local_groupCountZ, sizeof(uint32_t));
+    mImpl->log("finish vkCmdDispatch");;
 }
 
 void VkEncoder::vkCmdDispatchIndirect(
@@ -7153,6 +7385,7 @@
     VkBuffer buffer,
     VkDeviceSize offset)
 {
+    mImpl->log("start vkCmdDispatchIndirect");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7186,6 +7419,7 @@
     stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_546, 1);
     stream->write((uint64_t*)&cgen_var_546, 1 * 8);
     stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
+    mImpl->log("finish vkCmdDispatchIndirect");;
 }
 
 void VkEncoder::vkCmdCopyBuffer(
@@ -7195,6 +7429,7 @@
     uint32_t regionCount,
     const VkBufferCopy* pRegions)
 {
+    mImpl->log("start vkCmdCopyBuffer");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7261,6 +7496,7 @@
     {
         marshal_VkBufferCopy(stream, (VkBufferCopy*)(local_pRegions + i));
     }
+    mImpl->log("finish vkCmdCopyBuffer");;
 }
 
 void VkEncoder::vkCmdCopyImage(
@@ -7272,6 +7508,7 @@
     uint32_t regionCount,
     const VkImageCopy* pRegions)
 {
+    mImpl->log("start vkCmdCopyImage");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7346,6 +7583,7 @@
     {
         marshal_VkImageCopy(stream, (VkImageCopy*)(local_pRegions + i));
     }
+    mImpl->log("finish vkCmdCopyImage");;
 }
 
 void VkEncoder::vkCmdBlitImage(
@@ -7358,6 +7596,7 @@
     const VkImageBlit* pRegions,
     VkFilter filter)
 {
+    mImpl->log("start vkCmdBlitImage");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7436,6 +7675,7 @@
         marshal_VkImageBlit(stream, (VkImageBlit*)(local_pRegions + i));
     }
     stream->write((VkFilter*)&local_filter, sizeof(VkFilter));
+    mImpl->log("finish vkCmdBlitImage");;
 }
 
 void VkEncoder::vkCmdCopyBufferToImage(
@@ -7446,6 +7686,7 @@
     uint32_t regionCount,
     const VkBufferImageCopy* pRegions)
 {
+    mImpl->log("start vkCmdCopyBufferToImage");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7516,6 +7757,7 @@
     {
         marshal_VkBufferImageCopy(stream, (VkBufferImageCopy*)(local_pRegions + i));
     }
+    mImpl->log("finish vkCmdCopyBufferToImage");;
 }
 
 void VkEncoder::vkCmdCopyImageToBuffer(
@@ -7526,6 +7768,7 @@
     uint32_t regionCount,
     const VkBufferImageCopy* pRegions)
 {
+    mImpl->log("start vkCmdCopyImageToBuffer");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7596,6 +7839,7 @@
     {
         marshal_VkBufferImageCopy(stream, (VkBufferImageCopy*)(local_pRegions + i));
     }
+    mImpl->log("finish vkCmdCopyImageToBuffer");;
 }
 
 void VkEncoder::vkCmdUpdateBuffer(
@@ -7605,6 +7849,7 @@
     VkDeviceSize dataSize,
     const void* pData)
 {
+    mImpl->log("start vkCmdUpdateBuffer");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7650,6 +7895,7 @@
     stream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
     stream->write((VkDeviceSize*)&local_dataSize, sizeof(VkDeviceSize));
     stream->write((void*)local_pData, ((dataSize)) * sizeof(uint8_t));
+    mImpl->log("finish vkCmdUpdateBuffer");;
 }
 
 void VkEncoder::vkCmdFillBuffer(
@@ -7659,6 +7905,7 @@
     VkDeviceSize size,
     uint32_t data)
 {
+    mImpl->log("start vkCmdFillBuffer");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7700,6 +7947,7 @@
     stream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
     stream->write((VkDeviceSize*)&local_size, sizeof(VkDeviceSize));
     stream->write((uint32_t*)&local_data, sizeof(uint32_t));
+    mImpl->log("finish vkCmdFillBuffer");;
 }
 
 void VkEncoder::vkCmdClearColorImage(
@@ -7710,6 +7958,7 @@
     uint32_t rangeCount,
     const VkImageSubresourceRange* pRanges)
 {
+    mImpl->log("start vkCmdClearColorImage");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7785,6 +8034,7 @@
     {
         marshal_VkImageSubresourceRange(stream, (VkImageSubresourceRange*)(local_pRanges + i));
     }
+    mImpl->log("finish vkCmdClearColorImage");;
 }
 
 void VkEncoder::vkCmdClearDepthStencilImage(
@@ -7795,6 +8045,7 @@
     uint32_t rangeCount,
     const VkImageSubresourceRange* pRanges)
 {
+    mImpl->log("start vkCmdClearDepthStencilImage");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7870,6 +8121,7 @@
     {
         marshal_VkImageSubresourceRange(stream, (VkImageSubresourceRange*)(local_pRanges + i));
     }
+    mImpl->log("finish vkCmdClearDepthStencilImage");;
 }
 
 void VkEncoder::vkCmdClearAttachments(
@@ -7879,6 +8131,7 @@
     uint32_t rectCount,
     const VkClearRect* pRects)
 {
+    mImpl->log("start vkCmdClearAttachments");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -7958,6 +8211,7 @@
     {
         marshal_VkClearRect(stream, (VkClearRect*)(local_pRects + i));
     }
+    mImpl->log("finish vkCmdClearAttachments");;
 }
 
 void VkEncoder::vkCmdResolveImage(
@@ -7969,6 +8223,7 @@
     uint32_t regionCount,
     const VkImageResolve* pRegions)
 {
+    mImpl->log("start vkCmdResolveImage");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8043,6 +8298,7 @@
     {
         marshal_VkImageResolve(stream, (VkImageResolve*)(local_pRegions + i));
     }
+    mImpl->log("finish vkCmdResolveImage");;
 }
 
 void VkEncoder::vkCmdSetEvent(
@@ -8050,6 +8306,7 @@
     VkEvent event,
     VkPipelineStageFlags stageMask)
 {
+    mImpl->log("start vkCmdSetEvent");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8083,6 +8340,7 @@
     stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_604, 1);
     stream->write((uint64_t*)&cgen_var_604, 1 * 8);
     stream->write((VkPipelineStageFlags*)&local_stageMask, sizeof(VkPipelineStageFlags));
+    mImpl->log("finish vkCmdSetEvent");;
 }
 
 void VkEncoder::vkCmdResetEvent(
@@ -8090,6 +8348,7 @@
     VkEvent event,
     VkPipelineStageFlags stageMask)
 {
+    mImpl->log("start vkCmdResetEvent");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8123,6 +8382,7 @@
     stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_608, 1);
     stream->write((uint64_t*)&cgen_var_608, 1 * 8);
     stream->write((VkPipelineStageFlags*)&local_stageMask, sizeof(VkPipelineStageFlags));
+    mImpl->log("finish vkCmdResetEvent");;
 }
 
 void VkEncoder::vkCmdWaitEvents(
@@ -8138,6 +8398,7 @@
     uint32_t imageMemoryBarrierCount,
     const VkImageMemoryBarrier* pImageMemoryBarriers)
 {
+    mImpl->log("start vkCmdWaitEvents");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8278,6 +8539,7 @@
     {
         marshal_VkImageMemoryBarrier(stream, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
     }
+    mImpl->log("finish vkCmdWaitEvents");;
 }
 
 void VkEncoder::vkCmdPipelineBarrier(
@@ -8292,6 +8554,7 @@
     uint32_t imageMemoryBarrierCount,
     const VkImageMemoryBarrier* pImageMemoryBarriers)
 {
+    mImpl->log("start vkCmdPipelineBarrier");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8412,6 +8675,7 @@
     {
         marshal_VkImageMemoryBarrier(stream, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
     }
+    mImpl->log("finish vkCmdPipelineBarrier");;
 }
 
 void VkEncoder::vkCmdBeginQuery(
@@ -8420,6 +8684,7 @@
     uint32_t query,
     VkQueryControlFlags flags)
 {
+    mImpl->log("start vkCmdBeginQuery");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8457,6 +8722,7 @@
     stream->write((uint64_t*)&cgen_var_618, 1 * 8);
     stream->write((uint32_t*)&local_query, sizeof(uint32_t));
     stream->write((VkQueryControlFlags*)&local_flags, sizeof(VkQueryControlFlags));
+    mImpl->log("finish vkCmdBeginQuery");;
 }
 
 void VkEncoder::vkCmdEndQuery(
@@ -8464,6 +8730,7 @@
     VkQueryPool queryPool,
     uint32_t query)
 {
+    mImpl->log("start vkCmdEndQuery");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8497,6 +8764,7 @@
     stream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_622, 1);
     stream->write((uint64_t*)&cgen_var_622, 1 * 8);
     stream->write((uint32_t*)&local_query, sizeof(uint32_t));
+    mImpl->log("finish vkCmdEndQuery");;
 }
 
 void VkEncoder::vkCmdResetQueryPool(
@@ -8505,6 +8773,7 @@
     uint32_t firstQuery,
     uint32_t queryCount)
 {
+    mImpl->log("start vkCmdResetQueryPool");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8542,6 +8811,7 @@
     stream->write((uint64_t*)&cgen_var_626, 1 * 8);
     stream->write((uint32_t*)&local_firstQuery, sizeof(uint32_t));
     stream->write((uint32_t*)&local_queryCount, sizeof(uint32_t));
+    mImpl->log("finish vkCmdResetQueryPool");;
 }
 
 void VkEncoder::vkCmdWriteTimestamp(
@@ -8550,6 +8820,7 @@
     VkQueryPool queryPool,
     uint32_t query)
 {
+    mImpl->log("start vkCmdWriteTimestamp");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8587,6 +8858,7 @@
     stream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_630, 1);
     stream->write((uint64_t*)&cgen_var_630, 1 * 8);
     stream->write((uint32_t*)&local_query, sizeof(uint32_t));
+    mImpl->log("finish vkCmdWriteTimestamp");;
 }
 
 void VkEncoder::vkCmdCopyQueryPoolResults(
@@ -8599,6 +8871,7 @@
     VkDeviceSize stride,
     VkQueryResultFlags flags)
 {
+    mImpl->log("start vkCmdCopyQueryPoolResults");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8656,6 +8929,7 @@
     stream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
     stream->write((VkDeviceSize*)&local_stride, sizeof(VkDeviceSize));
     stream->write((VkQueryResultFlags*)&local_flags, sizeof(VkQueryResultFlags));
+    mImpl->log("finish vkCmdCopyQueryPoolResults");;
 }
 
 void VkEncoder::vkCmdPushConstants(
@@ -8666,6 +8940,7 @@
     uint32_t size,
     const void* pValues)
 {
+    mImpl->log("start vkCmdPushConstants");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8715,6 +8990,7 @@
     stream->write((uint32_t*)&local_offset, sizeof(uint32_t));
     stream->write((uint32_t*)&local_size, sizeof(uint32_t));
     stream->write((void*)local_pValues, ((size)) * sizeof(uint8_t));
+    mImpl->log("finish vkCmdPushConstants");;
 }
 
 void VkEncoder::vkCmdBeginRenderPass(
@@ -8722,6 +8998,7 @@
     const VkRenderPassBeginInfo* pRenderPassBegin,
     VkSubpassContents contents)
 {
+    mImpl->log("start vkCmdBeginRenderPass");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8760,12 +9037,14 @@
     stream->write((uint64_t*)&cgen_var_642, 1 * 8);
     marshal_VkRenderPassBeginInfo(stream, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
     stream->write((VkSubpassContents*)&local_contents, sizeof(VkSubpassContents));
+    mImpl->log("finish vkCmdBeginRenderPass");;
 }
 
 void VkEncoder::vkCmdNextSubpass(
     VkCommandBuffer commandBuffer,
     VkSubpassContents contents)
 {
+    mImpl->log("start vkCmdNextSubpass");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8791,11 +9070,13 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_644, 1);
     stream->write((uint64_t*)&cgen_var_644, 1 * 8);
     stream->write((VkSubpassContents*)&local_contents, sizeof(VkSubpassContents));
+    mImpl->log("finish vkCmdNextSubpass");;
 }
 
 void VkEncoder::vkCmdEndRenderPass(
     VkCommandBuffer commandBuffer)
 {
+    mImpl->log("start vkCmdEndRenderPass");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8817,6 +9098,7 @@
     uint64_t cgen_var_646;
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_646, 1);
     stream->write((uint64_t*)&cgen_var_646, 1 * 8);
+    mImpl->log("finish vkCmdEndRenderPass");;
 }
 
 void VkEncoder::vkCmdExecuteCommands(
@@ -8824,6 +9106,7 @@
     uint32_t commandBufferCount,
     const VkCommandBuffer* pCommandBuffers)
 {
+    mImpl->log("start vkCmdExecuteCommands");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8869,6 +9152,7 @@
         stream->handleMapping()->mapHandles_VkCommandBuffer_u64(local_pCommandBuffers, cgen_var_650, ((commandBufferCount)));
         stream->write((uint64_t*)cgen_var_650, ((commandBufferCount)) * 8);
     }
+    mImpl->log("finish vkCmdExecuteCommands");;
 }
 
 #endif
@@ -8878,6 +9162,7 @@
 {
     VkResult vkEnumerateInstanceVersion_VkResult_return = (VkResult)0;
     vkEnumerateInstanceVersion_VkResult_return = mImpl->resources()->on_vkEnumerateInstanceVersion(this, VK_SUCCESS, pApiVersion);
+    mImpl->log("finish vkEnumerateInstanceVersion");;
     return vkEnumerateInstanceVersion_VkResult_return;
 }
 
@@ -8886,6 +9171,7 @@
     uint32_t bindInfoCount,
     const VkBindBufferMemoryInfo* pBindInfos)
 {
+    mImpl->log("start vkBindBufferMemory2");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -8941,6 +9227,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkBindBufferMemory2");;
     return vkBindBufferMemory2_VkResult_return;
 }
 
@@ -8949,6 +9236,7 @@
     uint32_t bindInfoCount,
     const VkBindImageMemoryInfo* pBindInfos)
 {
+    mImpl->log("start vkBindImageMemory2");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9004,6 +9292,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkBindImageMemory2");;
     return vkBindImageMemory2_VkResult_return;
 }
 
@@ -9014,6 +9303,7 @@
     uint32_t remoteDeviceIndex,
     VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
 {
+    mImpl->log("start vkGetDeviceGroupPeerMemoryFeatures");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9050,12 +9340,14 @@
     stream->write((uint32_t*)&local_remoteDeviceIndex, sizeof(uint32_t));
     stream->write((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
     stream->read((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
+    mImpl->log("finish vkGetDeviceGroupPeerMemoryFeatures");;
 }
 
 void VkEncoder::vkCmdSetDeviceMask(
     VkCommandBuffer commandBuffer,
     uint32_t deviceMask)
 {
+    mImpl->log("start vkCmdSetDeviceMask");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9081,6 +9373,7 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_658, 1);
     stream->write((uint64_t*)&cgen_var_658, 1 * 8);
     stream->write((uint32_t*)&local_deviceMask, sizeof(uint32_t));
+    mImpl->log("finish vkCmdSetDeviceMask");;
 }
 
 void VkEncoder::vkCmdDispatchBase(
@@ -9092,6 +9385,7 @@
     uint32_t groupCountY,
     uint32_t groupCountZ)
 {
+    mImpl->log("start vkCmdDispatchBase");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9137,6 +9431,7 @@
     stream->write((uint32_t*)&local_groupCountX, sizeof(uint32_t));
     stream->write((uint32_t*)&local_groupCountY, sizeof(uint32_t));
     stream->write((uint32_t*)&local_groupCountZ, sizeof(uint32_t));
+    mImpl->log("finish vkCmdDispatchBase");;
 }
 
 VkResult VkEncoder::vkEnumeratePhysicalDeviceGroups(
@@ -9144,6 +9439,7 @@
     uint32_t* pPhysicalDeviceGroupCount,
     VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
 {
+    mImpl->log("start vkEnumeratePhysicalDeviceGroups");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9236,6 +9532,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkEnumeratePhysicalDeviceGroups");;
     return vkEnumeratePhysicalDeviceGroups_VkResult_return;
 }
 
@@ -9244,6 +9541,7 @@
     const VkImageMemoryRequirementsInfo2* pInfo,
     VkMemoryRequirements2* pMemoryRequirements)
 {
+    mImpl->log("start vkGetImageMemoryRequirements2");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9285,6 +9583,7 @@
     {
         transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
     }
+    mImpl->log("finish vkGetImageMemoryRequirements2");;
 }
 
 void VkEncoder::vkGetBufferMemoryRequirements2(
@@ -9292,6 +9591,7 @@
     const VkBufferMemoryRequirementsInfo2* pInfo,
     VkMemoryRequirements2* pMemoryRequirements)
 {
+    mImpl->log("start vkGetBufferMemoryRequirements2");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9333,6 +9633,7 @@
     {
         transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
     }
+    mImpl->log("finish vkGetBufferMemoryRequirements2");;
 }
 
 void VkEncoder::vkGetImageSparseMemoryRequirements2(
@@ -9341,6 +9642,7 @@
     uint32_t* pSparseMemoryRequirementCount,
     VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
 {
+    mImpl->log("start vkGetImageSparseMemoryRequirements2");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9441,12 +9743,14 @@
             transform_fromhost_VkSparseImageMemoryRequirements2(mImpl->resources(), (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
         }
     }
+    mImpl->log("finish vkGetImageSparseMemoryRequirements2");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceFeatures2(
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceFeatures2* pFeatures)
 {
+    mImpl->log("start vkGetPhysicalDeviceFeatures2");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9475,6 +9779,7 @@
     {
         transform_fromhost_VkPhysicalDeviceFeatures2(mImpl->resources(), (VkPhysicalDeviceFeatures2*)(pFeatures));
     }
+    mImpl->log("finish vkGetPhysicalDeviceFeatures2");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceProperties2(
@@ -9489,6 +9794,7 @@
     VkFormat format,
     VkFormatProperties2* pFormatProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceFormatProperties2");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9521,6 +9827,7 @@
     {
         transform_fromhost_VkFormatProperties2(mImpl->resources(), (VkFormatProperties2*)(pFormatProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceFormatProperties2");;
 }
 
 VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2(
@@ -9528,6 +9835,7 @@
     const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
     VkImageFormatProperties2* pImageFormatProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceImageFormatProperties2");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9574,6 +9882,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceImageFormatProperties2");;
     return vkGetPhysicalDeviceImageFormatProperties2_VkResult_return;
 }
 
@@ -9582,6 +9891,7 @@
     uint32_t* pQueueFamilyPropertyCount,
     VkQueueFamilyProperties2* pQueueFamilyProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceQueueFamilyProperties2");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9669,12 +9979,14 @@
             transform_fromhost_VkQueueFamilyProperties2(mImpl->resources(), (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
         }
     }
+    mImpl->log("finish vkGetPhysicalDeviceQueueFamilyProperties2");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceMemoryProperties2(
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceMemoryProperties2");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9703,6 +10015,7 @@
     {
         transform_fromhost_VkPhysicalDeviceMemoryProperties2(mImpl->resources(), (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceMemoryProperties2");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2(
@@ -9711,6 +10024,7 @@
     uint32_t* pPropertyCount,
     VkSparseImageFormatProperties2* pProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceSparseImageFormatProperties2");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9811,6 +10125,7 @@
             transform_fromhost_VkSparseImageFormatProperties2(mImpl->resources(), (VkSparseImageFormatProperties2*)(pProperties + i));
         }
     }
+    mImpl->log("finish vkGetPhysicalDeviceSparseImageFormatProperties2");;
 }
 
 void VkEncoder::vkTrimCommandPool(
@@ -9818,6 +10133,7 @@
     VkCommandPool commandPool,
     VkCommandPoolTrimFlags flags)
 {
+    mImpl->log("start vkTrimCommandPool");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9851,6 +10167,7 @@
     stream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_708, 1);
     stream->write((uint64_t*)&cgen_var_708, 1 * 8);
     stream->write((VkCommandPoolTrimFlags*)&local_flags, sizeof(VkCommandPoolTrimFlags));
+    mImpl->log("finish vkTrimCommandPool");;
 }
 
 void VkEncoder::vkGetDeviceQueue2(
@@ -9858,6 +10175,7 @@
     const VkDeviceQueueInfo2* pQueueInfo,
     VkQueue* pQueue)
 {
+    mImpl->log("start vkGetDeviceQueue2");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9903,6 +10221,7 @@
     uint64_t cgen_var_713;
     stream->read((uint64_t*)&cgen_var_713, 8);
     stream->handleMapping()->mapHandles_u64_VkQueue(&cgen_var_713, (VkQueue*)pQueue, 1);
+    mImpl->log("finish vkGetDeviceQueue2");;
 }
 
 VkResult VkEncoder::vkCreateSamplerYcbcrConversion(
@@ -9911,6 +10230,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSamplerYcbcrConversion* pYcbcrConversion)
 {
+    mImpl->log("start vkCreateSamplerYcbcrConversion");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -9989,6 +10309,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateSamplerYcbcrConversion");;
     return vkCreateSamplerYcbcrConversion_VkResult_return;
 }
 
@@ -9997,6 +10318,7 @@
     VkSamplerYcbcrConversion ycbcrConversion,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroySamplerYcbcrConversion");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10053,6 +10375,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkSamplerYcbcrConversion((VkSamplerYcbcrConversion*)&ycbcrConversion);
+    mImpl->log("finish vkDestroySamplerYcbcrConversion");;
 }
 
 VkResult VkEncoder::vkCreateDescriptorUpdateTemplate(
@@ -10061,6 +10384,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
 {
+    mImpl->log("start vkCreateDescriptorUpdateTemplate");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10139,6 +10463,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateDescriptorUpdateTemplate");;
     return vkCreateDescriptorUpdateTemplate_VkResult_return;
 }
 
@@ -10147,6 +10472,7 @@
     VkDescriptorUpdateTemplate descriptorUpdateTemplate,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyDescriptorUpdateTemplate");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10203,6 +10529,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkDescriptorUpdateTemplate((VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate);
+    mImpl->log("finish vkDestroyDescriptorUpdateTemplate");;
 }
 
 void VkEncoder::vkUpdateDescriptorSetWithTemplate(
@@ -10211,6 +10538,7 @@
     VkDescriptorUpdateTemplate descriptorUpdateTemplate,
     const void* pData)
 {
+    mImpl->log("start vkUpdateDescriptorSetWithTemplate");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10268,6 +10596,7 @@
     {
         stream->write((void*)local_pData, sizeof(uint8_t));
     }
+    mImpl->log("finish vkUpdateDescriptorSetWithTemplate");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceExternalBufferProperties(
@@ -10275,6 +10604,7 @@
     const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
     VkExternalBufferProperties* pExternalBufferProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceExternalBufferProperties");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10316,6 +10646,7 @@
     {
         transform_fromhost_VkExternalBufferProperties(mImpl->resources(), (VkExternalBufferProperties*)(pExternalBufferProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceExternalBufferProperties");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceExternalFenceProperties(
@@ -10323,6 +10654,7 @@
     const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
     VkExternalFenceProperties* pExternalFenceProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceExternalFenceProperties");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10364,6 +10696,7 @@
     {
         transform_fromhost_VkExternalFenceProperties(mImpl->resources(), (VkExternalFenceProperties*)(pExternalFenceProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceExternalFenceProperties");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceExternalSemaphoreProperties(
@@ -10371,6 +10704,7 @@
     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
     VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceExternalSemaphoreProperties");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10412,6 +10746,7 @@
     {
         transform_fromhost_VkExternalSemaphoreProperties(mImpl->resources(), (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceExternalSemaphoreProperties");;
 }
 
 void VkEncoder::vkGetDescriptorSetLayoutSupport(
@@ -10419,6 +10754,7 @@
     const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
     VkDescriptorSetLayoutSupport* pSupport)
 {
+    mImpl->log("start vkGetDescriptorSetLayoutSupport");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10460,6 +10796,7 @@
     {
         transform_fromhost_VkDescriptorSetLayoutSupport(mImpl->resources(), (VkDescriptorSetLayoutSupport*)(pSupport));
     }
+    mImpl->log("finish vkGetDescriptorSetLayoutSupport");;
 }
 
 #endif
@@ -10469,6 +10806,7 @@
     VkSurfaceKHR surface,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroySurfaceKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10525,6 +10863,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkSurfaceKHR((VkSurfaceKHR*)&surface);
+    mImpl->log("finish vkDestroySurfaceKHR");;
 }
 
 VkResult VkEncoder::vkGetPhysicalDeviceSurfaceSupportKHR(
@@ -10533,6 +10872,7 @@
     VkSurfaceKHR surface,
     VkBool32* pSupported)
 {
+    mImpl->log("start vkGetPhysicalDeviceSurfaceSupportKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10574,6 +10914,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceSurfaceSupportKHR");;
     return vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return;
 }
 
@@ -10582,6 +10923,7 @@
     VkSurfaceKHR surface,
     VkSurfaceCapabilitiesKHR* pSurfaceCapabilities)
 {
+    mImpl->log("start vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10623,6 +10965,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceSurfaceCapabilitiesKHR");;
     return vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return;
 }
 
@@ -10632,6 +10975,7 @@
     uint32_t* pSurfaceFormatCount,
     VkSurfaceFormatKHR* pSurfaceFormats)
 {
+    mImpl->log("start vkGetPhysicalDeviceSurfaceFormatsKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10732,6 +11076,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceSurfaceFormatsKHR");;
     return vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return;
 }
 
@@ -10741,6 +11086,7 @@
     uint32_t* pPresentModeCount,
     VkPresentModeKHR* pPresentModes)
 {
+    mImpl->log("start vkGetPhysicalDeviceSurfacePresentModesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10825,6 +11171,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceSurfacePresentModesKHR");;
     return vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return;
 }
 
@@ -10836,6 +11183,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSwapchainKHR* pSwapchain)
 {
+    mImpl->log("start vkCreateSwapchainKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10914,6 +11262,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateSwapchainKHR");;
     return vkCreateSwapchainKHR_VkResult_return;
 }
 
@@ -10922,6 +11271,7 @@
     VkSwapchainKHR swapchain,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroySwapchainKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -10978,6 +11328,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkSwapchainKHR((VkSwapchainKHR*)&swapchain);
+    mImpl->log("finish vkDestroySwapchainKHR");;
 }
 
 VkResult VkEncoder::vkGetSwapchainImagesKHR(
@@ -10986,6 +11337,7 @@
     uint32_t* pSwapchainImageCount,
     VkImage* pSwapchainImages)
 {
+    mImpl->log("start vkGetSwapchainImagesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -11090,6 +11442,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetSwapchainImagesKHR");;
     return vkGetSwapchainImagesKHR_VkResult_return;
 }
 
@@ -11101,6 +11454,7 @@
     VkFence fence,
     uint32_t* pImageIndex)
 {
+    mImpl->log("start vkAcquireNextImageKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -11158,6 +11512,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkAcquireNextImageKHR");;
     return vkAcquireNextImageKHR_VkResult_return;
 }
 
@@ -11165,6 +11520,7 @@
     VkQueue queue,
     const VkPresentInfoKHR* pPresentInfo)
 {
+    mImpl->log("start vkQueuePresentKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -11204,6 +11560,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkQueuePresentKHR");;
     return vkQueuePresentKHR_VkResult_return;
 }
 
@@ -11211,6 +11568,7 @@
     VkDevice device,
     VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities)
 {
+    mImpl->log("start vkGetDeviceGroupPresentCapabilitiesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -11244,6 +11602,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetDeviceGroupPresentCapabilitiesKHR");;
     return vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return;
 }
 
@@ -11252,6 +11611,7 @@
     VkSurfaceKHR surface,
     VkDeviceGroupPresentModeFlagsKHR* pModes)
 {
+    mImpl->log("start vkGetDeviceGroupSurfacePresentModesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -11311,6 +11671,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetDeviceGroupSurfacePresentModesKHR");;
     return vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return;
 }
 
@@ -11320,6 +11681,7 @@
     uint32_t* pRectCount,
     VkRect2D* pRects)
 {
+    mImpl->log("start vkGetPhysicalDevicePresentRectanglesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -11420,6 +11782,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDevicePresentRectanglesKHR");;
     return vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return;
 }
 
@@ -11428,6 +11791,7 @@
     const VkAcquireNextImageInfoKHR* pAcquireInfo,
     uint32_t* pImageIndex)
 {
+    mImpl->log("start vkAcquireNextImage2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -11470,6 +11834,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkAcquireNextImage2KHR");;
     return vkAcquireNextImage2KHR_VkResult_return;
 }
 
@@ -11480,6 +11845,7 @@
     uint32_t* pPropertyCount,
     VkDisplayPropertiesKHR* pProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceDisplayPropertiesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -11572,6 +11938,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceDisplayPropertiesKHR");;
     return vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return;
 }
 
@@ -11580,6 +11947,7 @@
     uint32_t* pPropertyCount,
     VkDisplayPlanePropertiesKHR* pProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceDisplayPlanePropertiesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -11672,6 +12040,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceDisplayPlanePropertiesKHR");;
     return vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return;
 }
 
@@ -11681,6 +12050,7 @@
     uint32_t* pDisplayCount,
     VkDisplayKHR* pDisplays)
 {
+    mImpl->log("start vkGetDisplayPlaneSupportedDisplaysKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -11781,6 +12151,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetDisplayPlaneSupportedDisplaysKHR");;
     return vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return;
 }
 
@@ -11790,6 +12161,7 @@
     uint32_t* pPropertyCount,
     VkDisplayModePropertiesKHR* pProperties)
 {
+    mImpl->log("start vkGetDisplayModePropertiesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -11890,6 +12262,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetDisplayModePropertiesKHR");;
     return vkGetDisplayModePropertiesKHR_VkResult_return;
 }
 
@@ -11900,6 +12273,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDisplayModeKHR* pMode)
 {
+    mImpl->log("start vkCreateDisplayModeKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -11986,6 +12360,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateDisplayModeKHR");;
     return vkCreateDisplayModeKHR_VkResult_return;
 }
 
@@ -11995,6 +12370,7 @@
     uint32_t planeIndex,
     VkDisplayPlaneCapabilitiesKHR* pCapabilities)
 {
+    mImpl->log("start vkGetDisplayPlaneCapabilitiesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12040,6 +12416,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetDisplayPlaneCapabilitiesKHR");;
     return vkGetDisplayPlaneCapabilitiesKHR_VkResult_return;
 }
 
@@ -12049,6 +12426,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    mImpl->log("start vkCreateDisplayPlaneSurfaceKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12125,6 +12503,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateDisplayPlaneSurfaceKHR");;
     return vkCreateDisplayPlaneSurfaceKHR_VkResult_return;
 }
 
@@ -12137,6 +12516,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSwapchainKHR* pSwapchains)
 {
+    mImpl->log("start vkCreateSharedSwapchainsKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12241,6 +12621,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateSharedSwapchainsKHR");;
     return vkCreateSharedSwapchainsKHR_VkResult_return;
 }
 
@@ -12252,6 +12633,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    mImpl->log("start vkCreateXlibSurfaceKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12328,6 +12710,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateXlibSurfaceKHR");;
     return vkCreateXlibSurfaceKHR_VkResult_return;
 }
 
@@ -12337,6 +12720,7 @@
     Display* dpy,
     VisualID visualID)
 {
+    mImpl->log("start vkGetPhysicalDeviceXlibPresentationSupportKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12374,6 +12758,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceXlibPresentationSupportKHR");;
     return vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return;
 }
 
@@ -12385,6 +12770,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    mImpl->log("start vkCreateXcbSurfaceKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12461,6 +12847,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateXcbSurfaceKHR");;
     return vkCreateXcbSurfaceKHR_VkResult_return;
 }
 
@@ -12470,6 +12857,7 @@
     xcb_connection_t* connection,
     xcb_visualid_t visual_id)
 {
+    mImpl->log("start vkGetPhysicalDeviceXcbPresentationSupportKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12507,6 +12895,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceXcbPresentationSupportKHR");;
     return vkGetPhysicalDeviceXcbPresentationSupportKHR_VkBool32_return;
 }
 
@@ -12518,6 +12907,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    mImpl->log("start vkCreateWaylandSurfaceKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12594,6 +12984,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateWaylandSurfaceKHR");;
     return vkCreateWaylandSurfaceKHR_VkResult_return;
 }
 
@@ -12602,6 +12993,7 @@
     uint32_t queueFamilyIndex,
     wl_display* display)
 {
+    mImpl->log("start vkGetPhysicalDeviceWaylandPresentationSupportKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12635,6 +13027,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceWaylandPresentationSupportKHR");;
     return vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return;
 }
 
@@ -12646,6 +13039,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    mImpl->log("start vkCreateMirSurfaceKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12722,6 +13116,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateMirSurfaceKHR");;
     return vkCreateMirSurfaceKHR_VkResult_return;
 }
 
@@ -12730,6 +13125,7 @@
     uint32_t queueFamilyIndex,
     MirConnection* connection)
 {
+    mImpl->log("start vkGetPhysicalDeviceMirPresentationSupportKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12763,6 +13159,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceMirPresentationSupportKHR");;
     return vkGetPhysicalDeviceMirPresentationSupportKHR_VkBool32_return;
 }
 
@@ -12774,6 +13171,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    mImpl->log("start vkCreateAndroidSurfaceKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12850,6 +13248,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateAndroidSurfaceKHR");;
     return vkCreateAndroidSurfaceKHR_VkResult_return;
 }
 
@@ -12861,6 +13260,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    mImpl->log("start vkCreateWin32SurfaceKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12937,6 +13337,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateWin32SurfaceKHR");;
     return vkCreateWin32SurfaceKHR_VkResult_return;
 }
 
@@ -12944,6 +13345,7 @@
     VkPhysicalDevice physicalDevice,
     uint32_t queueFamilyIndex)
 {
+    mImpl->log("start vkGetPhysicalDeviceWin32PresentationSupportKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -12974,6 +13376,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceWin32PresentationSupportKHR");;
     return vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return;
 }
 
@@ -12987,6 +13390,7 @@
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceFeatures2* pFeatures)
 {
+    mImpl->log("start vkGetPhysicalDeviceFeatures2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13015,12 +13419,14 @@
     {
         transform_fromhost_VkPhysicalDeviceFeatures2(mImpl->resources(), (VkPhysicalDeviceFeatures2*)(pFeatures));
     }
+    mImpl->log("finish vkGetPhysicalDeviceFeatures2KHR");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceProperties2KHR(
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceProperties2* pProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceProperties2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13049,6 +13455,7 @@
     {
         transform_fromhost_VkPhysicalDeviceProperties2(mImpl->resources(), (VkPhysicalDeviceProperties2*)(pProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceProperties2KHR");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceFormatProperties2KHR(
@@ -13056,6 +13463,7 @@
     VkFormat format,
     VkFormatProperties2* pFormatProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceFormatProperties2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13088,6 +13496,7 @@
     {
         transform_fromhost_VkFormatProperties2(mImpl->resources(), (VkFormatProperties2*)(pFormatProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceFormatProperties2KHR");;
 }
 
 VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2KHR(
@@ -13095,6 +13504,7 @@
     const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
     VkImageFormatProperties2* pImageFormatProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceImageFormatProperties2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13141,6 +13551,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceImageFormatProperties2KHR");;
     return vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return;
 }
 
@@ -13149,6 +13560,7 @@
     uint32_t* pQueueFamilyPropertyCount,
     VkQueueFamilyProperties2* pQueueFamilyProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceQueueFamilyProperties2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13236,12 +13648,14 @@
             transform_fromhost_VkQueueFamilyProperties2(mImpl->resources(), (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
         }
     }
+    mImpl->log("finish vkGetPhysicalDeviceQueueFamilyProperties2KHR");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceMemoryProperties2KHR(
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceMemoryProperties2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13270,6 +13684,7 @@
     {
         transform_fromhost_VkPhysicalDeviceMemoryProperties2(mImpl->resources(), (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceMemoryProperties2KHR");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
@@ -13278,6 +13693,7 @@
     uint32_t* pPropertyCount,
     VkSparseImageFormatProperties2* pProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceSparseImageFormatProperties2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13378,6 +13794,7 @@
             transform_fromhost_VkSparseImageFormatProperties2(mImpl->resources(), (VkSparseImageFormatProperties2*)(pProperties + i));
         }
     }
+    mImpl->log("finish vkGetPhysicalDeviceSparseImageFormatProperties2KHR");;
 }
 
 #endif
@@ -13389,6 +13806,7 @@
     uint32_t remoteDeviceIndex,
     VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
 {
+    mImpl->log("start vkGetDeviceGroupPeerMemoryFeaturesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13425,12 +13843,14 @@
     stream->write((uint32_t*)&local_remoteDeviceIndex, sizeof(uint32_t));
     stream->write((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
     stream->read((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
+    mImpl->log("finish vkGetDeviceGroupPeerMemoryFeaturesKHR");;
 }
 
 void VkEncoder::vkCmdSetDeviceMaskKHR(
     VkCommandBuffer commandBuffer,
     uint32_t deviceMask)
 {
+    mImpl->log("start vkCmdSetDeviceMaskKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13456,6 +13876,7 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_992, 1);
     stream->write((uint64_t*)&cgen_var_992, 1 * 8);
     stream->write((uint32_t*)&local_deviceMask, sizeof(uint32_t));
+    mImpl->log("finish vkCmdSetDeviceMaskKHR");;
 }
 
 void VkEncoder::vkCmdDispatchBaseKHR(
@@ -13467,6 +13888,7 @@
     uint32_t groupCountY,
     uint32_t groupCountZ)
 {
+    mImpl->log("start vkCmdDispatchBaseKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13512,6 +13934,7 @@
     stream->write((uint32_t*)&local_groupCountX, sizeof(uint32_t));
     stream->write((uint32_t*)&local_groupCountY, sizeof(uint32_t));
     stream->write((uint32_t*)&local_groupCountZ, sizeof(uint32_t));
+    mImpl->log("finish vkCmdDispatchBaseKHR");;
 }
 
 #endif
@@ -13523,6 +13946,7 @@
     VkCommandPool commandPool,
     VkCommandPoolTrimFlags flags)
 {
+    mImpl->log("start vkTrimCommandPoolKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13556,6 +13980,7 @@
     stream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_998, 1);
     stream->write((uint64_t*)&cgen_var_998, 1 * 8);
     stream->write((VkCommandPoolTrimFlags*)&local_flags, sizeof(VkCommandPoolTrimFlags));
+    mImpl->log("finish vkTrimCommandPoolKHR");;
 }
 
 #endif
@@ -13565,6 +13990,7 @@
     uint32_t* pPhysicalDeviceGroupCount,
     VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
 {
+    mImpl->log("start vkEnumeratePhysicalDeviceGroupsKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13657,6 +14083,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkEnumeratePhysicalDeviceGroupsKHR");;
     return vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return;
 }
 
@@ -13667,6 +14094,7 @@
     const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
     VkExternalBufferProperties* pExternalBufferProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceExternalBufferPropertiesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13708,6 +14136,7 @@
     {
         transform_fromhost_VkExternalBufferProperties(mImpl->resources(), (VkExternalBufferProperties*)(pExternalBufferProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceExternalBufferPropertiesKHR");;
 }
 
 #endif
@@ -13719,6 +14148,7 @@
     const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
     HANDLE* pHandle)
 {
+    mImpl->log("start vkGetMemoryWin32HandleKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13761,6 +14191,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetMemoryWin32HandleKHR");;
     return vkGetMemoryWin32HandleKHR_VkResult_return;
 }
 
@@ -13770,6 +14201,7 @@
     HANDLE handle,
     VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties)
 {
+    mImpl->log("start vkGetMemoryWin32HandlePropertiesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13811,6 +14243,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetMemoryWin32HandlePropertiesKHR");;
     return vkGetMemoryWin32HandlePropertiesKHR_VkResult_return;
 }
 
@@ -13821,6 +14254,7 @@
     const VkMemoryGetFdInfoKHR* pGetFdInfo,
     int* pFd)
 {
+    mImpl->log("start vkGetMemoryFdKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13863,6 +14297,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetMemoryFdKHR");;
     return vkGetMemoryFdKHR_VkResult_return;
 }
 
@@ -13872,6 +14307,7 @@
     int fd,
     VkMemoryFdPropertiesKHR* pMemoryFdProperties)
 {
+    mImpl->log("start vkGetMemoryFdPropertiesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13913,6 +14349,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetMemoryFdPropertiesKHR");;
     return vkGetMemoryFdPropertiesKHR_VkResult_return;
 }
 
@@ -13925,6 +14362,7 @@
     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
     VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceExternalSemaphorePropertiesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -13966,6 +14404,7 @@
     {
         transform_fromhost_VkExternalSemaphoreProperties(mImpl->resources(), (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceExternalSemaphorePropertiesKHR");;
 }
 
 #endif
@@ -13976,6 +14415,7 @@
     VkDevice device,
     const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo)
 {
+    mImpl->log("start vkImportSemaphoreWin32HandleKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14015,6 +14455,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkImportSemaphoreWin32HandleKHR");;
     return vkImportSemaphoreWin32HandleKHR_VkResult_return;
 }
 
@@ -14023,6 +14464,7 @@
     const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
     HANDLE* pHandle)
 {
+    mImpl->log("start vkGetSemaphoreWin32HandleKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14065,6 +14507,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetSemaphoreWin32HandleKHR");;
     return vkGetSemaphoreWin32HandleKHR_VkResult_return;
 }
 
@@ -14074,6 +14517,7 @@
     VkDevice device,
     const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo)
 {
+    mImpl->log("start vkImportSemaphoreFdKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14113,6 +14557,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkImportSemaphoreFdKHR");;
     return vkImportSemaphoreFdKHR_VkResult_return;
 }
 
@@ -14121,6 +14566,7 @@
     const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
     int* pFd)
 {
+    mImpl->log("start vkGetSemaphoreFdKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14163,6 +14609,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetSemaphoreFdKHR");;
     return vkGetSemaphoreFdKHR_VkResult_return;
 }
 
@@ -14176,6 +14623,7 @@
     uint32_t descriptorWriteCount,
     const VkWriteDescriptorSet* pDescriptorWrites)
 {
+    mImpl->log("start vkCmdPushDescriptorSetKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14242,6 +14690,7 @@
     {
         marshal_VkWriteDescriptorSet(stream, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
     }
+    mImpl->log("finish vkCmdPushDescriptorSetKHR");;
 }
 
 void VkEncoder::vkCmdPushDescriptorSetWithTemplateKHR(
@@ -14251,6 +14700,7 @@
     uint32_t set,
     const void* pData)
 {
+    mImpl->log("start vkCmdPushDescriptorSetWithTemplateKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14312,6 +14762,7 @@
     {
         stream->write((void*)local_pData, sizeof(uint8_t));
     }
+    mImpl->log("finish vkCmdPushDescriptorSetWithTemplateKHR");;
 }
 
 #endif
@@ -14326,6 +14777,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
 {
+    mImpl->log("start vkCreateDescriptorUpdateTemplateKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14402,6 +14854,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateDescriptorUpdateTemplateKHR");;
     return vkCreateDescriptorUpdateTemplateKHR_VkResult_return;
 }
 
@@ -14410,6 +14863,7 @@
     VkDescriptorUpdateTemplate descriptorUpdateTemplate,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyDescriptorUpdateTemplateKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14465,6 +14919,7 @@
     {
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
+    mImpl->log("finish vkDestroyDescriptorUpdateTemplateKHR");;
 }
 
 void VkEncoder::vkUpdateDescriptorSetWithTemplateKHR(
@@ -14473,6 +14928,7 @@
     VkDescriptorUpdateTemplate descriptorUpdateTemplate,
     const void* pData)
 {
+    mImpl->log("start vkUpdateDescriptorSetWithTemplateKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14530,6 +14986,7 @@
     {
         stream->write((void*)local_pData, sizeof(uint8_t));
     }
+    mImpl->log("finish vkUpdateDescriptorSetWithTemplateKHR");;
 }
 
 #endif
@@ -14540,6 +14997,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkRenderPass* pRenderPass)
 {
+    mImpl->log("start vkCreateRenderPass2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14616,6 +15074,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateRenderPass2KHR");;
     return vkCreateRenderPass2KHR_VkResult_return;
 }
 
@@ -14624,6 +15083,7 @@
     const VkRenderPassBeginInfo* pRenderPassBegin,
     const VkSubpassBeginInfoKHR* pSubpassBeginInfo)
 {
+    mImpl->log("start vkCmdBeginRenderPass2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14671,6 +15131,7 @@
     stream->write((uint64_t*)&cgen_var_1068, 1 * 8);
     marshal_VkRenderPassBeginInfo(stream, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
     marshal_VkSubpassBeginInfoKHR(stream, (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
+    mImpl->log("finish vkCmdBeginRenderPass2KHR");;
 }
 
 void VkEncoder::vkCmdNextSubpass2KHR(
@@ -14678,6 +15139,7 @@
     const VkSubpassBeginInfoKHR* pSubpassBeginInfo,
     const VkSubpassEndInfoKHR* pSubpassEndInfo)
 {
+    mImpl->log("start vkCmdNextSubpass2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14725,12 +15187,14 @@
     stream->write((uint64_t*)&cgen_var_1070, 1 * 8);
     marshal_VkSubpassBeginInfoKHR(stream, (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
     marshal_VkSubpassEndInfoKHR(stream, (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
+    mImpl->log("finish vkCmdNextSubpass2KHR");;
 }
 
 void VkEncoder::vkCmdEndRenderPass2KHR(
     VkCommandBuffer commandBuffer,
     const VkSubpassEndInfoKHR* pSubpassEndInfo)
 {
+    mImpl->log("start vkCmdEndRenderPass2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14765,6 +15229,7 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1072, 1);
     stream->write((uint64_t*)&cgen_var_1072, 1 * 8);
     marshal_VkSubpassEndInfoKHR(stream, (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
+    mImpl->log("finish vkCmdEndRenderPass2KHR");;
 }
 
 #endif
@@ -14773,6 +15238,7 @@
     VkDevice device,
     VkSwapchainKHR swapchain)
 {
+    mImpl->log("start vkGetSwapchainStatusKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14807,6 +15273,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetSwapchainStatusKHR");;
     return vkGetSwapchainStatusKHR_VkResult_return;
 }
 
@@ -14817,6 +15284,7 @@
     const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
     VkExternalFenceProperties* pExternalFenceProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceExternalFencePropertiesKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14858,6 +15326,7 @@
     {
         transform_fromhost_VkExternalFenceProperties(mImpl->resources(), (VkExternalFenceProperties*)(pExternalFenceProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceExternalFencePropertiesKHR");;
 }
 
 #endif
@@ -14868,6 +15337,7 @@
     VkDevice device,
     const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo)
 {
+    mImpl->log("start vkImportFenceWin32HandleKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14907,6 +15377,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkImportFenceWin32HandleKHR");;
     return vkImportFenceWin32HandleKHR_VkResult_return;
 }
 
@@ -14915,6 +15386,7 @@
     const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo,
     HANDLE* pHandle)
 {
+    mImpl->log("start vkGetFenceWin32HandleKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -14957,6 +15429,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetFenceWin32HandleKHR");;
     return vkGetFenceWin32HandleKHR_VkResult_return;
 }
 
@@ -14966,6 +15439,7 @@
     VkDevice device,
     const VkImportFenceFdInfoKHR* pImportFenceFdInfo)
 {
+    mImpl->log("start vkImportFenceFdKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15005,6 +15479,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkImportFenceFdKHR");;
     return vkImportFenceFdKHR_VkResult_return;
 }
 
@@ -15013,6 +15488,7 @@
     const VkFenceGetFdInfoKHR* pGetFdInfo,
     int* pFd)
 {
+    mImpl->log("start vkGetFenceFdKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15055,6 +15531,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetFenceFdKHR");;
     return vkGetFenceFdKHR_VkResult_return;
 }
 
@@ -15067,6 +15544,7 @@
     const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
     VkSurfaceCapabilities2KHR* pSurfaceCapabilities)
 {
+    mImpl->log("start vkGetPhysicalDeviceSurfaceCapabilities2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15113,6 +15591,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceSurfaceCapabilities2KHR");;
     return vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return;
 }
 
@@ -15122,6 +15601,7 @@
     uint32_t* pSurfaceFormatCount,
     VkSurfaceFormat2KHR* pSurfaceFormats)
 {
+    mImpl->log("start vkGetPhysicalDeviceSurfaceFormats2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15227,6 +15707,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceSurfaceFormats2KHR");;
     return vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return;
 }
 
@@ -15239,6 +15720,7 @@
     uint32_t* pPropertyCount,
     VkDisplayProperties2KHR* pProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceDisplayProperties2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15331,6 +15813,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceDisplayProperties2KHR");;
     return vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return;
 }
 
@@ -15339,6 +15822,7 @@
     uint32_t* pPropertyCount,
     VkDisplayPlaneProperties2KHR* pProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceDisplayPlaneProperties2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15431,6 +15915,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceDisplayPlaneProperties2KHR");;
     return vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return;
 }
 
@@ -15440,6 +15925,7 @@
     uint32_t* pPropertyCount,
     VkDisplayModeProperties2KHR* pProperties)
 {
+    mImpl->log("start vkGetDisplayModeProperties2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15540,6 +16026,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetDisplayModeProperties2KHR");;
     return vkGetDisplayModeProperties2KHR_VkResult_return;
 }
 
@@ -15548,6 +16035,7 @@
     const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo,
     VkDisplayPlaneCapabilities2KHR* pCapabilities)
 {
+    mImpl->log("start vkGetDisplayPlaneCapabilities2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15594,6 +16082,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetDisplayPlaneCapabilities2KHR");;
     return vkGetDisplayPlaneCapabilities2KHR_VkResult_return;
 }
 
@@ -15610,6 +16099,7 @@
     const VkImageMemoryRequirementsInfo2* pInfo,
     VkMemoryRequirements2* pMemoryRequirements)
 {
+    mImpl->log("start vkGetImageMemoryRequirements2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15651,6 +16141,7 @@
     {
         transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
     }
+    mImpl->log("finish vkGetImageMemoryRequirements2KHR");;
 }
 
 void VkEncoder::vkGetBufferMemoryRequirements2KHR(
@@ -15658,6 +16149,7 @@
     const VkBufferMemoryRequirementsInfo2* pInfo,
     VkMemoryRequirements2* pMemoryRequirements)
 {
+    mImpl->log("start vkGetBufferMemoryRequirements2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15699,6 +16191,7 @@
     {
         transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
     }
+    mImpl->log("finish vkGetBufferMemoryRequirements2KHR");;
 }
 
 void VkEncoder::vkGetImageSparseMemoryRequirements2KHR(
@@ -15707,6 +16200,7 @@
     uint32_t* pSparseMemoryRequirementCount,
     VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
 {
+    mImpl->log("start vkGetImageSparseMemoryRequirements2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15807,6 +16301,7 @@
             transform_fromhost_VkSparseImageMemoryRequirements2(mImpl->resources(), (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
         }
     }
+    mImpl->log("finish vkGetImageSparseMemoryRequirements2KHR");;
 }
 
 #endif
@@ -15819,6 +16314,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSamplerYcbcrConversion* pYcbcrConversion)
 {
+    mImpl->log("start vkCreateSamplerYcbcrConversionKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15895,6 +16391,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateSamplerYcbcrConversionKHR");;
     return vkCreateSamplerYcbcrConversionKHR_VkResult_return;
 }
 
@@ -15903,6 +16400,7 @@
     VkSamplerYcbcrConversion ycbcrConversion,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroySamplerYcbcrConversionKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -15958,6 +16456,7 @@
     {
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
+    mImpl->log("finish vkDestroySamplerYcbcrConversionKHR");;
 }
 
 #endif
@@ -15967,6 +16466,7 @@
     uint32_t bindInfoCount,
     const VkBindBufferMemoryInfo* pBindInfos)
 {
+    mImpl->log("start vkBindBufferMemory2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16022,6 +16522,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkBindBufferMemory2KHR");;
     return vkBindBufferMemory2KHR_VkResult_return;
 }
 
@@ -16030,6 +16531,7 @@
     uint32_t bindInfoCount,
     const VkBindImageMemoryInfo* pBindInfos)
 {
+    mImpl->log("start vkBindImageMemory2KHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16085,6 +16587,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkBindImageMemory2KHR");;
     return vkBindImageMemory2KHR_VkResult_return;
 }
 
@@ -16095,6 +16598,7 @@
     const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
     VkDescriptorSetLayoutSupport* pSupport)
 {
+    mImpl->log("start vkGetDescriptorSetLayoutSupportKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16136,6 +16640,7 @@
     {
         transform_fromhost_VkDescriptorSetLayoutSupport(mImpl->resources(), (VkDescriptorSetLayoutSupport*)(pSupport));
     }
+    mImpl->log("finish vkGetDescriptorSetLayoutSupportKHR");;
 }
 
 #endif
@@ -16149,6 +16654,7 @@
     uint32_t maxDrawCount,
     uint32_t stride)
 {
+    mImpl->log("start vkCmdDrawIndirectCountKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16202,6 +16708,7 @@
     stream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
     stream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
     stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
+    mImpl->log("finish vkCmdDrawIndirectCountKHR");;
 }
 
 void VkEncoder::vkCmdDrawIndexedIndirectCountKHR(
@@ -16213,6 +16720,7 @@
     uint32_t maxDrawCount,
     uint32_t stride)
 {
+    mImpl->log("start vkCmdDrawIndexedIndirectCountKHR");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16266,6 +16774,7 @@
     stream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
     stream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
     stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
+    mImpl->log("finish vkCmdDrawIndexedIndirectCountKHR");;
 }
 
 #endif
@@ -16278,6 +16787,7 @@
     VkImageUsageFlags imageUsage,
     int* grallocUsage)
 {
+    mImpl->log("start vkGetSwapchainGrallocUsageANDROID");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16315,6 +16825,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetSwapchainGrallocUsageANDROID");;
     return vkGetSwapchainGrallocUsageANDROID_VkResult_return;
 }
 
@@ -16325,6 +16836,7 @@
     VkSemaphore semaphore,
     VkFence fence)
 {
+    mImpl->log("start vkAcquireImageANDROID");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16380,6 +16892,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkAcquireImageANDROID");;
     return vkAcquireImageANDROID_VkResult_return;
 }
 
@@ -16390,6 +16903,7 @@
     VkImage image,
     int* pNativeFenceFd)
 {
+    mImpl->log("start vkQueueSignalReleaseImageANDROID");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16443,6 +16957,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkQueueSignalReleaseImageANDROID");;
     return vkQueueSignalReleaseImageANDROID_VkResult_return;
 }
 
@@ -16454,6 +16969,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDebugReportCallbackEXT* pCallback)
 {
+    mImpl->log("start vkCreateDebugReportCallbackEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16532,6 +17048,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateDebugReportCallbackEXT");;
     return vkCreateDebugReportCallbackEXT_VkResult_return;
 }
 
@@ -16540,6 +17057,7 @@
     VkDebugReportCallbackEXT callback,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyDebugReportCallbackEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16596,6 +17114,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkDebugReportCallbackEXT((VkDebugReportCallbackEXT*)&callback);
+    mImpl->log("finish vkDestroyDebugReportCallbackEXT");;
 }
 
 void VkEncoder::vkDebugReportMessageEXT(
@@ -16608,6 +17127,7 @@
     const char* pLayerPrefix,
     const char* pMessage)
 {
+    mImpl->log("start vkDebugReportMessageEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16667,6 +17187,7 @@
     stream->write((int32_t*)&local_messageCode, sizeof(int32_t));
     stream->putString(local_pLayerPrefix);
     stream->putString(local_pMessage);
+    mImpl->log("finish vkDebugReportMessageEXT");;
 }
 
 #endif
@@ -16687,6 +17208,7 @@
     VkDevice device,
     const VkDebugMarkerObjectTagInfoEXT* pTagInfo)
 {
+    mImpl->log("start vkDebugMarkerSetObjectTagEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16726,6 +17248,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkDebugMarkerSetObjectTagEXT");;
     return vkDebugMarkerSetObjectTagEXT_VkResult_return;
 }
 
@@ -16733,6 +17256,7 @@
     VkDevice device,
     const VkDebugMarkerObjectNameInfoEXT* pNameInfo)
 {
+    mImpl->log("start vkDebugMarkerSetObjectNameEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16772,6 +17296,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkDebugMarkerSetObjectNameEXT");;
     return vkDebugMarkerSetObjectNameEXT_VkResult_return;
 }
 
@@ -16779,6 +17304,7 @@
     VkCommandBuffer commandBuffer,
     const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
 {
+    mImpl->log("start vkCmdDebugMarkerBeginEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16813,11 +17339,13 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1206, 1);
     stream->write((uint64_t*)&cgen_var_1206, 1 * 8);
     marshal_VkDebugMarkerMarkerInfoEXT(stream, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
+    mImpl->log("finish vkCmdDebugMarkerBeginEXT");;
 }
 
 void VkEncoder::vkCmdDebugMarkerEndEXT(
     VkCommandBuffer commandBuffer)
 {
+    mImpl->log("start vkCmdDebugMarkerEndEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16839,12 +17367,14 @@
     uint64_t cgen_var_1208;
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1208, 1);
     stream->write((uint64_t*)&cgen_var_1208, 1 * 8);
+    mImpl->log("finish vkCmdDebugMarkerEndEXT");;
 }
 
 void VkEncoder::vkCmdDebugMarkerInsertEXT(
     VkCommandBuffer commandBuffer,
     const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
 {
+    mImpl->log("start vkCmdDebugMarkerInsertEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16879,6 +17409,7 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1210, 1);
     stream->write((uint64_t*)&cgen_var_1210, 1 * 8);
     marshal_VkDebugMarkerMarkerInfoEXT(stream, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
+    mImpl->log("finish vkCmdDebugMarkerInsertEXT");;
 }
 
 #endif
@@ -16896,6 +17427,7 @@
     uint32_t maxDrawCount,
     uint32_t stride)
 {
+    mImpl->log("start vkCmdDrawIndirectCountAMD");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -16949,6 +17481,7 @@
     stream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
     stream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
     stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
+    mImpl->log("finish vkCmdDrawIndirectCountAMD");;
 }
 
 void VkEncoder::vkCmdDrawIndexedIndirectCountAMD(
@@ -16960,6 +17493,7 @@
     uint32_t maxDrawCount,
     uint32_t stride)
 {
+    mImpl->log("start vkCmdDrawIndexedIndirectCountAMD");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17013,6 +17547,7 @@
     stream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
     stream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
     stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
+    mImpl->log("finish vkCmdDrawIndexedIndirectCountAMD");;
 }
 
 #endif
@@ -17033,6 +17568,7 @@
     size_t* pInfoSize,
     void* pInfo)
 {
+    mImpl->log("start vkGetShaderInfoAMD");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17127,6 +17663,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetShaderInfoAMD");;
     return vkGetShaderInfoAMD_VkResult_return;
 }
 
@@ -17146,6 +17683,7 @@
     VkExternalMemoryHandleTypeFlagsNV externalHandleType,
     VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceExternalImageFormatPropertiesNV");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17203,6 +17741,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceExternalImageFormatPropertiesNV");;
     return vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return;
 }
 
@@ -17216,6 +17755,7 @@
     VkExternalMemoryHandleTypeFlagsNV handleType,
     HANDLE* pHandle)
 {
+    mImpl->log("start vkGetMemoryWin32HandleNV");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17258,6 +17798,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetMemoryWin32HandleNV");;
     return vkGetMemoryWin32HandleNV_VkResult_return;
 }
 
@@ -17273,6 +17814,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    mImpl->log("start vkCreateViSurfaceNN");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17349,6 +17891,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateViSurfaceNN");;
     return vkCreateViSurfaceNN_VkResult_return;
 }
 
@@ -17362,6 +17905,7 @@
     VkCommandBuffer commandBuffer,
     const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin)
 {
+    mImpl->log("start vkCmdBeginConditionalRenderingEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17396,11 +17940,13 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1250, 1);
     stream->write((uint64_t*)&cgen_var_1250, 1 * 8);
     marshal_VkConditionalRenderingBeginInfoEXT(stream, (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin));
+    mImpl->log("finish vkCmdBeginConditionalRenderingEXT");;
 }
 
 void VkEncoder::vkCmdEndConditionalRenderingEXT(
     VkCommandBuffer commandBuffer)
 {
+    mImpl->log("start vkCmdEndConditionalRenderingEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17422,6 +17968,7 @@
     uint64_t cgen_var_1252;
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1252, 1);
     stream->write((uint64_t*)&cgen_var_1252, 1 * 8);
+    mImpl->log("finish vkCmdEndConditionalRenderingEXT");;
 }
 
 #endif
@@ -17430,6 +17977,7 @@
     VkCommandBuffer commandBuffer,
     const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo)
 {
+    mImpl->log("start vkCmdProcessCommandsNVX");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17464,12 +18012,14 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1254, 1);
     stream->write((uint64_t*)&cgen_var_1254, 1 * 8);
     marshal_VkCmdProcessCommandsInfoNVX(stream, (VkCmdProcessCommandsInfoNVX*)(local_pProcessCommandsInfo));
+    mImpl->log("finish vkCmdProcessCommandsNVX");;
 }
 
 void VkEncoder::vkCmdReserveSpaceForCommandsNVX(
     VkCommandBuffer commandBuffer,
     const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo)
 {
+    mImpl->log("start vkCmdReserveSpaceForCommandsNVX");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17504,6 +18054,7 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1256, 1);
     stream->write((uint64_t*)&cgen_var_1256, 1 * 8);
     marshal_VkCmdReserveSpaceForCommandsInfoNVX(stream, (VkCmdReserveSpaceForCommandsInfoNVX*)(local_pReserveSpaceInfo));
+    mImpl->log("finish vkCmdReserveSpaceForCommandsNVX");;
 }
 
 VkResult VkEncoder::vkCreateIndirectCommandsLayoutNVX(
@@ -17512,6 +18063,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout)
 {
+    mImpl->log("start vkCreateIndirectCommandsLayoutNVX");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17590,6 +18142,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateIndirectCommandsLayoutNVX");;
     return vkCreateIndirectCommandsLayoutNVX_VkResult_return;
 }
 
@@ -17598,6 +18151,7 @@
     VkIndirectCommandsLayoutNVX indirectCommandsLayout,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyIndirectCommandsLayoutNVX");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17654,6 +18208,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkIndirectCommandsLayoutNVX((VkIndirectCommandsLayoutNVX*)&indirectCommandsLayout);
+    mImpl->log("finish vkDestroyIndirectCommandsLayoutNVX");;
 }
 
 VkResult VkEncoder::vkCreateObjectTableNVX(
@@ -17662,6 +18217,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkObjectTableNVX* pObjectTable)
 {
+    mImpl->log("start vkCreateObjectTableNVX");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17740,6 +18296,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateObjectTableNVX");;
     return vkCreateObjectTableNVX_VkResult_return;
 }
 
@@ -17748,6 +18305,7 @@
     VkObjectTableNVX objectTable,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyObjectTableNVX");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17804,6 +18362,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkObjectTableNVX((VkObjectTableNVX*)&objectTable);
+    mImpl->log("finish vkDestroyObjectTableNVX");;
 }
 
 VkResult VkEncoder::vkRegisterObjectsNVX(
@@ -17813,6 +18372,7 @@
     const VkObjectTableEntryNVX* const* ppObjectTableEntries,
     const uint32_t* pObjectIndices)
 {
+    mImpl->log("start vkRegisterObjectsNVX");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17864,6 +18424,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkRegisterObjectsNVX");;
     return vkRegisterObjectsNVX_VkResult_return;
 }
 
@@ -17874,6 +18435,7 @@
     const VkObjectEntryTypeNVX* pObjectEntryTypes,
     const uint32_t* pObjectIndices)
 {
+    mImpl->log("start vkUnregisterObjectsNVX");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17928,6 +18490,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkUnregisterObjectsNVX");;
     return vkUnregisterObjectsNVX_VkResult_return;
 }
 
@@ -17936,6 +18499,7 @@
     VkDeviceGeneratedCommandsFeaturesNVX* pFeatures,
     VkDeviceGeneratedCommandsLimitsNVX* pLimits)
 {
+    mImpl->log("start vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -17971,6 +18535,7 @@
     {
         transform_fromhost_VkDeviceGeneratedCommandsLimitsNVX(mImpl->resources(), (VkDeviceGeneratedCommandsLimitsNVX*)(pLimits));
     }
+    mImpl->log("finish vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX");;
 }
 
 #endif
@@ -17981,6 +18546,7 @@
     uint32_t viewportCount,
     const VkViewportWScalingNV* pViewportWScalings)
 {
+    mImpl->log("start vkCmdSetViewportWScalingNV");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18035,6 +18601,7 @@
     {
         marshal_VkViewportWScalingNV(stream, (VkViewportWScalingNV*)(local_pViewportWScalings + i));
     }
+    mImpl->log("finish vkCmdSetViewportWScalingNV");;
 }
 
 #endif
@@ -18043,6 +18610,7 @@
     VkPhysicalDevice physicalDevice,
     VkDisplayKHR display)
 {
+    mImpl->log("start vkReleaseDisplayEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18077,6 +18645,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkReleaseDisplayEXT");;
     return vkReleaseDisplayEXT_VkResult_return;
 }
 
@@ -18087,6 +18656,7 @@
     Display* dpy,
     VkDisplayKHR display)
 {
+    mImpl->log("start vkAcquireXlibDisplayEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18124,6 +18694,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkAcquireXlibDisplayEXT");;
     return vkAcquireXlibDisplayEXT_VkResult_return;
 }
 
@@ -18133,6 +18704,7 @@
     RROutput rrOutput,
     VkDisplayKHR* pDisplay)
 {
+    mImpl->log("start vkGetRandROutputDisplayEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18177,6 +18749,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetRandROutputDisplayEXT");;
     return vkGetRandROutputDisplayEXT_VkResult_return;
 }
 
@@ -18187,6 +18760,7 @@
     VkSurfaceKHR surface,
     VkSurfaceCapabilities2EXT* pSurfaceCapabilities)
 {
+    mImpl->log("start vkGetPhysicalDeviceSurfaceCapabilities2EXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18228,6 +18802,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPhysicalDeviceSurfaceCapabilities2EXT");;
     return vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return;
 }
 
@@ -18238,6 +18813,7 @@
     VkDisplayKHR display,
     const VkDisplayPowerInfoEXT* pDisplayPowerInfo)
 {
+    mImpl->log("start vkDisplayPowerControlEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18285,6 +18861,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkDisplayPowerControlEXT");;
     return vkDisplayPowerControlEXT_VkResult_return;
 }
 
@@ -18294,6 +18871,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkFence* pFence)
 {
+    mImpl->log("start vkRegisterDeviceEventEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18370,6 +18948,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkRegisterDeviceEventEXT");;
     return vkRegisterDeviceEventEXT_VkResult_return;
 }
 
@@ -18380,6 +18959,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkFence* pFence)
 {
+    mImpl->log("start vkRegisterDisplayEventEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18464,6 +19044,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkRegisterDisplayEventEXT");;
     return vkRegisterDisplayEventEXT_VkResult_return;
 }
 
@@ -18473,6 +19054,7 @@
     VkSurfaceCounterFlagBitsEXT counter,
     uint64_t* pCounterValue)
 {
+    mImpl->log("start vkGetSwapchainCounterEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18514,6 +19096,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetSwapchainCounterEXT");;
     return vkGetSwapchainCounterEXT_VkResult_return;
 }
 
@@ -18524,6 +19107,7 @@
     VkSwapchainKHR swapchain,
     VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties)
 {
+    mImpl->log("start vkGetRefreshCycleDurationGOOGLE");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18565,6 +19149,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetRefreshCycleDurationGOOGLE");;
     return vkGetRefreshCycleDurationGOOGLE_VkResult_return;
 }
 
@@ -18574,6 +19159,7 @@
     uint32_t* pPresentationTimingCount,
     VkPastPresentationTimingGOOGLE* pPresentationTimings)
 {
+    mImpl->log("start vkGetPastPresentationTimingGOOGLE");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18674,6 +19260,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetPastPresentationTimingGOOGLE");;
     return vkGetPastPresentationTimingGOOGLE_VkResult_return;
 }
 
@@ -18695,6 +19282,7 @@
     uint32_t discardRectangleCount,
     const VkRect2D* pDiscardRectangles)
 {
+    mImpl->log("start vkCmdSetDiscardRectangleEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18749,6 +19337,7 @@
     {
         marshal_VkRect2D(stream, (VkRect2D*)(local_pDiscardRectangles + i));
     }
+    mImpl->log("finish vkCmdSetDiscardRectangleEXT");;
 }
 
 #endif
@@ -18763,6 +19352,7 @@
     const VkSwapchainKHR* pSwapchains,
     const VkHdrMetadataEXT* pMetadata)
 {
+    mImpl->log("start vkSetHdrMetadataEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18833,6 +19423,7 @@
     {
         marshal_VkHdrMetadataEXT(stream, (VkHdrMetadataEXT*)(local_pMetadata + i));
     }
+    mImpl->log("finish vkSetHdrMetadataEXT");;
 }
 
 #endif
@@ -18843,6 +19434,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    mImpl->log("start vkCreateIOSSurfaceMVK");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -18919,6 +19511,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateIOSSurfaceMVK");;
     return vkCreateIOSSurfaceMVK_VkResult_return;
 }
 
@@ -18930,6 +19523,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    mImpl->log("start vkCreateMacOSSurfaceMVK");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19006,6 +19600,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateMacOSSurfaceMVK");;
     return vkCreateMacOSSurfaceMVK_VkResult_return;
 }
 
@@ -19019,6 +19614,7 @@
     VkDevice device,
     const VkDebugUtilsObjectNameInfoEXT* pNameInfo)
 {
+    mImpl->log("start vkSetDebugUtilsObjectNameEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19058,6 +19654,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkSetDebugUtilsObjectNameEXT");;
     return vkSetDebugUtilsObjectNameEXT_VkResult_return;
 }
 
@@ -19065,6 +19662,7 @@
     VkDevice device,
     const VkDebugUtilsObjectTagInfoEXT* pTagInfo)
 {
+    mImpl->log("start vkSetDebugUtilsObjectTagEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19104,6 +19702,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkSetDebugUtilsObjectTagEXT");;
     return vkSetDebugUtilsObjectTagEXT_VkResult_return;
 }
 
@@ -19111,6 +19710,7 @@
     VkQueue queue,
     const VkDebugUtilsLabelEXT* pLabelInfo)
 {
+    mImpl->log("start vkQueueBeginDebugUtilsLabelEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19145,11 +19745,13 @@
     stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1375, 1);
     stream->write((uint64_t*)&cgen_var_1375, 1 * 8);
     marshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
+    mImpl->log("finish vkQueueBeginDebugUtilsLabelEXT");;
 }
 
 void VkEncoder::vkQueueEndDebugUtilsLabelEXT(
     VkQueue queue)
 {
+    mImpl->log("start vkQueueEndDebugUtilsLabelEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19171,12 +19773,14 @@
     uint64_t cgen_var_1377;
     stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1377, 1);
     stream->write((uint64_t*)&cgen_var_1377, 1 * 8);
+    mImpl->log("finish vkQueueEndDebugUtilsLabelEXT");;
 }
 
 void VkEncoder::vkQueueInsertDebugUtilsLabelEXT(
     VkQueue queue,
     const VkDebugUtilsLabelEXT* pLabelInfo)
 {
+    mImpl->log("start vkQueueInsertDebugUtilsLabelEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19211,12 +19815,14 @@
     stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1379, 1);
     stream->write((uint64_t*)&cgen_var_1379, 1 * 8);
     marshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
+    mImpl->log("finish vkQueueInsertDebugUtilsLabelEXT");;
 }
 
 void VkEncoder::vkCmdBeginDebugUtilsLabelEXT(
     VkCommandBuffer commandBuffer,
     const VkDebugUtilsLabelEXT* pLabelInfo)
 {
+    mImpl->log("start vkCmdBeginDebugUtilsLabelEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19251,11 +19857,13 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1381, 1);
     stream->write((uint64_t*)&cgen_var_1381, 1 * 8);
     marshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
+    mImpl->log("finish vkCmdBeginDebugUtilsLabelEXT");;
 }
 
 void VkEncoder::vkCmdEndDebugUtilsLabelEXT(
     VkCommandBuffer commandBuffer)
 {
+    mImpl->log("start vkCmdEndDebugUtilsLabelEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19277,12 +19885,14 @@
     uint64_t cgen_var_1383;
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1383, 1);
     stream->write((uint64_t*)&cgen_var_1383, 1 * 8);
+    mImpl->log("finish vkCmdEndDebugUtilsLabelEXT");;
 }
 
 void VkEncoder::vkCmdInsertDebugUtilsLabelEXT(
     VkCommandBuffer commandBuffer,
     const VkDebugUtilsLabelEXT* pLabelInfo)
 {
+    mImpl->log("start vkCmdInsertDebugUtilsLabelEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19317,6 +19927,7 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1385, 1);
     stream->write((uint64_t*)&cgen_var_1385, 1 * 8);
     marshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
+    mImpl->log("finish vkCmdInsertDebugUtilsLabelEXT");;
 }
 
 VkResult VkEncoder::vkCreateDebugUtilsMessengerEXT(
@@ -19325,6 +19936,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDebugUtilsMessengerEXT* pMessenger)
 {
+    mImpl->log("start vkCreateDebugUtilsMessengerEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19403,6 +20015,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateDebugUtilsMessengerEXT");;
     return vkCreateDebugUtilsMessengerEXT_VkResult_return;
 }
 
@@ -19411,6 +20024,7 @@
     VkDebugUtilsMessengerEXT messenger,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyDebugUtilsMessengerEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19467,6 +20081,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkDebugUtilsMessengerEXT((VkDebugUtilsMessengerEXT*)&messenger);
+    mImpl->log("finish vkDestroyDebugUtilsMessengerEXT");;
 }
 
 void VkEncoder::vkSubmitDebugUtilsMessageEXT(
@@ -19475,6 +20090,7 @@
     VkDebugUtilsMessageTypeFlagsEXT messageTypes,
     const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData)
 {
+    mImpl->log("start vkSubmitDebugUtilsMessageEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19517,6 +20133,7 @@
     stream->write((VkDebugUtilsMessageSeverityFlagBitsEXT*)&local_messageSeverity, sizeof(VkDebugUtilsMessageSeverityFlagBitsEXT));
     stream->write((VkDebugUtilsMessageTypeFlagsEXT*)&local_messageTypes, sizeof(VkDebugUtilsMessageTypeFlagsEXT));
     marshal_VkDebugUtilsMessengerCallbackDataEXT(stream, (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData));
+    mImpl->log("finish vkSubmitDebugUtilsMessageEXT");;
 }
 
 #endif
@@ -19526,6 +20143,7 @@
     const AHardwareBuffer* buffer,
     VkAndroidHardwareBufferPropertiesANDROID* pProperties)
 {
+    mImpl->log("start vkGetAndroidHardwareBufferPropertiesANDROID");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19567,6 +20185,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetAndroidHardwareBufferPropertiesANDROID");;
     return vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return;
 }
 
@@ -19575,6 +20194,7 @@
     const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
     AHardwareBuffer** pBuffer)
 {
+    mImpl->log("start vkGetMemoryAndroidHardwareBufferANDROID");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19617,6 +20237,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetMemoryAndroidHardwareBufferANDROID");;
     return vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return;
 }
 
@@ -19636,6 +20257,7 @@
     VkCommandBuffer commandBuffer,
     const VkSampleLocationsInfoEXT* pSampleLocationsInfo)
 {
+    mImpl->log("start vkCmdSetSampleLocationsEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19670,6 +20292,7 @@
     stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1406, 1);
     stream->write((uint64_t*)&cgen_var_1406, 1 * 8);
     marshal_VkSampleLocationsInfoEXT(stream, (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo));
+    mImpl->log("finish vkCmdSetSampleLocationsEXT");;
 }
 
 void VkEncoder::vkGetPhysicalDeviceMultisamplePropertiesEXT(
@@ -19677,6 +20300,7 @@
     VkSampleCountFlagBits samples,
     VkMultisamplePropertiesEXT* pMultisampleProperties)
 {
+    mImpl->log("start vkGetPhysicalDeviceMultisamplePropertiesEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19709,6 +20333,7 @@
     {
         transform_fromhost_VkMultisamplePropertiesEXT(mImpl->resources(), (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
     }
+    mImpl->log("finish vkGetPhysicalDeviceMultisamplePropertiesEXT");;
 }
 
 #endif
@@ -19729,6 +20354,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkValidationCacheEXT* pValidationCache)
 {
+    mImpl->log("start vkCreateValidationCacheEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19807,6 +20433,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkCreateValidationCacheEXT");;
     return vkCreateValidationCacheEXT_VkResult_return;
 }
 
@@ -19815,6 +20442,7 @@
     VkValidationCacheEXT validationCache,
     const VkAllocationCallbacks* pAllocator)
 {
+    mImpl->log("start vkDestroyValidationCacheEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19871,6 +20499,7 @@
         marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
     }
     resources->destroyMapping()->mapHandles_VkValidationCacheEXT((VkValidationCacheEXT*)&validationCache);
+    mImpl->log("finish vkDestroyValidationCacheEXT");;
 }
 
 VkResult VkEncoder::vkMergeValidationCachesEXT(
@@ -19879,6 +20508,7 @@
     uint32_t srcCacheCount,
     const VkValidationCacheEXT* pSrcCaches)
 {
+    mImpl->log("start vkMergeValidationCachesEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -19937,6 +20567,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkMergeValidationCachesEXT");;
     return vkMergeValidationCachesEXT_VkResult_return;
 }
 
@@ -19946,6 +20577,7 @@
     size_t* pDataSize,
     void* pData)
 {
+    mImpl->log("start vkGetValidationCacheDataEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -20032,6 +20664,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetValidationCacheDataEXT");;
     return vkGetValidationCacheDataEXT_VkResult_return;
 }
 
@@ -20049,6 +20682,7 @@
     const void* pHostPointer,
     VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties)
 {
+    mImpl->log("start vkGetMemoryHostPointerPropertiesEXT");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -20106,6 +20740,7 @@
     countingStream->clearPool();
     stream->clearPool();
     pool->freeAll();
+    mImpl->log("finish vkGetMemoryHostPointerPropertiesEXT");;
     return vkGetMemoryHostPointerPropertiesEXT_VkResult_return;
 }
 
@@ -20118,6 +20753,7 @@
     VkDeviceSize dstOffset,
     uint32_t marker)
 {
+    mImpl->log("start vkCmdWriteBufferMarkerAMD");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -20159,6 +20795,7 @@
     stream->write((uint64_t*)&cgen_var_1448, 1 * 8);
     stream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
     stream->write((uint32_t*)&local_marker, sizeof(uint32_t));
+    mImpl->log("finish vkCmdWriteBufferMarkerAMD");;
 }
 
 #endif
@@ -20173,6 +20810,7 @@
     VkCommandBuffer commandBuffer,
     const void* pCheckpointMarker)
 {
+    mImpl->log("start vkCmdSetCheckpointNV");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -20214,6 +20852,7 @@
     {
         stream->write((void*)local_pCheckpointMarker, sizeof(uint8_t));
     }
+    mImpl->log("finish vkCmdSetCheckpointNV");;
 }
 
 void VkEncoder::vkGetQueueCheckpointDataNV(
@@ -20221,6 +20860,7 @@
     uint32_t* pCheckpointDataCount,
     VkCheckpointDataNV* pCheckpointData)
 {
+    mImpl->log("start vkGetQueueCheckpointDataNV");
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -20308,6 +20948,7 @@
             transform_fromhost_VkCheckpointDataNV(mImpl->resources(), (VkCheckpointDataNV*)(pCheckpointData + i));
         }
     }
+    mImpl->log("finish vkGetQueueCheckpointDataNV");;
 }
 
 #endif
@@ -20317,6 +20958,7 @@
     VkDeviceMemory memory,
     uint64_t* pAddress)
 {
+    mImpl->log("start vkMapMemoryIntoAddressSpaceGOOGLE");
     mImpl->resources()->on_vkMapMemoryIntoAddressSpaceGOOGLE_pre(this, VK_SUCCESS, device, memory, pAddress);
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
@@ -20379,6 +21021,7 @@
     stream->clearPool();
     pool->freeAll();
     mImpl->resources()->on_vkMapMemoryIntoAddressSpaceGOOGLE(this, vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return, device, memory, pAddress);
+    mImpl->log("finish vkMapMemoryIntoAddressSpaceGOOGLE");;
     return vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return;
 }