From c0be5bc070ce08d934abf99fe334b93deafb714e Mon Sep 17 00:00:00 2001 From: Karol Kosek Date: Sat, 13 May 2023 16:33:15 +0200 Subject: [PATCH] dd: Print elapsed time and write speed after copying --- Userland/Utilities/dd.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Userland/Utilities/dd.cpp b/Userland/Utilities/dd.cpp index d1c72279a8..01481db66e 100644 --- a/Userland/Utilities/dd.cpp +++ b/Userland/Utilities/dd.cpp @@ -7,8 +7,10 @@ #include #include +#include #include #include +#include #include #include #include @@ -43,6 +45,7 @@ struct { size_t total_bytes_copied = 0; size_t total_blocks_in = 0, partial_blocks_in = 0; size_t total_blocks_out = 0, partial_blocks_out = 0; + Core::ElapsedTimer timer { true }; } statistics; static void closing_statistics() @@ -52,7 +55,13 @@ static void closing_statistics() warnln("{}+{} blocks in", statistics.total_blocks_in, statistics.partial_blocks_in); warnln("{}+{} blocks out", statistics.total_blocks_out, statistics.partial_blocks_out); if (statistics.status != Noxfer) { - warnln("{} bytes copied.", statistics.total_bytes_copied); + auto elapsed_time = statistics.timer.elapsed_time(); + DeprecatedString copy_speed = "INF B/s"; + if (!elapsed_time.is_zero()) { + auto speed = statistics.total_bytes_copied * 1000 / elapsed_time.to_milliseconds(); + copy_speed = human_readable_quantity(speed, AK::HumanReadableBasedOn::Base2, "B/s"sv); + } + warnln("{} bytes copied ({}), {} ms, {}", statistics.total_bytes_copied, human_readable_size(statistics.total_bytes_copied), elapsed_time.to_milliseconds(), copy_speed); } } @@ -215,6 +224,8 @@ ErrorOr serenity_main(Main::Arguments arguments) exit(status); })); + statistics.timer.start(); + while (1) { nread = read(input_fd, buffer, block_size); if (nread < 0) {