Skip to content

Commit c087525

Browse files
committed
pdb: improved stream reading performance, printing stack trace from a stage1 crash is now 10x faster
1 parent 05032c8 commit c087525

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

std/pdb.zig

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,6 @@ const MsfStream = struct {
661661
}
662662

663663
fn read(self: *MsfStream, buffer: []u8) !usize {
664-
665664
var block_id = @intCast(usize, self.pos / self.block_size);
666665
var block = self.blocks[block_id];
667666
var offset = self.pos % self.block_size;
@@ -671,11 +670,12 @@ const MsfStream = struct {
671670
const in = &file_stream.stream;
672671

673672
var size: usize = 0;
674-
for (buffer) |*byte| {
675-
byte.* = try in.readByte();
676-
677-
offset += 1;
678-
size += 1;
673+
var rem_buffer = buffer;
674+
while (size < buffer.len) {
675+
const size_to_read = math.min(self.block_size - offset, rem_buffer.len);
676+
size += try in.read(rem_buffer[0..size_to_read]);
677+
rem_buffer = buffer[size..];
678+
offset += size_to_read;
679679

680680
// If we're at the end of a block, go to the next one.
681681
if (offset == self.block_size) {
@@ -686,8 +686,8 @@ const MsfStream = struct {
686686
}
687687
}
688688

689-
self.pos += size;
690-
return size;
689+
self.pos += buffer.len;
690+
return buffer.len;
691691
}
692692

693693
fn seekBy(self: *MsfStream, len: i64) !void {

0 commit comments

Comments
 (0)