Lines Matching full:buffer

23 #include "qemu/buffer.h"
34 static size_t buffer_req_size(Buffer *buffer, size_t len) in buffer_req_size() argument
37 pow2ceil(buffer->offset + len)); in buffer_req_size()
40 static void buffer_adj_size(Buffer *buffer, size_t len) in buffer_adj_size() argument
42 size_t old = buffer->capacity; in buffer_adj_size()
43 buffer->capacity = buffer_req_size(buffer, len); in buffer_adj_size()
44 buffer->buffer = g_realloc(buffer->buffer, buffer->capacity); in buffer_adj_size()
45 trace_buffer_resize(buffer->name ?: "unnamed", in buffer_adj_size()
46 old, buffer->capacity); in buffer_adj_size()
48 /* make it even harder for the buffer to shrink, reset average size in buffer_adj_size()
50 buffer->avg_size = MAX(buffer->avg_size, in buffer_adj_size()
51 buffer->capacity << BUFFER_AVG_SIZE_SHIFT); in buffer_adj_size()
54 void buffer_init(Buffer *buffer, const char *name, ...) in buffer_init() argument
59 buffer->name = g_strdup_vprintf(name, ap); in buffer_init()
63 static uint64_t buffer_get_avg_size(Buffer *buffer) in buffer_get_avg_size() argument
65 return buffer->avg_size >> BUFFER_AVG_SIZE_SHIFT; in buffer_get_avg_size()
68 void buffer_shrink(Buffer *buffer) in buffer_shrink() argument
72 /* Calculate the average size of the buffer as in buffer_shrink()
75 buffer->avg_size *= (1 << BUFFER_AVG_SIZE_SHIFT) - 1; in buffer_shrink()
76 buffer->avg_size >>= BUFFER_AVG_SIZE_SHIFT; in buffer_shrink()
77 buffer->avg_size += buffer_req_size(buffer, 0); in buffer_shrink()
79 /* And then only shrink if the average size of the buffer is much in buffer_shrink()
82 new = buffer_req_size(buffer, buffer_get_avg_size(buffer)); in buffer_shrink()
83 if (new < buffer->capacity >> 3 && in buffer_shrink()
85 buffer_adj_size(buffer, buffer_get_avg_size(buffer)); in buffer_shrink()
88 buffer_adj_size(buffer, 0); in buffer_shrink()
91 void buffer_reserve(Buffer *buffer, size_t len) in buffer_reserve() argument
93 if ((buffer->capacity - buffer->offset) < len) { in buffer_reserve()
94 buffer_adj_size(buffer, len); in buffer_reserve()
98 gboolean buffer_empty(Buffer *buffer) in buffer_empty() argument
100 return buffer->offset == 0; in buffer_empty()
103 uint8_t *buffer_end(Buffer *buffer) in buffer_end() argument
105 return buffer->buffer + buffer->offset; in buffer_end()
108 void buffer_reset(Buffer *buffer) in buffer_reset() argument
110 buffer->offset = 0; in buffer_reset()
111 buffer_shrink(buffer); in buffer_reset()
114 void buffer_free(Buffer *buffer) in buffer_free() argument
116 trace_buffer_free(buffer->name ?: "unnamed", buffer->capacity); in buffer_free()
117 g_free(buffer->buffer); in buffer_free()
118 g_free(buffer->name); in buffer_free()
119 buffer->offset = 0; in buffer_free()
120 buffer->capacity = 0; in buffer_free()
121 buffer->buffer = NULL; in buffer_free()
122 buffer->name = NULL; in buffer_free()
125 void buffer_append(Buffer *buffer, const void *data, size_t len) in buffer_append() argument
127 memcpy(buffer->buffer + buffer->offset, data, len); in buffer_append()
128 buffer->offset += len; in buffer_append()
131 void buffer_advance(Buffer *buffer, size_t len) in buffer_advance() argument
133 memmove(buffer->buffer, buffer->buffer + len, in buffer_advance()
134 (buffer->offset - len)); in buffer_advance()
135 buffer->offset -= len; in buffer_advance()
136 buffer_shrink(buffer); in buffer_advance()
139 void buffer_move_empty(Buffer *to, Buffer *from) in buffer_move_empty()
146 g_free(to->buffer); in buffer_move_empty()
149 to->buffer = from->buffer; in buffer_move_empty()
153 from->buffer = NULL; in buffer_move_empty()
156 void buffer_move(Buffer *to, Buffer *from) in buffer_move()
167 buffer_append(to, from->buffer, from->offset); in buffer_move()
169 g_free(from->buffer); in buffer_move()
172 from->buffer = NULL; in buffer_move()