this repo has no description
13
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 74 lines 2.6 kB view raw
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}