diff --git a/src/json_import.zig b/src/json_import.zig index 177404f..20864c1 100644 --- a/src/json_import.zig +++ b/src/json_import.zig @@ -456,7 +456,7 @@ fn item(ctx: *Ctx, parent: ?*sink.Dir, dev: u64) void { parent.?.addStat(ctx.sink, name, &ctx.stat); } - if ((ctx.sink.files_seen.load(.monotonic) & 1024) == 0) + if ((ctx.sink.files_seen.load(.monotonic) & 65) == 0) main.handleEvent(false, false); } diff --git a/src/mem_src.zig b/src/mem_src.zig index 8e539e5..988904f 100644 --- a/src/mem_src.zig +++ b/src/mem_src.zig @@ -35,7 +35,7 @@ const Ctx = struct { fn rec(ctx: *Ctx, dir: *sink.Dir, entry: *model.Entry) void { - if ((ctx.sink.files_seen.load(.monotonic) & 1024) == 0) + if ((ctx.sink.files_seen.load(.monotonic) & 65) == 0) main.handleEvent(false, false); ctx.stat = toStat(entry); diff --git a/src/model.zig b/src/model.zig index 3ba4a0e..9028768 100644 --- a/src/model.zig +++ b/src/model.zig @@ -417,13 +417,29 @@ pub const inodes = struct { } } + // counters to track progress for addAllStats() + pub var add_total: usize = 0; + pub var add_done: usize = 0; + pub fn addAllStats() void { if (uncounted_full) { + add_total = map.count(); + add_done = 0; var it = map.keyIterator(); - while (it.next()) |e| setStats(e.*, true); + while (it.next()) |e| { + setStats(e.*, true); + add_done += 1; + if ((add_done & 65) == 0) main.handleEvent(false, false); + } } else { + add_total = uncounted.count(); + add_done = 0; var it = uncounted.keyIterator(); - while (it.next()) |u| if (map.getKey(u.*)) |e| setStats(e, true); + while (it.next()) |u| { + if (map.getKey(u.*)) |e| setStats(e, true); + add_done += 1; + if ((add_done & 65) == 0) main.handleEvent(false, false); + } } uncounted_full = false; if (uncounted.count() > 0) diff --git a/src/sink.zig b/src/sink.zig index 8bbee23..436cdf2 100644 --- a/src/sink.zig +++ b/src/sink.zig @@ -295,7 +295,11 @@ fn drawConsole() void { } if (global.state == .hlcnt) { - wr.writeAll("Counting hardlinks...\n") catch {}; + wr.writeAll("Counting hardlinks...") catch {}; + if (model.inodes.add_total > 0) + wr.print(" {} / {}", .{ model.inodes.add_done, model.inodes.add_total }) catch {}; + wr.writeByte('\n') catch {}; + st.lines_written += 1; } else if (global.state == .running) { var bytes: u64 = 0; @@ -445,7 +449,12 @@ pub fn draw() void { .hlcnt => { const box = ui.Box.create(4, ui.cols -| 5, "Finalizing"); box.move(2, 2); - ui.addstr("Counting hardlinks..."); + ui.addstr("Counting hardlinks... "); + if (model.inodes.add_total > 0) { + ui.addnum(.default, model.inodes.add_done); + ui.addstr(" / "); + ui.addnum(.default, model.inodes.add_total); + } }, .running => drawProgress(), },