Commit 734365a7136dc2370c599a0a2545730974caba87

Steven Noonan 2022-01-27T06:05:56

Vulkan: improve command buffer reset performance When trying to profile why a game's framerate was decreasing over time, I found that memset() was taking the most self time out of any function in the process. The top two callers of memset() were: RenderPassCommandBufferHelper::reset OutsideRenderPassCommandBufferHelper::flushToPrimary Profiling specifically called out mUsedBuffers.clear() and mRenderPassUsedImages.clear() as being the worst offending lines. The problem is that FastIntegerSet (and by proxy, FastIntegerMap, where FastIntegerSet manages the keys) perform best when all keys are close to zero. With large key values (in this case, large image and buffer serials), significantly more memory gets allocated, causing mUsedBuffers.clear() and mRenderPassUsedImages.clear() during command buffer reset to take more and more time the longer the process runs. This change is essentially a partial revert of f9a062c9754. Bug: angleproject:6954 Change-Id: Id2542f6425f0845fe81d393ecf6b614b474c53c8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3420925 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>