lkml.org 
[lkml]   [2015]   [Nov]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 05/25] perf stat record: Store events IDs in perf data file
    Date
    Store event IDs in evlist object so it get stored
    into perf.data file.

    Also making perf_evlist__id_add_fd global.

    Tested-by: Kan Liang <kan.liang@intel.com>
    Link: http://lkml.kernel.org/n/tip-v2xwpeots3tz08e44lej5y9e@git.kernel.org
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    ---
    tools/perf/builtin-stat.c | 35 +++++++++++++++++++++++++++++++++++
    tools/perf/util/evlist.c | 6 +++---
    tools/perf/util/evlist.h | 3 +++
    3 files changed, 41 insertions(+), 3 deletions(-)

    diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
    index 8c24e88afd3c..2a15e491138b 100644
    --- a/tools/perf/builtin-stat.c
    +++ b/tools/perf/builtin-stat.c
    @@ -325,6 +325,38 @@ static int perf_stat_synthesize_config(void)
    return 0;
    }

    +#define FD(e, x, y) (*(int *)xyarray__entry(e->fd, x, y))
    +
    +static int __store_counter_ids(struct perf_evsel *counter,
    + struct cpu_map *cpus,
    + struct thread_map *threads)
    +{
    + int cpu, thread;
    +
    + for (cpu = 0; cpu < cpus->nr; cpu++) {
    + for (thread = 0; thread < threads->nr; thread++) {
    + int fd = FD(counter, cpu, thread);
    +
    + if (perf_evlist__id_add_fd(evsel_list, counter,
    + cpu, thread, fd) < 0)
    + return -1;
    + }
    + }
    +
    + return 0;
    +}
    +
    +static int store_counter_ids(struct perf_evsel *counter)
    +{
    + struct cpu_map *cpus = counter->cpus;
    + struct thread_map *threads = counter->threads;
    +
    + if (perf_evsel__alloc_id(counter, cpus->nr, threads->nr))
    + return -ENOMEM;
    +
    + return __store_counter_ids(counter, cpus, threads);
    +}
    +
    static int __run_perf_stat(int argc, const char **argv)
    {
    int interval = stat_config.interval;
    @@ -389,6 +421,9 @@ static int __run_perf_stat(int argc, const char **argv)
    l = strlen(counter->unit);
    if (l > unit_width)
    unit_width = l;
    +
    + if (STAT_RECORD && store_counter_ids(counter))
    + return -1;
    }

    if (perf_evlist__apply_filters(evsel_list, &counter)) {
    diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
    index d1392194a9a9..8069a6a588df 100644
    --- a/tools/perf/util/evlist.c
    +++ b/tools/perf/util/evlist.c
    @@ -550,9 +550,9 @@ void perf_evlist__id_add(struct perf_evlist *evlist, struct perf_evsel *evsel,
    evsel->id[evsel->ids++] = id;
    }

    -static int perf_evlist__id_add_fd(struct perf_evlist *evlist,
    - struct perf_evsel *evsel,
    - int cpu, int thread, int fd)
    +int perf_evlist__id_add_fd(struct perf_evlist *evlist,
    + struct perf_evsel *evsel,
    + int cpu, int thread, int fd)
    {
    u64 read_data[4] = { 0, };
    int id_idx = 1; /* The first entry is the counter value */
    diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
    index a459fe71b452..139a50038097 100644
    --- a/tools/perf/util/evlist.h
    +++ b/tools/perf/util/evlist.h
    @@ -97,6 +97,9 @@ perf_evlist__find_tracepoint_by_name(struct perf_evlist *evlist,

    void perf_evlist__id_add(struct perf_evlist *evlist, struct perf_evsel *evsel,
    int cpu, int thread, u64 id);
    +int perf_evlist__id_add_fd(struct perf_evlist *evlist,
    + struct perf_evsel *evsel,
    + int cpu, int thread, int fd);

    int perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd);
    int perf_evlist__alloc_pollfd(struct perf_evlist *evlist);
    --
    2.4.3


    \
     
     \ /
      Last update: 2015-11-05 16:01    [W:7.640 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site