lkml.org 
[lkml]   [2015]   [Oct]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 13/57] perf tools: Add stat event
    Date
    Adding stat event to store 'struct perf_counter_values' for
    given event/cpu/thread.

    Link: http://lkml.kernel.org/n/tip-56xpt7m6au4d8u39nffoqgx1@git.kernel.org
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    ---
    tools/perf/util/event.c | 1 +
    tools/perf/util/event.h | 19 +++++++++++++++++++
    tools/perf/util/session.c | 25 +++++++++++++++++++++++++
    tools/perf/util/tool.h | 3 ++-
    4 files changed, 47 insertions(+), 1 deletion(-)

    diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
    index 33b662acea55..74aec1e1f775 100644
    --- a/tools/perf/util/event.c
    +++ b/tools/perf/util/event.c
    @@ -42,6 +42,7 @@ static const char *perf_event__names[] = {
    [PERF_RECORD_THREAD_MAP] = "THREAD_MAP",
    [PERF_RECORD_CPU_MAP] = "CPU_MAP",
    [PERF_RECORD_STAT_CONFIG] = "STAT_CONFIG",
    + [PERF_RECORD_STAT] = "STAT",
    };

    const char *perf_event__name(unsigned int id)
    diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h
    index 308fad327eff..30f7dc963137 100644
    --- a/tools/perf/util/event.h
    +++ b/tools/perf/util/event.h
    @@ -229,6 +229,7 @@ enum perf_user_event_type { /* above any possible kernel type */
    PERF_RECORD_THREAD_MAP = 73,
    PERF_RECORD_CPU_MAP = 74,
    PERF_RECORD_STAT_CONFIG = 75,
    + PERF_RECORD_STAT = 76,
    PERF_RECORD_HEADER_MAX
    };

    @@ -414,6 +415,23 @@ struct stat_config_event {
    struct stat_config_term_event data[];
    };

    +struct stat_event {
    + struct perf_event_header header;
    +
    + u64 id;
    + u32 cpu;
    + u32 thread;
    +
    + union {
    + struct {
    + u64 val;
    + u64 ena;
    + u64 run;
    + };
    + u64 values[3];
    + };
    +};
    +
    union perf_event {
    struct perf_event_header header;
    struct mmap_event mmap;
    @@ -439,6 +457,7 @@ union perf_event {
    struct thread_map_event thread_map;
    struct cpu_map_event cpu_map;
    struct stat_config_event stat_config;
    + struct stat_event stat;
    };

    void perf_event__print_totals(void);
    diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
    index 481e41d2d013..3460cdbf6596 100644
    --- a/tools/perf/util/session.c
    +++ b/tools/perf/util/session.c
    @@ -324,6 +324,15 @@ int process_event_stat_config_stub(struct perf_tool *tool __maybe_unused,
    return 0;
    }

    +static int process_stat_stub(struct perf_tool *tool __maybe_unused,
    + union perf_event *event __maybe_unused,
    + struct perf_session *perf_session
    + __maybe_unused)
    +{
    + dump_printf(": unhandled!\n");
    + return 0;
    +}
    +
    void perf_tool__fill_defaults(struct perf_tool *tool)
    {
    if (tool->sample == NULL)
    @@ -380,6 +389,8 @@ void perf_tool__fill_defaults(struct perf_tool *tool)
    tool->cpu_map = process_event_cpu_map_stub;
    if (tool->stat_config == NULL)
    tool->stat_config = process_event_stat_config_stub;
    + if (tool->stat == NULL)
    + tool->stat = process_stat_stub;
    }

    static void swap_sample_id_all(union perf_event *event, void *data)
    @@ -707,6 +718,17 @@ static void perf_event__stat_config_swap(union perf_event *event,
    mem_bswap_64(&event->stat_config.nr, size);
    }

    +static void perf_event__stat_swap(union perf_event *event,
    + bool sample_id_all __maybe_unused)
    +{
    + event->stat.id = bswap_64(event->stat.id);
    + event->stat.thread = bswap_32(event->stat.thread);
    + event->stat.cpu = bswap_32(event->stat.cpu);
    + event->stat.val = bswap_64(event->stat.val);
    + event->stat.ena = bswap_64(event->stat.ena);
    + event->stat.run = bswap_64(event->stat.run);
    +}
    +
    typedef void (*perf_event__swap_op)(union perf_event *event,
    bool sample_id_all);

    @@ -737,6 +759,7 @@ static perf_event__swap_op perf_event__swap_ops[] = {
    [PERF_RECORD_THREAD_MAP] = perf_event__thread_map_swap,
    [PERF_RECORD_CPU_MAP] = perf_event__cpu_map_swap,
    [PERF_RECORD_STAT_CONFIG] = perf_event__stat_config_swap,
    + [PERF_RECORD_STAT] = perf_event__stat_swap,
    [PERF_RECORD_HEADER_MAX] = NULL,
    };

    @@ -1279,6 +1302,8 @@ static s64 perf_session__process_user_event(struct perf_session *session,
    return tool->cpu_map(tool, event, session);
    case PERF_RECORD_STAT_CONFIG:
    return tool->stat_config(tool, event, session);
    + case PERF_RECORD_STAT:
    + return tool->stat(tool, event, session);
    default:
    return -EINVAL;
    }
    diff --git a/tools/perf/util/tool.h b/tools/perf/util/tool.h
    index aa7ae73d76b4..f0b9da0c166a 100644
    --- a/tools/perf/util/tool.h
    +++ b/tools/perf/util/tool.h
    @@ -58,7 +58,8 @@ struct perf_tool {
    auxtrace_error,
    thread_map,
    cpu_map,
    - stat_config;
    + stat_config,
    + stat;
    event_op3 auxtrace;
    bool ordered_events;
    bool ordering_requires_timestamps;
    --
    2.4.3


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