lkml.org 
[lkml]   [2015]   [Oct]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 15/52] perf tools: Add stat event synthesize function
    Date
    Introduce perf_event__synthesize_stat function to
    synthesize 'struct stat_event'.

    Link: http://lkml.kernel.org/n/tip-0jr9x4vwk0nxbs2ueclj7jfy@git.kernel.org
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    ---
    tools/perf/tests/builtin-test.c | 4 ++++
    tools/perf/tests/stat.c | 41 ++++++++++++++++++++++++++++++++++++-----
    tools/perf/tests/tests.h | 1 +
    tools/perf/util/event.c | 22 ++++++++++++++++++++++
    tools/perf/util/event.h | 7 ++++++-
    5 files changed, 69 insertions(+), 6 deletions(-)

    diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
    index 1a9064f54da5..87d6244f15f9 100644
    --- a/tools/perf/tests/builtin-test.c
    +++ b/tools/perf/tests/builtin-test.c
    @@ -178,6 +178,10 @@ static struct test generic_tests[] = {
    .func = test__synthesize_stat_config,
    },
    {
    + .desc = "Test stat synthesize",
    + .func = test__synthesize_stat,
    + },
    + {
    .func = NULL,
    },
    };
    diff --git a/tools/perf/tests/stat.c b/tools/perf/tests/stat.c
    index 2049c5a3e4a2..805ff30bb1d5 100644
    --- a/tools/perf/tests/stat.c
    +++ b/tools/perf/tests/stat.c
    @@ -2,6 +2,7 @@
    #include "event.h"
    #include "tests.h"
    #include "stat.h"
    +#include "counts.h"
    #include "debug.h"

    static bool has_term(struct stat_config_event *config,
    @@ -18,10 +19,10 @@ static bool has_term(struct stat_config_event *config,
    return false;
    }

    -static int process_event(struct perf_tool *tool __maybe_unused,
    - union perf_event *event,
    - struct perf_sample *sample __maybe_unused,
    - struct machine *machine __maybe_unused)
    +static int process_stat_config_event(struct perf_tool *tool __maybe_unused,
    + union perf_event *event,
    + struct perf_sample *sample __maybe_unused,
    + struct machine *machine __maybe_unused)
    {
    struct stat_config_event *config = &event->stat_config;
    struct perf_stat_config stat_config;
    @@ -53,7 +54,37 @@ int test__synthesize_stat_config(void)
    };

    TEST_ASSERT_VAL("failed to synthesize stat_config",
    - !perf_event__synthesize_stat_config(NULL, &stat_config, process_event, NULL));
    + !perf_event__synthesize_stat_config(NULL, &stat_config, process_stat_config_event, NULL));
    +
    + return 0;
    +}
    +
    +static int process_stat_event(struct perf_tool *tool __maybe_unused,
    + union perf_event *event,
    + struct perf_sample *sample __maybe_unused,
    + struct machine *machine __maybe_unused)
    +{
    + struct stat_event *stat = &event->stat;
    +
    + TEST_ASSERT_VAL("wrong cpu", stat->cpu == 1);
    + TEST_ASSERT_VAL("wrong thread", stat->thread == 2);
    + TEST_ASSERT_VAL("wrong id", stat->id == 3);
    + TEST_ASSERT_VAL("wrong val", stat->val == 100);
    + TEST_ASSERT_VAL("wrong run", stat->ena == 200);
    + TEST_ASSERT_VAL("wrong ena", stat->run == 300);
    + return 0;
    +}
    +
    +int test__synthesize_stat(void)
    +{
    + struct perf_counts_values count;
    +
    + count.val = 100;
    + count.ena = 200;
    + count.run = 300;
    +
    + TEST_ASSERT_VAL("failed to synthesize stat_config",
    + !perf_event__synthesize_stat(NULL, 1, 2, 3, &count, process_stat_event, NULL));

    return 0;
    }
    diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
    index 227ad216197e..edf460e5cd64 100644
    --- a/tools/perf/tests/tests.h
    +++ b/tools/perf/tests/tests.h
    @@ -70,6 +70,7 @@ int test_session_topology(void);
    int test__thread_map_synthesize(void);
    int test__cpu_map_synthesize(void);
    int test__synthesize_stat_config(void);
    +int test__synthesize_stat(void);

    #if defined(__arm__) || defined(__aarch64__)
    #ifdef HAVE_DWARF_UNWIND_SUPPORT
    diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
    index dfff3db6077f..ebbfdc1c1d3b 100644
    --- a/tools/perf/util/event.c
    +++ b/tools/perf/util/event.c
    @@ -910,6 +910,28 @@ int perf_event__synthesize_stat_config(struct perf_tool *tool,
    return err;
    }

    +int perf_event__synthesize_stat(struct perf_tool *tool,
    + u32 cpu, u32 thread, u64 id,
    + struct perf_counts_values *count,
    + perf_event__handler_t process,
    + struct machine *machine)
    +{
    + struct stat_event event;
    +
    + event.header.type = PERF_RECORD_STAT;
    + event.header.size = sizeof(event);
    + event.header.misc = 0;
    +
    + event.id = id;
    + event.cpu = cpu;
    + event.thread = thread;
    + event.val = count->val;
    + event.ena = count->ena;
    + event.run = count->run;
    +
    + return process(tool, (union perf_event *) &event, NULL, machine);
    +}
    +
    void perf_event__read_stat_config(struct perf_stat_config *config,
    struct stat_config_event *event)
    {
    diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h
    index 91a05c8328d7..1799b06e3fac 100644
    --- a/tools/perf/util/event.h
    +++ b/tools/perf/util/event.h
    @@ -466,6 +466,7 @@ struct perf_tool;
    struct thread_map;
    struct cpu_map;
    struct perf_stat_config;
    +struct perf_counts_values;

    typedef int (*perf_event__handler_t)(struct perf_tool *tool,
    union perf_event *event,
    @@ -498,7 +499,11 @@ int perf_event__synthesize_stat_config(struct perf_tool *tool,
    struct machine *machine);
    void perf_event__read_stat_config(struct perf_stat_config *config,
    struct stat_config_event *event);
    -
    +int perf_event__synthesize_stat(struct perf_tool *tool,
    + u32 cpu, u32 thread, u64 id,
    + struct perf_counts_values *count,
    + perf_event__handler_t process,
    + struct machine *machine);
    int perf_event__synthesize_modules(struct perf_tool *tool,
    perf_event__handler_t process,
    struct machine *machine);
    --
    2.4.3


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