Skip to content

Commit 13bfe45

Browse files
committed
feat: TUI now shows performance metrics while scanning and after.
This is in preparation for the `moonwalk` upgrade.
1 parent 565581f commit 13bfe45

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

src/interactive/widgets/footer.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ pub struct Footer;
1414
pub struct FooterProps {
1515
pub total_bytes: Option<u128>,
1616
pub entries_traversed: u64,
17+
pub traversal_start: std::time::Instant,
18+
pub elapsed: Option<std::time::Duration>,
1719
pub format: ByteFormat,
1820
pub message: Option<String>,
1921
}
@@ -23,18 +25,31 @@ impl Footer {
2325
let FooterProps {
2426
total_bytes,
2527
entries_traversed,
28+
elapsed,
29+
traversal_start,
2630
format,
2731
message,
2832
} = props.borrow();
2933

3034
let spans = vec![
3135
Span::from(format!(
32-
" Total disk usage: {} Entries: {} ",
36+
" Total disk usage: {} Entries: {} {progress} ",
3337
match total_bytes {
3438
Some(b) => format!("{}", format.display(*b)),
3539
None => "-".to_owned(),
3640
},
3741
entries_traversed,
42+
progress = match elapsed {
43+
Some(elapsed) => format!("in {:.02}s", elapsed.as_secs_f32()),
44+
None => {
45+
let elapsed = traversal_start.elapsed();
46+
format!(
47+
"in {:.0}s ({:.0}/s)",
48+
elapsed.as_secs_f32(),
49+
*entries_traversed as f32 / elapsed.as_secs_f32()
50+
)
51+
}
52+
}
3853
))
3954
.into(),
4055
message.as_ref().map(|m| {

src/interactive/widgets/main.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ impl MainWindow {
4242
tree,
4343
entries_traversed,
4444
total_bytes,
45+
start,
46+
elapsed,
4547
..
4648
},
4749
display,
@@ -138,6 +140,8 @@ impl MainWindow {
138140
format: display.byte_format,
139141
entries_traversed: *entries_traversed,
140142
message: state.message.clone(),
143+
traversal_start: *start,
144+
elapsed: *elapsed,
141145
},
142146
footer_area,
143147
buf,

src/traverse.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,18 @@ pub struct EntryData {
2222
}
2323

2424
/// The result of the previous filesystem traversal
25-
#[derive(Default, Debug)]
25+
#[derive(Debug)]
2626
pub struct Traversal {
2727
/// A tree representing the entire filestem traversal
2828
pub tree: Tree,
2929
/// The top-level node of the tree.
3030
pub root_index: TreeIndex,
3131
/// Amount of files or directories we have seen during the filesystem traversal
3232
pub entries_traversed: u64,
33+
/// The time at which the traversal started.
34+
pub start: std::time::Instant,
35+
/// The amount of time it took to finish the traversal. Set only once done.
36+
pub elapsed: Option<std::time::Duration>,
3337
/// Total amount of IO errors encountered when traversing the filesystem
3438
pub io_errors: u64,
3539
/// Total amount of bytes seen during the traversal
@@ -62,7 +66,11 @@ impl Traversal {
6266
Traversal {
6367
tree,
6468
root_index,
65-
..Default::default()
69+
entries_traversed: 0,
70+
start: std::time::Instant::now(),
71+
elapsed: None,
72+
io_errors: 0,
73+
total_bytes: None,
6674
}
6775
};
6876

@@ -201,6 +209,7 @@ impl Traversal {
201209
set_size_or_panic(&mut t.tree, t.root_index, root_size);
202210
t.total_bytes = Some(root_size);
203211

212+
t.elapsed = Some(t.start.elapsed());
204213
Ok(Some(t))
205214
}
206215

0 commit comments

Comments
 (0)