mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
pdb: improved stream reading performance, printing stack trace from a stage1 crash is now 10x faster
This commit is contained in:
parent
05032c8693
commit
c087525eda
16
std/pdb.zig
16
std/pdb.zig
@ -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 {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user