From f2498d445fc0155d9704deb370ea2f7c6f98cfaf Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 30 Aug 2020 18:06:26 -0400 Subject: [PATCH] gpu: optimize ensureCapacity() Prevent unnecessary allocations by updating the ensureCapacity() methods to not create intermediate buffers, just create a single new buffer with the final size. Co-authored-by: Jonathon Reesor --- .../runelite/client/plugins/gpu/GpuFloatBuffer.java | 12 ++++++++++-- .../runelite/client/plugins/gpu/GpuIntBuffer.java | 12 ++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuFloatBuffer.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuFloatBuffer.java index a90d85a16d..5e5bbb529e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuFloatBuffer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuFloatBuffer.java @@ -49,9 +49,17 @@ class GpuFloatBuffer void ensureCapacity(int size) { - while (buffer.remaining() < size) + int capacity = buffer.capacity(); + final int position = buffer.position(); + if ((capacity - position) < size) { - FloatBuffer newB = allocateDirect(buffer.capacity() * 2); + do + { + capacity *= 2; + } + while ((capacity - position) < size); + + FloatBuffer newB = allocateDirect(capacity); buffer.flip(); newB.put(buffer); buffer = newB; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuIntBuffer.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuIntBuffer.java index 15ea5461ad..1e85111c19 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuIntBuffer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuIntBuffer.java @@ -54,9 +54,17 @@ class GpuIntBuffer void ensureCapacity(int size) { - while (buffer.remaining() < size) + int capacity = buffer.capacity(); + final int position = buffer.position(); + if ((capacity - position) < size) { - IntBuffer newB = allocateDirect(buffer.capacity() * 2); + do + { + capacity *= 2; + } + while ((capacity - position) < size); + + IntBuffer newB = allocateDirect(capacity); buffer.flip(); newB.put(buffer); buffer = newB;