perf diff: Add -b option for perf diff to display paired entries only
Adding -b option to perf diff command to display only entries with match in the baseline. Signed-off-by: Jiri Olsa <jolsa@redhat.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1349448287-18919-2-git-send-email-jolsa@redhat.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
f15eb531d3
commit
a06d143e7c
@ -72,6 +72,10 @@ OPTIONS
|
|||||||
--symfs=<directory>::
|
--symfs=<directory>::
|
||||||
Look for files with symbols relative to this directory.
|
Look for files with symbols relative to this directory.
|
||||||
|
|
||||||
|
-b::
|
||||||
|
--baseline-only::
|
||||||
|
Show only items with match in baseline.
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
linkperf:perf-record[1]
|
linkperf:perf-record[1]
|
||||||
|
@ -24,6 +24,7 @@ static char const *input_old = "perf.data.old",
|
|||||||
static char diff__default_sort_order[] = "dso,symbol";
|
static char diff__default_sort_order[] = "dso,symbol";
|
||||||
static bool force;
|
static bool force;
|
||||||
static bool show_displacement;
|
static bool show_displacement;
|
||||||
|
static bool show_baseline_only;
|
||||||
|
|
||||||
static int hists__add_entry(struct hists *self,
|
static int hists__add_entry(struct hists *self,
|
||||||
struct addr_location *al, u64 period)
|
struct addr_location *al, u64 period)
|
||||||
@ -172,6 +173,31 @@ static void perf_evlist__resort_hists(struct perf_evlist *evlist, bool name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void hists__baseline_only(struct hists *hists)
|
||||||
|
{
|
||||||
|
struct rb_node *next = rb_first(&hists->entries);
|
||||||
|
|
||||||
|
while (next != NULL) {
|
||||||
|
struct hist_entry *he = rb_entry(next, struct hist_entry, rb_node);
|
||||||
|
|
||||||
|
next = rb_next(&he->rb_node);
|
||||||
|
if (!he->pair) {
|
||||||
|
rb_erase(&he->rb_node, &hists->entries);
|
||||||
|
hist_entry__free(he);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void hists__process(struct hists *old, struct hists *new)
|
||||||
|
{
|
||||||
|
hists__match(old, new);
|
||||||
|
|
||||||
|
if (show_baseline_only)
|
||||||
|
hists__baseline_only(new);
|
||||||
|
|
||||||
|
hists__fprintf(new, true, 0, 0, stdout);
|
||||||
|
}
|
||||||
|
|
||||||
static int __cmd_diff(void)
|
static int __cmd_diff(void)
|
||||||
{
|
{
|
||||||
int ret, i;
|
int ret, i;
|
||||||
@ -213,8 +239,7 @@ static int __cmd_diff(void)
|
|||||||
|
|
||||||
first = false;
|
first = false;
|
||||||
|
|
||||||
hists__match(&evsel_old->hists, &evsel->hists);
|
hists__process(&evsel_old->hists, &evsel->hists);
|
||||||
hists__fprintf(&evsel->hists, true, 0, 0, stdout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
out_delete:
|
out_delete:
|
||||||
@ -235,6 +260,8 @@ static const struct option options[] = {
|
|||||||
"be more verbose (show symbol address, etc)"),
|
"be more verbose (show symbol address, etc)"),
|
||||||
OPT_BOOLEAN('M', "displacement", &show_displacement,
|
OPT_BOOLEAN('M', "displacement", &show_displacement,
|
||||||
"Show position displacement relative to baseline"),
|
"Show position displacement relative to baseline"),
|
||||||
|
OPT_BOOLEAN('b', "baseline-only", &show_baseline_only,
|
||||||
|
"Show only items with match in baseline"),
|
||||||
OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
|
OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
|
||||||
"dump raw trace in ASCII"),
|
"dump raw trace in ASCII"),
|
||||||
OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
|
OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
|
||||||
|
Loading…
Reference in New Issue
Block a user