perf hists: Reimplement hists__has_callchains()
There are places where we have only access to struct hists and need to know if any of its hist_entries has callchains, like when drawing headers for the various output modes (stdio, TUI, etc), so, when adding a new hist_entry, check if it has callchains, storing this info for later use by hists__has_callchains(). This reimplementation is necessary because not always a 'struct hists' is allocated together with a 'struct perf evsel', so we can't go from 'hists' to 'perf_event_attr.sample_type & PERF_SAMPLE_CALLCHAIN'. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Jin Yao <yao.jin@linux.intel.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Wang Nan <wangnan0@huawei.com> Link: https://lkml.kernel.org/n/tip-hg5g7yddjio3ljwyqnnaj5dt@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
29f9fcdd3f
Коммит
c9d3662870
|
@ -621,9 +621,11 @@ __hists__add_entry(struct hists *hists,
|
|||
.raw_data = sample->raw_data,
|
||||
.raw_size = sample->raw_size,
|
||||
.ops = ops,
|
||||
};
|
||||
}, *he = hists__findnew_entry(hists, &entry, al, sample_self);
|
||||
|
||||
return hists__findnew_entry(hists, &entry, al, sample_self);
|
||||
if (!hists->has_callchains && he && he->callchain_size != 0)
|
||||
hists->has_callchains = true;
|
||||
return he;
|
||||
}
|
||||
|
||||
struct hist_entry *hists__add_entry(struct hists *hists,
|
||||
|
|
|
@ -85,6 +85,7 @@ struct hists {
|
|||
struct events_stats stats;
|
||||
u64 event_stream;
|
||||
u16 col_len[HISTC_NR_COLS];
|
||||
bool has_callchains;
|
||||
int socket_filter;
|
||||
struct perf_hpp_list *hpp_list;
|
||||
struct list_head hpp_formats;
|
||||
|
@ -222,8 +223,7 @@ static inline struct hists *evsel__hists(struct perf_evsel *evsel)
|
|||
|
||||
static __pure inline bool hists__has_callchains(struct hists *hists)
|
||||
{
|
||||
const struct perf_evsel *evsel = hists_to_evsel(hists);
|
||||
return evsel__has_callchain(evsel);
|
||||
return hists->has_callchains;
|
||||
}
|
||||
|
||||
int hists__init(void);
|
||||
|
|
Загрузка…
Ссылка в новой задаче