authorgravatar for sahnvour@pm.meSahnvour <sahnvour@pm.me> 2019-07-28 18:46:40+02:00
committergravatar for sahnvour@pm.meSahnvour <sahnvour@pm.me> 2019-07-29 23:40:18+02:00
logc087525edae2db147c89c83513a0778f87bee30d
treee0818d84bca8c67e23c81c721a241401f9b06afa
parent05032c869378e7c7e3da3a2770161266058aa320

pdb: improved stream reading performance, printing stack trace from a stage1 crash is now 10x faster


1 files changed, 8 insertions(+), 8 deletions(-)

std/pdb.zig+8-8
...@@ -661,7 +661,6 @@ const MsfStream = struct {...@@ -661,7 +661,6 @@ const MsfStream = struct {
661 }661 }
662662
663 fn read(self: *MsfStream, buffer: []u8) !usize {663 fn read(self: *MsfStream, buffer: []u8) !usize {
664
665 var block_id = @intCast(usize, self.pos / self.block_size);664 var block_id = @intCast(usize, self.pos / self.block_size);
666 var block = self.blocks[block_id];665 var block = self.blocks[block_id];
667 var offset = self.pos % self.block_size;666 var offset = self.pos % self.block_size;
...@@ -671,11 +670,12 @@ const MsfStream = struct {...@@ -671,11 +670,12 @@ const MsfStream = struct {
671 const in = &file_stream.stream;670 const in = &file_stream.stream;
672671
673 var size: usize = 0;672 var size: usize = 0;
674 for (buffer) |*byte| {673 var rem_buffer = buffer;
675 byte.* = try in.readByte();674 while (size < buffer.len) {
676675 const size_to_read = math.min(self.block_size - offset, rem_buffer.len);
677 offset += 1;676 size += try in.read(rem_buffer[0..size_to_read]);
678 size += 1;677 rem_buffer = buffer[size..];
678 offset += size_to_read;
679679
680 // If we're at the end of a block, go to the next one.680 // If we're at the end of a block, go to the next one.
681 if (offset == self.block_size) {681 if (offset == self.block_size) {
...@@ -686,8 +686,8 @@ const MsfStream = struct {...@@ -686,8 +686,8 @@ const MsfStream = struct {
686 }686 }
687 }687 }
688688
689 self.pos += size;689 self.pos += buffer.len;
690 return size;690 return buffer.len;
691 }691 }
692692
693 fn seekBy(self: *MsfStream, len: i64) !void {693 fn seekBy(self: *MsfStream, len: i64) !void {