commit c087525edae2db147c89c83513a0778f87bee30d (tree)
parent 05032c869378e7c7e3da3a2770161266058aa320
Author: Sahnvour <sahnvour@pm.me>
Date: Sun, 28 Jul 2019 18:46:40 +0200
pdb: improved stream reading performance, printing stack trace from a stage1 crash is now 10x faster
Diffstat:
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/std/pdb.zig b/std/pdb.zig
@@ -661,7 +661,6 @@ const MsfStream = struct {
}
fn read(self: *MsfStream, buffer: []u8) !usize {
-
var block_id = @intCast(usize, self.pos / self.block_size);
var block = self.blocks[block_id];
var offset = self.pos % self.block_size;
@@ -671,11 +670,12 @@ const MsfStream = struct {
const in = &file_stream.stream;
var size: usize = 0;
- for (buffer) |*byte| {
- byte.* = try in.readByte();
-
- offset += 1;
- size += 1;
+ var rem_buffer = buffer;
+ while (size < buffer.len) {
+ const size_to_read = math.min(self.block_size - offset, rem_buffer.len);
+ size += try in.read(rem_buffer[0..size_to_read]);
+ rem_buffer = buffer[size..];
+ offset += size_to_read;
// If we're at the end of a block, go to the next one.
if (offset == self.block_size) {
@@ -686,8 +686,8 @@ const MsfStream = struct {
}
}
- self.pos += size;
- return size;
+ self.pos += buffer.len;
+ return buffer.len;
}
fn seekBy(self: *MsfStream, len: i64) !void {