From 51f332475399ce42767fc912291fa879b91d4ddf Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Wed, 9 Dec 2020 11:48:15 +0100 Subject: [PATCH] gdb: Print percent progress for debuginfod. Prints progress like: Downloading 4.89 MB separate debug info for /usr/lib64/libgcrypt.so.20.. 100% Downloading 1.10 MB separate debug info for /usr/lib64/liblzma.so.5.. 100% Downloading 1.31 MB separate debug info for /usr/lib64/liblz4.so.1.. 100% Downloading 0.96 MB separate debug info for /usr/lib64/libsmime3.so.. 36% ChangeLog: * gdb/debuginfod-support.c (struct user_data): Add last_percent_printed field. (progressfn): Print progress. --- gdb/debuginfod-support.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c index e21b2f40ca..3d68f08fc0 100644 --- a/gdb/debuginfod-support.c +++ b/gdb/debuginfod-support.c @@ -46,12 +46,12 @@ debuginfod_debuginfo_query (const unsigned char *build_id, struct user_data { user_data (const char *desc, const char *fname) - : desc (desc), fname (fname), has_printed (false) + : desc (desc), fname (fname), last_percent_printed (-1) { } const char * const desc; const char * const fname; - bool has_printed; + long last_percent_printed; }; /* Deleter for a debuginfod_client. */ @@ -80,13 +80,20 @@ progressfn (debuginfod_client *c, long cur, long total) return 1; } - if (!data->has_printed && total != 0) + if (total != 0) { /* Print this message only once. */ - data->has_printed = true; - printf_filtered ("Downloading %s %ps...\n", - data->desc, - styled_string (file_name_style.style (), data->fname)); + long percent = 100 * cur / total; + if (percent != data->last_percent_printed) + { + data->last_percent_printed = percent; + printf_filtered ("\rDownloading %.2f MB %s %ps.. %3ld%%%s", + 1.0f * total / (1024 * 1024), + data->desc, + styled_string (file_name_style.style (), data->fname), + percent, cur == total ? "\n" : ""); + gdb_flush (gdb_stdout); + } } return 0; -- 2.29.2