From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id YKXEGBxd0V+cJAAAWB0awg (envelope-from ) for ; Wed, 09 Dec 2020 18:26:20 -0500 Received: by simark.ca (Postfix, from userid 112) id 5888A1F0A9; Wed, 9 Dec 2020 18:26:20 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id E6EF21EF4B for ; Wed, 9 Dec 2020 18:26:18 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7504D386F038; Wed, 9 Dec 2020 23:26:18 +0000 (GMT) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id DB2A9386F038 for ; Wed, 9 Dec 2020 23:26:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org DB2A9386F038 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tdevries@suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id D0665AC94; Wed, 9 Dec 2020 23:26:14 +0000 (UTC) To: =?UTF-8?Q?Martin_Li=c5=a1ka?= , Simon Marchi , gdb-patches@sourceware.org References: <6ad82f30-0ca3-8b19-2907-d71f0dfecafe@suse.cz> <2c28a403-a169-0dc3-9b64-58484237c8c2@suse.cz> From: Tom de Vries Subject: Re: [PATCH] gdb: print size of downloaded debuginfod binary Message-ID: <72061fbb-b480-04ce-ef4a-fe13a7266885@suse.de> Date: Thu, 10 Dec 2020 00:26:14 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------53EB1BBB603316B56F859D35" Content-Language: en-US X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" This is a multi-part message in MIME format. --------------53EB1BBB603316B56F859D35 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit On 12/9/20 11:51 AM, Martin Liška wrote: > On 12/8/20 3:28 PM, Simon Marchi wrote: >> On 2020-12-08 5:16 a.m., Martin Liška wrote: >> Temporary breakpoint 1 at 0x406150: file >>> /home/marxin/Programming/gcc/gcc/gcc-main.c, line 44. >>> Starting program: /home/marxin/bin/gcc/bin/gcc >>> Downloading 1.00 MB separate debug info for >>> /lib64/ld-linux-x86-64.so.2...10%..20%..30%..40%..50%..60%..70%..80%..90%..100% >>> >>> Downloading 4.20 MB separate debug info for >>> /lib64/libm.so.6...10%..20%..30%..40%..50%..60%..70%..80%..90%..100% >>> Downloading 10.72 MB separate debug info for >>> /lib64/libc.so.6...10%..20%..30%..40%..50% >>> >>> Thoughts? >> >> Could you make it so the percentage always gets written at the same >> place, overwriting the  previous percentage written? > > Sure, implemented in the attached patch. > Hi, I played around with this patch on openSUSE Tumbleweed and found two problems: - '\r' is not handled in fputs_maybe_filtered, so we run into the pagination prompt after having printed just one downloading line - when printing a downloading line longer than chars_per_line, it will wrap, so the '\r' does not reset back to the actual start of the line. The effect you see is that the download line is printed over and over again, flooding the screen. This updated patch fixes both problems, the latter by printing the % progress on its own line (which is cleared by a final '\r' after reaching 100%, in order not to waste lines on this). Thanks, - Tom --------------53EB1BBB603316B56F859D35 Content-Type: text/x-patch; charset=UTF-8; name="0010-gdb-Print-percent-progress-for-debuginfod.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline; filename="0010-gdb-Print-percent-progress-for-debuginfod.patch" gdb: Print percent progress for debuginfod Prints progress like: Downloading 4.89 MB separate debug info for /usr/lib64/libgcrypt.so.20. Downloading 1.10 MB separate debug info for /usr/lib64/liblzma.so.5. Downloading 1.31 MB separate debug info for /usr/lib64/liblz4.so.1. Downloading 0.96 MB separate debug info for /usr/lib64/libsmime3.so. 36% ChangeLog: 2020-12-10 Martin Liska Tom de Vries * gdb/debuginfod-support.c (struct user_data): Add last_percent_printed and first_line_printed field. (progressfn): Print progress. * utils.c (fputs_maybe_filtered): Handle '\r'. --- gdb/debuginfod-support.c | 36 ++++++++++++++++++++++++++++++------ gdb/utils.c | 6 ++++++ 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c index e21b2f40ca..3d74b2d9c8 100644 --- a/gdb/debuginfod-support.c +++ b/gdb/debuginfod-support.c @@ -46,12 +46,14 @@ debuginfod_debuginfo_query (const unsigned char *buil= d_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), + first_line_printed (false) { } =20 const char * const desc; const char * const fname; - bool has_printed; + long last_percent_printed; + bool first_line_printed; }; =20 /* Deleter for a debuginfod_client. */ @@ -80,14 +82,36 @@ progressfn (debuginfod_client *c, long cur, long tota= l) return 1; } =20 - if (!data->has_printed && total !=3D 0) + if (total =3D=3D 0) + return 0; + + if (!data->first_line_printed) { - /* Print this message only once. */ - data->has_printed =3D true; - printf_filtered ("Downloading %s %ps...\n", + printf_filtered ("Downloading %.2f MB %s %ps.\n", + 1.0f * total / (1024 * 1024), data->desc, styled_string (file_name_style.style (), data->fname)); + gdb_flush (gdb_stdout); + data->first_line_printed =3D true; + } + + if (cur =3D=3D total) + { + printf_filtered ("\r"); + gdb_flush (gdb_stdout); } + else if (cur > 0) + { + /* Print this message only once. */ + long percent =3D 100 * cur / total; + if (percent !=3D data->last_percent_printed) + { + data->last_percent_printed =3D percent; + printf_filtered ("\r%3ld%%", percent); + gdb_flush (gdb_stdout); + } + } + =20 return 0; } diff --git a/gdb/utils.c b/gdb/utils.c index 3226656e2c..26c671a44c 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -1769,6 +1769,12 @@ fputs_maybe_filtered (const char *linebuffer, stru= ct ui_file *stream, don't increment chars_printed here. */ lineptr +=3D skip_bytes; } + else if (*lineptr =3D=3D '\r') + { + wrap_buffer.push_back ('\r'); + chars_printed =3D 0; + lineptr++; + } else { wrap_buffer.push_back (*lineptr); --------------53EB1BBB603316B56F859D35--