From 810082d15c244b8b29470d3bb1c6b11fc9a40c25 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 30 Oct 2015 12:09:57 +0100 Subject: buffer: add buffer_init Signed-off-by: Gerd Hoffmann Reviewed-by: Peter Lieven Reviewed-by: Daniel P. Berrange Message-id: 1446203414-4013-3-git-send-email-kraxel@redhat.com --- include/qemu/buffer.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'include') diff --git a/include/qemu/buffer.h b/include/qemu/buffer.h index b380cec..0710e16 100644 --- a/include/qemu/buffer.h +++ b/include/qemu/buffer.h @@ -34,12 +34,24 @@ typedef struct Buffer Buffer; */ struct Buffer { + char *name; size_t capacity; size_t offset; uint8_t *buffer; }; /** + * buffer_init: + * @buffer: the buffer object + * @name: buffer name + * + * Optionally attach a name to the buffer, to make it easier + * to identify in debug traces. + */ +void buffer_init(Buffer *buffer, const char *name, ...) + GCC_FMT_ATTR(2, 3); + +/** * buffer_reserve: * @buffer: the buffer object * @len: the minimum required free space -- cgit v1.1 From 4d1eb5fdb141c9100eb82e1dc7d4547fb1decd8b Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 30 Oct 2015 12:09:58 +0100 Subject: buffer: add buffer_move_empty Signed-off-by: Gerd Hoffmann Reviewed-by: Peter Lieven Reviewed-by: Daniel Berrange Message-id: 1446203414-4013-4-git-send-email-kraxel@redhat.com --- include/qemu/buffer.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'include') diff --git a/include/qemu/buffer.h b/include/qemu/buffer.h index 0710e16..f53ee9e 100644 --- a/include/qemu/buffer.h +++ b/include/qemu/buffer.h @@ -127,4 +127,14 @@ uint8_t *buffer_end(Buffer *buffer); */ gboolean buffer_empty(Buffer *buffer); +/** + * buffer_move_empty: + * @to: destination buffer object + * @from: source buffer object + * + * Moves buffer, without copying data. 'to' buffer must be empty. + * 'from' buffer is empty and zero-sized on return. + */ +void buffer_move_empty(Buffer *to, Buffer *from); + #endif /* QEMU_BUFFER_H__ */ -- cgit v1.1 From 830a9583206a051c240b74c3f688a015dc5d2967 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 30 Oct 2015 12:09:59 +0100 Subject: buffer: add buffer_move Signed-off-by: Gerd Hoffmann Reviewed-by: Peter Lieven Reviewed-by: Daniel P. Berrange Message-id: 1446203414-4013-5-git-send-email-kraxel@redhat.com --- include/qemu/buffer.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'include') diff --git a/include/qemu/buffer.h b/include/qemu/buffer.h index f53ee9e..1358df1 100644 --- a/include/qemu/buffer.h +++ b/include/qemu/buffer.h @@ -137,4 +137,14 @@ gboolean buffer_empty(Buffer *buffer); */ void buffer_move_empty(Buffer *to, Buffer *from); +/** + * buffer_move: + * @to: destination buffer object + * @from: source buffer object + * + * Moves buffer, copying data (unless 'to' buffer happens to be empty). + * 'from' buffer is empty and zero-sized on return. + */ +void buffer_move(Buffer *to, Buffer *from); + #endif /* QEMU_BUFFER_H__ */ -- cgit v1.1 From 1ff36b5d4d00a4e3633eb960bf2be562f5e47dbf Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 30 Oct 2015 12:10:00 +0100 Subject: buffer: add buffer_shrink Signed-off-by: Gerd Hoffmann Reviewed-by: Peter Lieven Reviewed-by: Daniel P. Berrange Message-id: 1446203414-4013-6-git-send-email-kraxel@redhat.com --- include/qemu/buffer.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'include') diff --git a/include/qemu/buffer.h b/include/qemu/buffer.h index 1358df1..0a69b3a 100644 --- a/include/qemu/buffer.h +++ b/include/qemu/buffer.h @@ -52,6 +52,16 @@ void buffer_init(Buffer *buffer, const char *name, ...) GCC_FMT_ATTR(2, 3); /** + * buffer_shrink: + * @buffer: the buffer object + * + * Try to shrink the buffer. Checks current buffer capacity and size + * and reduces capacity in case only a fraction of the buffer is + * actually used. + */ +void buffer_shrink(Buffer *buffer); + +/** * buffer_reserve: * @buffer: the buffer object * @len: the minimum required free space -- cgit v1.1 From f14c3d85b003d8614144ae67a26157667c1e1245 Mon Sep 17 00:00:00 2001 From: Peter Lieven Date: Fri, 30 Oct 2015 12:10:14 +0100 Subject: buffer: allow a buffer to shrink gracefully the idea behind this patch is to allow the buffer to shrink, but make this a seldom operation. The buffers average size is measured exponentionally smoothed with am alpha of 1/128. Signed-off-by: Peter Lieven Signed-off-by: Gerd Hoffmann Reviewed-by: Daniel P. Berrange Message-id: 1446203414-4013-20-git-send-email-kraxel@redhat.com --- include/qemu/buffer.h | 1 + 1 file changed, 1 insertion(+) (limited to 'include') diff --git a/include/qemu/buffer.h b/include/qemu/buffer.h index 0a69b3a..dead9b7 100644 --- a/include/qemu/buffer.h +++ b/include/qemu/buffer.h @@ -37,6 +37,7 @@ struct Buffer { char *name; size_t capacity; size_t offset; + uint64_t avg_size; uint8_t *buffer; }; -- cgit v1.1