From 1f09765edae5dcec601f88a8d149cb97f2073578 Mon Sep 17 00:00:00 2001 From: namedkitten Date: Fri, 10 Jul 2020 12:08:45 +0100 Subject: [PATCH] Fix battery memory usage. --- src/bar/bar.zig | 1 - src/main.zig | 12 ++--- src/widgets/battery/battery.zig | 88 ++++++++++++--------------------- src/widgets/time/time.zig | 1 + 4 files changed, 38 insertions(+), 64 deletions(-) diff --git a/src/bar/bar.zig b/src/bar/bar.zig index cffa12c..245424d 100644 --- a/src/bar/bar.zig +++ b/src/bar/bar.zig @@ -49,7 +49,6 @@ pub const Bar = struct { fn process(self: *Bar) !void { while (self.running) { std.time.sleep(5000 * std.time.ns_per_ms); - return; } } pub fn keep_running(self: *Bar) bool { diff --git a/src/main.zig b/src/main.zig index b7dc1b1..95f2c5d 100644 --- a/src/main.zig +++ b/src/main.zig @@ -11,7 +11,7 @@ const DebugAllocator = @import("debug_allocator.zig"); const Info = @import("types/info.zig").Info; pub fn main() !void { - const debug: bool = true; + const debug: bool = false; var allocator: *std.mem.Allocator = undefined; var dbgAlloc: *DebugAllocator = undefined; if (debug) { @@ -25,11 +25,11 @@ pub fn main() !void { var br = Bar.init(&bar); const widgets = [_]*Widget{ - //&Widget.init(&textWidget.New("owo", "potato")), // 4KiB - //&Widget.init(&textWidget.New("uwu", "tomato")), // 4KiB - //&Widget.init(&weatherWidget.New(allocator, &br, "London")), // 16KiB - &Widget.init(&batteryWidget.New(allocator, &br)), // 756.15KiB - //&Widget.init(&timeWidget.New(allocator, &br)), // 32.46KiBx + &Widget.init(&textWidget.New("owo", "potato")), // 4KiB + &Widget.init(&textWidget.New("uwu", "tomato")), // 4KiB + &Widget.init(&weatherWidget.New(allocator, &br, "London")), // 16KiB + &Widget.init(&batteryWidget.New(allocator, &br)), // 12.11KiB + &Widget.init(&timeWidget.New(allocator, &br)), // 32.46KiB }; bar.widgets = widgets[0..]; try br.start(); diff --git a/src/widgets/battery/battery.zig b/src/widgets/battery/battery.zig index b5565cc..e5174f5 100644 --- a/src/widgets/battery/battery.zig +++ b/src/widgets/battery/battery.zig @@ -5,7 +5,7 @@ const fs = std.fs; const cwd = fs.cwd; const colour = @import("../../formatting/colour.zig").colour; -pub fn compare_from_walker(allocator: *std.mem.Allocator, path: []const u8, start_path: []const u8, required_filename: []const u8) !bool { +pub fn compare_path(allocator: *std.mem.Allocator, path: []const u8, start_path: []const u8, required_filename: []const u8) !bool { if (path.len == start_path.len + 1 + required_filename.len) { var full_path = try std.fmt.allocPrint(allocator, "{}/{}", .{ start_path, required_filename }); defer allocator.free(full_path); @@ -60,63 +60,38 @@ pub const BatteryWidget = struct { var arena = std.heap.ArenaAllocator.init(provided_allocator); defer arena.deinit(); var allocator = &arena.allocator; - var power_supply_walker = try fs.walkPath(allocator, "/sys/class/power_supply"); - defer power_supply_walker.deinit(); var pp = PowerPaths{}; - while (try power_supply_walker.next()) |supply_entry| { - switch (supply_entry.kind) { - .SymLink => { - var filepath = supply_entry.path; - var power_supply_file_walker = try fs.walkPath(allocator, filepath); - defer power_supply_file_walker.deinit(); - - while (try power_supply_file_walker.next()) |entry| { - switch (entry.kind) { - .File => { - if (try compare_from_walker(allocator, entry.path, filepath, "status")) { - pp.status_path = try std.fmt.allocPrint(provided_allocator, "{}", .{entry.path}); - continue; - } - if (try compare_from_walker(allocator, entry.path, filepath, "power_now")) { - pp.power_now_path = try std.fmt.allocPrint(provided_allocator, "{}", .{entry.path}); - continue; - } - if (try compare_from_walker(allocator, entry.path, filepath, "capacity")) { - pp.capacity_path = try std.fmt.allocPrint(provided_allocator, "{}", .{entry.path}); - continue; - } - if (try compare_from_walker(allocator, entry.path, filepath, "current_now")) { - pp.current_now_path = try std.fmt.allocPrint(provided_allocator, "{}", .{entry.path}); - continue; - } - if (try compare_from_walker(allocator, entry.path, filepath, "voltage_now")) { - pp.voltage_now_path = try std.fmt.allocPrint(provided_allocator, "{}", .{entry.path}); - continue; - } - }, - .SymLink, - .BlockDevice, - .CharacterDevice, - .Directory, - .NamedPipe, - .UnixDomainSocket, - .Whiteout, - .Unknown, - => continue, - } - } - }, - .File, - .BlockDevice, - .CharacterDevice, - .Directory, - .NamedPipe, - .UnixDomainSocket, - .Whiteout, - .Unknown, - => continue, + var dir = try fs.cwd().openDir("/sys/class/power_supply", .{ .iterate = true }); + var iterate = dir.iterate(); + defer dir.close(); + while (try iterate.next()) |ent| { + var ps_dir = try std.fmt.allocPrint(provided_allocator, "/sys/class/power_supply/{}", .{ent.name}); + var supply_dir = try fs.cwd().openDir(ps_dir, .{ .iterate = true }); + var supply_iterate = supply_dir.iterate(); + defer supply_dir.close(); + while (try supply_iterate.next()) |entry| { + if (std.mem.eql(u8, entry.name, "status")) { + pp.status_path = try std.fmt.allocPrint(provided_allocator, "{}/{}", .{ ps_dir, entry.name }); + continue; + } + if (std.mem.eql(u8, entry.name, "power_now")) { + pp.status_path = try std.fmt.allocPrint(provided_allocator, "{}/{}", .{ ps_dir, entry.name }); + continue; + } + if (std.mem.eql(u8, entry.name, "capacity")) { + pp.status_path = try std.fmt.allocPrint(provided_allocator, "{}/{}", .{ ps_dir, entry.name }); + continue; + } + if (std.mem.eql(u8, entry.name, "current_now")) { + pp.status_path = try std.fmt.allocPrint(provided_allocator, "{}/{}", .{ ps_dir, entry.name }); + continue; + } + if (std.mem.eql(u8, entry.name, "voltage_now")) { + pp.status_path = try std.fmt.allocPrint(provided_allocator, "{}/{}", .{ ps_dir, entry.name }); + continue; + } } } @@ -128,7 +103,6 @@ pub const BatteryWidget = struct { defer pparena.deinit(); var ppallocator = &pparena.allocator; const pp = try self.get_power_paths(ppallocator); - if (true) return; while (self.bar.keep_running()) { var arena = std.heap.ArenaAllocator.init(self.allocator); defer arena.deinit(); @@ -205,7 +179,7 @@ pub const BatteryWidget = struct { pub inline fn New(allocator: *std.mem.Allocator, bar: *Bar) BatteryWidget { return BatteryWidget{ - .allocator = &std.heap.loggingAllocator(allocator, std.io.getStdErr().writer()).allocator, + .allocator = allocator, .bar = bar, }; } diff --git a/src/widgets/time/time.zig b/src/widgets/time/time.zig index a5940e4..9290979 100644 --- a/src/widgets/time/time.zig +++ b/src/widgets/time/time.zig @@ -86,6 +86,7 @@ pub const TimeWidget = struct { .full_text = h, .markup = "pango", }); + std.time.sleep(200 * std.time.ns_per_ms); } }