mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 23:23:28 +00:00
Start with 16K buffer (down from 32K). Use array list growth algorithm
This commit is contained in:
@@ -547,7 +547,7 @@ fn Reader(comptime EXPECT_MASK: bool) type {
|
|||||||
const Self = @This();
|
const Self = @This();
|
||||||
|
|
||||||
fn init(allocator: Allocator) !Self {
|
fn init(allocator: Allocator) !Self {
|
||||||
const buf = try allocator.alloc(u8, 32 * 1024);
|
const buf = try allocator.alloc(u8, 16 * 1024);
|
||||||
return .{
|
return .{
|
||||||
.buf = buf,
|
.buf = buf,
|
||||||
.allocator = allocator,
|
.allocator = allocator,
|
||||||
@@ -626,12 +626,9 @@ fn Reader(comptime EXPECT_MASK: bool) type {
|
|||||||
} else if (message_len > MAX_MESSAGE_SIZE) {
|
} else if (message_len > MAX_MESSAGE_SIZE) {
|
||||||
return error.TooLarge;
|
return error.TooLarge;
|
||||||
} else if (message_len > self.buf.len) {
|
} else if (message_len > self.buf.len) {
|
||||||
const new_buf = try self.allocator.alloc(u8, message_len);
|
const len = self.buf.len;
|
||||||
@memcpy(new_buf[0..buf.len], buf);
|
self.buf = try growBuffer(self.allocator, self.buf, message_len);
|
||||||
self.allocator.free(self.buf);
|
buf = self.buf[0..len];
|
||||||
self.buf = new_buf;
|
|
||||||
self.len = buf.len;
|
|
||||||
buf = new_buf[0..buf.len];
|
|
||||||
// we need more data
|
// we need more data
|
||||||
return null;
|
return null;
|
||||||
} else if (buf.len < message_len) {
|
} else if (buf.len < message_len) {
|
||||||
@@ -780,6 +777,23 @@ fn Reader(comptime EXPECT_MASK: bool) type {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn growBuffer(allocator: Allocator, buf: []u8, required_capacity: usize) ![]u8 {
|
||||||
|
// from std.ArrayList
|
||||||
|
var new_capacity = buf.len;
|
||||||
|
while (true) {
|
||||||
|
new_capacity +|= new_capacity / 2 + 8;
|
||||||
|
if (new_capacity >= required_capacity) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (allocator.resize(buf, new_capacity)) {
|
||||||
|
return buf.ptr[0..new_capacity];
|
||||||
|
}
|
||||||
|
const new_buffer = try allocator.alloc(u8, new_capacity);
|
||||||
|
@memcpy(new_buffer[0..buf.len], buf);
|
||||||
|
allocator.free(buf);
|
||||||
|
return new_buffer;
|
||||||
|
}
|
||||||
|
|
||||||
const Fragments = struct {
|
const Fragments = struct {
|
||||||
type: Message.Type,
|
type: Message.Type,
|
||||||
message: std.ArrayListUnmanaged(u8),
|
message: std.ArrayListUnmanaged(u8),
|
||||||
|
|||||||
Reference in New Issue
Block a user