This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] gcov: emit hotness colors to easily find hot code.


On 9/17/18 8:41 PM, David Malcolm wrote:
> On Wed, 2018-09-12 at 14:36 +0200, Martin Liška wrote:
>> Hi.
>>
>> This is follow-up of:
>> https://gcc.gnu.org/ml/gcc/2018-08/msg00162.html
>>
>> I'm suggesting to introduce using colors in order to indicate hotness
>> of lines. Legend is printed at the very beginning of the output file.
>> Example: https://pasteboard.co/HDxK4Nm.png
> 
> One comment: color seems to be being used for two different purposes:
> (a) in the left-hand column (presumably the profile count), where e.g.
> lines that are 0 are being marked as red
> (b) in the middle column (the line number), lines that are > 50% are
> being marked as red.
> 
> So red seems to be being used both for very hot lines (for the line
> number), and for unexecuted lines (for the profile count).

Thanks for review David.

Yes, it's used for 2 purposes.

> 
> Perhaps the "hotness legend" could instead say something like:
> 
> Colorization: profile count: blah blah blah
> Colorization: line numbers: hotness: > 50 % > 20% > 10%
> 
> to explain both colorization schemes?  (I'm not in love with the above
> wording, but hopefully the idea makes sense).

I welcome that, now one can see:

        -:    0:Colorization: profile count: zero coverage (exceptional) zero coverage (unexceptional) unexecuted block
        -:    0:Colorization: line numbers: hotness: > 50% > 20% > 10%
...

Hope it's an improvement.

Martin

> 
>> Patch survives gcov.exp test-suite. Will install next week if no
>> objections.
>>
>> Martin
>>
>> gcc/ChangeLog:
>>
>> 2018-09-12  Martin Liska  <mliska@suse.cz>
>>
>> 	* doc/gcov.texi: Document new option --use-hotness-colors.
>> 	* gcov.c (struct source_info): Declare new field.
>> 	(source_info::source_info): Set default for maximum_count.
>> 	(print_usage): Add new -q option.
>> 	(process_args): Process it.
>> 	(accumulate_line_info): Save src->maximum_count.
>> 	(output_line_beginning): Make color line number if
>> 	flag_use_hotness_colors is set.
>> 	(output_line_details): Pass default argument value.
>> 	(output_lines): Pass src->maximum_count.
>> ---
>>  gcc/doc/gcov.texi |  8 ++++++-
>>  gcc/gcov.c        | 56 +++++++++++++++++++++++++++++++++++++++++--
>> ----
>>  2 files changed, 56 insertions(+), 8 deletions(-)
>>
>>

>From 3e826e7b4b09a7130ee88122d54fb35ad41b044f Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Tue, 18 Sep 2018 12:48:16 +0200
Subject: [PATCH] Improve colorization legen in gcov reports.

gcc/ChangeLog:

2018-09-18  Martin Liska  <mliska@suse.cz>

	* gcov.c (output_lines): Print colorization legend
	for both flag_use_colors and flag_use_hotness_colors.
	Reword the help.
---
 gcc/gcov.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/gcc/gcov.c b/gcc/gcov.c
index c09d5060053..0de14dc52af 100644
--- a/gcc/gcov.c
+++ b/gcc/gcov.c
@@ -2935,9 +2935,19 @@ output_lines (FILE *gcov_file, const source_info *src)
   FILE *source_file;
   const char *retval;
 
-  /* Print legend of color hotness syntax.  */
+  /* Print colorization legend.  */
+  if (flag_use_colors)
+    fprintf (gcov_file, "%s",
+	     DEFAULT_LINE_START "Colorization: profile count: " \
+	     SGR_SEQ (COLOR_BG_CYAN) "zero coverage (exceptional)" SGR_RESET \
+	     " " \
+	     SGR_SEQ (COLOR_BG_RED) "zero coverage (unexceptional)" SGR_RESET \
+	     " " \
+	     SGR_SEQ (COLOR_BG_MAGENTA) "unexecuted block" SGR_RESET "\n");
+
   if (flag_use_hotness_colors)
-    fprintf (gcov_file, "%s", DEFAULT_LINE_START "Hotness legend: " \
+    fprintf (gcov_file, "%s",
+	     DEFAULT_LINE_START "Colorization: line numbers: hotness: " \
 	     SGR_SEQ (COLOR_BG_RED) "> 50%" SGR_RESET " " \
 	     SGR_SEQ (COLOR_BG_YELLOW) "> 20%" SGR_RESET " " \
 	     SGR_SEQ (COLOR_BG_GREEN) "> 10%" SGR_RESET "\n");
-- 
2.18.0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]