mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 14:42:24 +00:00
perf evlist: Introduce id_hdr_size method out of perf_session
We will need this when not using perf_session in cases like 'perf top' and strace where no perf.data file is created nor consumed. Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-za923wjc41q5xot5vrhuhj3j@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
d04b35f808
commit
81e36bffad
@ -625,6 +625,38 @@ u64 perf_evlist__sample_type(const struct perf_evlist *evlist)
|
|||||||
return first->attr.sample_type;
|
return first->attr.sample_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u16 perf_evlist__id_hdr_size(const struct perf_evlist *evlist)
|
||||||
|
{
|
||||||
|
struct perf_evsel *first;
|
||||||
|
struct perf_sample *data;
|
||||||
|
u64 sample_type;
|
||||||
|
u16 size = 0;
|
||||||
|
|
||||||
|
first = list_entry(evlist->entries.next, struct perf_evsel, node);
|
||||||
|
|
||||||
|
if (!first->attr.sample_id_all)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
sample_type = first->attr.sample_type;
|
||||||
|
|
||||||
|
if (sample_type & PERF_SAMPLE_TID)
|
||||||
|
size += sizeof(data->tid) * 2;
|
||||||
|
|
||||||
|
if (sample_type & PERF_SAMPLE_TIME)
|
||||||
|
size += sizeof(data->time);
|
||||||
|
|
||||||
|
if (sample_type & PERF_SAMPLE_ID)
|
||||||
|
size += sizeof(data->id);
|
||||||
|
|
||||||
|
if (sample_type & PERF_SAMPLE_STREAM_ID)
|
||||||
|
size += sizeof(data->stream_id);
|
||||||
|
|
||||||
|
if (sample_type & PERF_SAMPLE_CPU)
|
||||||
|
size += sizeof(data->cpu) * 2;
|
||||||
|
out:
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
bool perf_evlist__valid_sample_id_all(const struct perf_evlist *evlist)
|
bool perf_evlist__valid_sample_id_all(const struct perf_evlist *evlist)
|
||||||
{
|
{
|
||||||
struct perf_evsel *pos, *first;
|
struct perf_evsel *pos, *first;
|
||||||
|
@ -104,6 +104,7 @@ int perf_evlist__set_filters(struct perf_evlist *evlist);
|
|||||||
|
|
||||||
u64 perf_evlist__sample_type(const struct perf_evlist *evlist);
|
u64 perf_evlist__sample_type(const struct perf_evlist *evlist);
|
||||||
bool perf_evlist__sample_id_all(const const struct perf_evlist *evlist);
|
bool perf_evlist__sample_id_all(const const struct perf_evlist *evlist);
|
||||||
|
u16 perf_evlist__id_hdr_size(const struct perf_evlist *evlist);
|
||||||
|
|
||||||
bool perf_evlist__valid_sample_type(const struct perf_evlist *evlist);
|
bool perf_evlist__valid_sample_type(const struct perf_evlist *evlist);
|
||||||
bool perf_evlist__valid_sample_id_all(const struct perf_evlist *evlist);
|
bool perf_evlist__valid_sample_id_all(const struct perf_evlist *evlist);
|
||||||
|
@ -78,39 +78,12 @@ out_close:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void perf_session__id_header_size(struct perf_session *session)
|
|
||||||
{
|
|
||||||
struct perf_sample *data;
|
|
||||||
u64 sample_type = session->sample_type;
|
|
||||||
u16 size = 0;
|
|
||||||
|
|
||||||
if (!session->sample_id_all)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
if (sample_type & PERF_SAMPLE_TID)
|
|
||||||
size += sizeof(data->tid) * 2;
|
|
||||||
|
|
||||||
if (sample_type & PERF_SAMPLE_TIME)
|
|
||||||
size += sizeof(data->time);
|
|
||||||
|
|
||||||
if (sample_type & PERF_SAMPLE_ID)
|
|
||||||
size += sizeof(data->id);
|
|
||||||
|
|
||||||
if (sample_type & PERF_SAMPLE_STREAM_ID)
|
|
||||||
size += sizeof(data->stream_id);
|
|
||||||
|
|
||||||
if (sample_type & PERF_SAMPLE_CPU)
|
|
||||||
size += sizeof(data->cpu) * 2;
|
|
||||||
out:
|
|
||||||
session->id_hdr_size = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void perf_session__update_sample_type(struct perf_session *self)
|
void perf_session__update_sample_type(struct perf_session *self)
|
||||||
{
|
{
|
||||||
self->sample_type = perf_evlist__sample_type(self->evlist);
|
self->sample_type = perf_evlist__sample_type(self->evlist);
|
||||||
self->sample_size = __perf_evsel__sample_size(self->sample_type);
|
self->sample_size = __perf_evsel__sample_size(self->sample_type);
|
||||||
self->sample_id_all = perf_evlist__sample_id_all(self->evlist);
|
self->sample_id_all = perf_evlist__sample_id_all(self->evlist);
|
||||||
perf_session__id_header_size(self);
|
self->id_hdr_size = perf_evlist__id_hdr_size(self->evlist);
|
||||||
}
|
}
|
||||||
|
|
||||||
int perf_session__create_kernel_maps(struct perf_session *self)
|
int perf_session__create_kernel_maps(struct perf_session *self)
|
||||||
|
Loading…
Reference in New Issue
Block a user