mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
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:
parent
29f9fcdd3f
commit
c9d3662870
2 changed files with 6 additions and 4 deletions
|
@ -621,9 +621,11 @@ __hists__add_entry(struct hists *hists,
|
||||||
.raw_data = sample->raw_data,
|
.raw_data = sample->raw_data,
|
||||||
.raw_size = sample->raw_size,
|
.raw_size = sample->raw_size,
|
||||||
.ops = ops,
|
.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,
|
struct hist_entry *hists__add_entry(struct hists *hists,
|
||||||
|
|
|
@ -85,6 +85,7 @@ struct hists {
|
||||||
struct events_stats stats;
|
struct events_stats stats;
|
||||||
u64 event_stream;
|
u64 event_stream;
|
||||||
u16 col_len[HISTC_NR_COLS];
|
u16 col_len[HISTC_NR_COLS];
|
||||||
|
bool has_callchains;
|
||||||
int socket_filter;
|
int socket_filter;
|
||||||
struct perf_hpp_list *hpp_list;
|
struct perf_hpp_list *hpp_list;
|
||||||
struct list_head hpp_formats;
|
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)
|
static __pure inline bool hists__has_callchains(struct hists *hists)
|
||||||
{
|
{
|
||||||
const struct perf_evsel *evsel = hists_to_evsel(hists);
|
return hists->has_callchains;
|
||||||
return evsel__has_callchain(evsel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int hists__init(void);
|
int hists__init(void);
|
||||||
|
|
Loading…
Reference in a new issue