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

This commit is contained in:
Sahnvour 2019-07-28 18:46:40 +02:00
parent 05032c8693
commit c087525eda

View File

@ -661,7 +661,6 @@ const MsfStream = struct {
} }
fn read(self: *MsfStream, buffer: []u8) !usize { fn read(self: *MsfStream, buffer: []u8) !usize {
var block_id = @intCast(usize, self.pos / self.block_size); var block_id = @intCast(usize, self.pos / self.block_size);
var block = self.blocks[block_id]; var block = self.blocks[block_id];
var offset = self.pos % self.block_size; var offset = self.pos % self.block_size;
@ -671,11 +670,12 @@ const MsfStream = struct {
const in = &file_stream.stream; const in = &file_stream.stream;
var size: usize = 0; var size: usize = 0;
for (buffer) |*byte| { var rem_buffer = buffer;
byte.* = try in.readByte(); while (size < buffer.len) {
const size_to_read = math.min(self.block_size - offset, rem_buffer.len);
offset += 1; size += try in.read(rem_buffer[0..size_to_read]);
size += 1; rem_buffer = buffer[size..];
offset += size_to_read;
// If we're at the end of a block, go to the next one. // If we're at the end of a block, go to the next one.
if (offset == self.block_size) { if (offset == self.block_size) {
@ -686,8 +686,8 @@ const MsfStream = struct {
} }
} }
self.pos += size; self.pos += buffer.len;
return size; return buffer.len;
} }
fn seekBy(self: *MsfStream, len: i64) !void { fn seekBy(self: *MsfStream, len: i64) !void {