Module: wine Branch: master Commit: 54b4df6731cd7b9660ac3b9e1c16deef5bc92fb5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=54b4df6731cd7b9660ac3b9e1c...
Author: Matteo Bruni mbruni@codeweavers.com Date: Fri Apr 24 22:25:42 2015 +0200
wined3d: Reduce initial wined3d_string_buffer buffer size to 32.
Also try to avoid unnecessary HeapReAlloc() + vsnprintf() loops when we know the required size of the buffer.
---
dlls/wined3d/shader.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c index 612b055..2d50ced 100644 --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c @@ -253,7 +253,7 @@ void string_buffer_clear(struct wined3d_string_buffer *buffer)
BOOL string_buffer_init(struct wined3d_string_buffer *buffer) { - buffer->buffer_size = 16384; + buffer->buffer_size = 32; if (!(buffer->buffer = HeapAlloc(GetProcessHeap(), 0, buffer->buffer_size))) { ERR("Failed to allocate shader buffer memory.\n"); @@ -274,6 +274,7 @@ int shader_vaddline(struct wined3d_string_buffer *buffer, const char *format, va unsigned int rem; int rc; char *new_buffer; + unsigned int new_buffer_size;
for (;;) { @@ -283,14 +284,17 @@ int shader_vaddline(struct wined3d_string_buffer *buffer, const char *format, va if (rc >= 0 /* C89 */ && (unsigned int)rc < rem /* C99 */) break;
- if (!(new_buffer = HeapReAlloc(GetProcessHeap(), 0, buffer->buffer, buffer->buffer_size * 2))) + new_buffer_size = buffer->buffer_size * 2; + while (rc > 0 && (unsigned int)rc >= new_buffer_size - buffer->content_size) + new_buffer_size *= 2; + if (!(new_buffer = HeapReAlloc(GetProcessHeap(), 0, buffer->buffer, new_buffer_size))) { ERR("Failed to grow buffer.\n"); buffer->buffer[buffer->content_size] = '\0'; return -1; } buffer->buffer = new_buffer; - buffer->buffer_size = buffer->buffer_size * 2; + buffer->buffer_size = new_buffer_size; } buffer->content_size += rc;