this repo has no description
1const std = @import("std");
2const vaxis = @import("vaxis");
3
4fn parseIterations(allocator: std.mem.Allocator, args: std.process.Args) !usize {
5 var it = try args.iterateAllocator(allocator);
6 defer it.deinit();
7 _ = it.next();
8 if (it.next()) |val| {
9 return std.fmt.parseUnsigned(usize, val, 10);
10 }
11 return 200;
12}
13
14fn printResults(writer: *std.Io.Writer, label: []const u8, iterations: usize, elapsed: std.Io.Duration, total_bytes: u64) !void {
15 const ns_per_frame = @divTrunc(elapsed.toNanoseconds(), iterations);
16 const bytes_per_frame = total_bytes / iterations;
17 try writer.print(
18 "{s}: frames={d} total_time={f} ns/frame={d} bytes={d} bytes/frame={d}\n",
19 .{ label, iterations, elapsed, ns_per_frame, total_bytes, bytes_per_frame },
20 );
21}
22
23pub fn main(init: std.process.Init) !void {
24 const io = init.io;
25 const allocator = init.gpa;
26
27 const iterations = try parseIterations(allocator, init.minimal.args);
28
29 var vx = try vaxis.init(io, allocator, init.environ_map, .{});
30 var init_writer: std.Io.Writer.Allocating = .init(allocator);
31 defer init_writer.deinit();
32 defer vx.deinit(allocator, &init_writer.writer);
33
34 const winsize = vaxis.Winsize{ .rows = 24, .cols = 80, .x_pixel = 0, .y_pixel = 0 };
35 try vx.resize(allocator, &init_writer.writer, winsize);
36
37 const stdout_file: std.Io.File = .stdout();
38 var stdout_buf: [1024]u8 = undefined;
39 var stdout_writer = stdout_file.writer(io, &stdout_buf);
40 const stdout = &stdout_writer.interface;
41
42 {
43 var buf: [1024]u8 = undefined;
44 var idle_writer: std.Io.Writer.Discarding = .init(&buf);
45 var timer: std.Io.Timestamp = .now(io, .real);
46 var i: usize = 0;
47 while (i < iterations) : (i += 1) {
48 try vx.render(&idle_writer.writer);
49 }
50 const idle_ns = timer.untilNow(io, .real);
51 const idle_bytes = idle_writer.fullCount();
52 try printResults(stdout, "idle", iterations, idle_ns, idle_bytes);
53 }
54
55 {
56 var buf: [1024]u8 = undefined;
57 var dirty_writer: std.Io.Writer.Discarding = .init(&buf);
58 var timer: std.Io.Timestamp = .now(io, .real);
59 var i: usize = 0;
60 while (i < iterations) : (i += 1) {
61 vx.queueRefresh();
62 try vx.render(&dirty_writer.writer);
63 }
64 const dirty_ns = timer.untilNow(io, .real);
65 const dirty_bytes = dirty_writer.fullCount();
66 try printResults(stdout, "dirty", iterations, dirty_ns, dirty_bytes);
67 }
68
69 try stdout.flush();
70}
71
72test {
73 std.testing.refAllDecls(@This());
74}