diff --git a/src/spall.zig b/src/spall.zig index ee6270a2e6a4067e41918afe57b48917686147a3..758ae936950c30560797ce69a44a83e145c5ae9b 100644 --- a/src/spall.zig +++ b/src/spall.zig @@ -9,6 +9,7 @@ var pid: std.os.linux.pid_t = undefined; threadlocal var tid: std.os.linux.pid_t = undefined; threadlocal var path: []const u8 = undefined; threadlocal var file: std.fs.File = undefined; +threadlocal var buffered_writer: std.io.BufferedWriter(4096, std.fs.File.Writer) = undefined; pub fn init() !void { pid = std.os.linux.getpid(); @@ -23,19 +24,22 @@ pub fn init2() !void { path = try std.fmt.allocPrint(alloc, "/data/trace.{d}.{d}.spall.jsonl", .{ pid, tid }); file = try std.fs.cwd().createFile(path, .{}); - try file.writer().writeAll("[\n"); + buffered_writer = std.io.bufferedWriter(file.writer()); + + try buffered_writer.writer().writeAll("[\n"); } pub fn deinit2() void { defer alloc.free(path); defer file.close(); - file.writer().writeAll("]\n") catch {}; + buffered_writer.writer().writeAll("]\n") catch {}; + buffered_writer.flush() catch {}; log.debug("{s}", .{path}); } pub inline fn trace_begin(ctx: tracer.Ctx) void { - file.writer().print( + buffered_writer.writer().print( \\{{"cat":"function", "name":"{s}:{d}:{d} ({s})", "ph": "B", "pid": {d}, "tid": {d}, "ts": {d}}}, \\ , @@ -53,7 +57,7 @@ pub inline fn trace_begin(ctx: tracer.Ctx) void { pub inline fn trace_end(ctx: tracer.Ctx) void { _ = ctx; - file.writer().print( + buffered_writer.writer().print( \\{{"cat":"function", "ph": "E", "pid": {d}, "tid": {d}, "ts": {d}}}, \\ ,