perf hists browser: Dynamically change verbosity level
authorAlexis Berlemont <alexis.berlemont@gmail.com>
Wed, 12 Oct 2016 21:48:23 +0000 (23:48 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 24 Oct 2016 14:07:42 +0000 (11:07 -0300)
Here is a small patch which tries to fulfill a point in the perf todo
list:

* Make pressing 'V' multiple times to go on cycling thru various
  verbosity levels in 'perf top', so that info that is present in
  'perf top -v' can be obtained without having to restart the tool
  (acme).

After a small grep in the code, the max verbosity level seems 3; so,
we cycle at 4; I did not dare define a MAX_VERBOSE_LEVEL constant.

Signed-off-by: Alexis Berlemont <alexis.berlemont@gmail.com>
Suggested-and-Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20161012214823.14324-2-alexis.berlemont@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/ui/browsers/hists.c
tools/perf/util/map.c

index 31d6d5a7c2dc5ee5e19c6ad2ada9fc4c5dac6521..ddc4c3e59cc1f88bb40e0737d54aabbc4458df86 100644 (file)
@@ -2807,7 +2807,10 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
                        do_zoom_dso(browser, actions);
                        continue;
                case 'V':
-                       browser->show_dso = !browser->show_dso;
+                       verbose = (verbose + 1) % 4;
+                       browser->show_dso = verbose > 0;
+                       ui_helpline__fpush("Verbosity level set to %d\n",
+                                          verbose);
                        continue;
                case 't':
                        actions->thread = thread;
index c662fef95d1444f243195e90370a7d5e97d06856..4f9a71c63026d185e48807895f0bee39570e8598 100644 (file)
@@ -682,9 +682,16 @@ static int maps__fixup_overlappings(struct maps *maps, struct map *map, FILE *fp
                        continue;
 
                if (verbose >= 2) {
-                       fputs("overlapping maps:\n", fp);
-                       map__fprintf(map, fp);
-                       map__fprintf(pos, fp);
+
+                       if (use_browser) {
+                               pr_warning("overlapping maps in %s "
+                                          "(disable tui for more info)\n",
+                                          map->dso->name);
+                       } else {
+                               fputs("overlapping maps:\n", fp);
+                               map__fprintf(map, fp);
+                               map__fprintf(pos, fp);
+                       }
                }
 
                rb_erase_init(&pos->rb_node, root);
@@ -702,7 +709,7 @@ static int maps__fixup_overlappings(struct maps *maps, struct map *map, FILE *fp
 
                        before->end = map->start;
                        __map_groups__insert(pos->groups, before);
-                       if (verbose >= 2)
+                       if (verbose >= 2 && !use_browser)
                                map__fprintf(before, fp);
                        map__put(before);
                }
@@ -717,7 +724,7 @@ static int maps__fixup_overlappings(struct maps *maps, struct map *map, FILE *fp
 
                        after->start = map->end;
                        __map_groups__insert(pos->groups, after);
-                       if (verbose >= 2)
+                       if (verbose >= 2 && !use_browser)
                                map__fprintf(after, fp);
                        map__put(after);
                }