Fix hists related 'perf test' entries
Arnaldo Carvalho de Melo
maintainerPATCH 1/1 Fix hists related 'perf test' entries
That got broken by d3a72fd8187b ("perf report: Fix indentation of dynamic entries in hierarchy"), by using the evlist in setup_sorting() without checking if it is NULL, as done in some 'perf test' entries:
$ find tools/ -name "*.c" | xargs grep 'setup_sorting(NULL);' tools/perf/tests/hists_output.c: setup_sorting(NULL); tools/perf/tests/hists_output.c: setup_sorting(NULL); tools/perf/tests/hists_output.c: setup_sorting(NULL); tools/perf/tests/hists_output.c: setup_sorting(NULL); tools/perf/tests/hists_output.c: setup_sorting(NULL); tools/perf/tests/hists_cumulate.c: setup_sorting(NULL); tools/perf/tests/hists_cumulate.c: setup_sorting(NULL); tools/perf/tests/hists_cumulate.c: setup_sorting(NULL); tools/perf/tests/hists_cumulate.c: setup_sorting(NULL); $
Fix it.
Before:
[root@jouet ~]# perf test
<SNIP>
15: Test matching and linking multiple hists : FAILED! 16: Try 'import perf' in python, checking link problems : Ok 17: Test breakpoint overflow signal handler : Ok 18: Test breakpoint overflow sampling : Ok 19: Test number of exit event of a simple workload : Ok 20: Test software clock events have valid period values : Ok 21: Test object code reading : Ok 22: Test sample parsing : Ok 23: Test using a dummy software event to keep tracking : Ok 24: Test parsing with no sample_id_all bit set : Ok 25: Test filtering hist entries : FAILED! 26: Test mmap thread lookup : Ok 27: Test thread mg sharing : Ok 28: Test output sorting of hist entries : FAILED! 29: Test cumulation of child hist entries : FAILED!
<SNIP>
After the patch the above failed tests complete successfully.
---
tools/perf/util/sort.c +22 -15
@@ -2635,25 +2635,14 @@ out:return ret; } -int setup_sorting (struct perf_evlist *evlist) +static void evlist__set_hists_nr_sort_keys (struct perf_evlist *evlist) { -int err; -struct hists *hists;struct perf_evsel *evsel; -struct perf_hpp_fmt *fmt; - - err =__setup_sorting (evlist); -if (err <0 ) -return err; - -if (parent_pattern != default_parent_pattern) { - err =sort_dimension__add ("parent" , evlist); -if (err <0 ) -return err; - }evlist__for_each (evlist, evsel) { - hists =evsel__hists (evsel); +struct perf_hpp_fmt *fmt; +struct hists *hists =evsel__hists (evsel); + hists->nr_sort_keys = perf_hpp_list.nr_sort_keys;/*
@@ -2667,6 +2656,24 @@ int setup_sorting(struct perf_evlist *evlist) hists->nr_sort_keys--; } } +} + +int setup_sorting (struct perf_evlist *evlist) +{ +int err; + + err =__setup_sorting (evlist); +if (err <0 ) +return err; + +if (parent_pattern != default_parent_pattern) { + err =sort_dimension__add ("parent" , evlist); +if (err <0 ) +return err; + } + +if (evlist !=NULL ) +evlist__set_hists_nr_sort_keys (evlist);reset_dimensions ();
Hi Arnaldo,
Quoted 37 lines · Arnaldo Carvalho de Melo
That got broken by
d3a72fd8187b("perf report: Fix indentation of dynamic entries in hierarchy"), by using the evlist insetup_sorting()without checking if it is NULL, as done in some 'perf test' entries:$ find tools/ -name "*.c" | xargs grep 'setup_sorting(NULL);' tools/perf/tests/hists_output.c: setup_sorting(NULL); tools/perf/tests/hists_output.c: setup_sorting(NULL); tools/perf/tests/hists_output.c: setup_sorting(NULL); tools/perf/tests/hists_output.c: setup_sorting(NULL); tools/perf/tests/hists_output.c: setup_sorting(NULL); tools/perf/tests/hists_cumulate.c: setup_sorting(NULL); tools/perf/tests/hists_cumulate.c: setup_sorting(NULL); tools/perf/tests/hists_cumulate.c: setup_sorting(NULL); tools/perf/tests/hists_cumulate.c: setup_sorting(NULL); $Fix it.
Before:
[root@jouet ~]# perf test
<SNIP>15: Test matching and linking multiple hists : FAILED! 16: Try 'import perf' in python, checking link problems : Ok 17: Test breakpoint overflow signal handler : Ok 18: Test breakpoint overflow sampling : Ok 19: Test number of exit event of a simple workload : Ok 20: Test software clock events have valid period values : Ok 21: Test object code reading : Ok 22: Test sample parsing : Ok 23: Test using a dummy software event to keep tracking : Ok 24: Test parsing with no sample_id_all bit set : Ok 25: Test filtering hist entries : FAILED! 26: Test mmap thread lookup : Ok 27: Test thread mg sharing : Ok 28: Test output sorting of hist entries : FAILED! 29: Test cumulation of child hist entries : FAILED!
Quoted 3 lines
<SNIP>
After the patch the above failed tests complete successfully.
Ooops, sorry about that. I'll run 'perf test' more often before sending patches.
Thanks,
Namhyung
Quoted 62 lines
---
tools/perf/util/sort.c +22
-15@@ -2635,25 +2635,14 @@ out:return ret; } -int setup_sorting (struct perf_evlist *evlist) +static void evlist__set_hists_nr_sort_keys (struct perf_evlist *evlist) { -int err; -struct hists *hists;struct perf_evsel *evsel; -struct perf_hpp_fmt *fmt; - - err =__setup_sorting (evlist); -if (err <0 ) -return err; - -if (parent_pattern != default_parent_pattern) { - err =sort_dimension__add ("parent" , evlist); -if (err <0 ) -return err; - }evlist__for_each (evlist, evsel) { - hists =evsel__hists (evsel); +struct perf_hpp_fmt *fmt; +struct hists *hists =evsel__hists (evsel); + hists->nr_sort_keys = perf_hpp_list.nr_sort_keys;/* @@ -2667,6 +2656,24 @@ int setup_sorting(struct perf_evlist *evlist) hists->nr_sort_keys--; } } +} + +int setup_sorting (struct perf_evlist *evlist) +{ +int err; + + err =__setup_sorting (evlist); +if (err <0 ) +return err; + +if (parent_pattern != default_parent_pattern) { + err =sort_dimension__add ("parent" , evlist); +if (err <0 ) +return err; + } + +if (evlist !=NULL ) +evlist__set_hists_nr_sort_keys (evlist);reset_dimensions ();