lkml.org 
[lkml]   [2019]   [Jul]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 103/107] libperf: Add perf_evsel tests
    Date
    From: Jiri Olsa <jolsa@kernel.org>

    Add 2 simple perf_evsel tests to test counters reading interface through
    the struct evsel object.

    Committer testing:

    # make -C tools/perf/lib tests
    make: Entering directory '/home/acme/git/perf/tools/perf/lib'
    LINK test-cpumap-a
    LINK test-threadmap-a
    LINK test-evlist-a
    LINK test-evsel-a
    LINK test-cpumap-so
    LINK test-threadmap-so
    LINK test-evlist-so
    LINK test-evsel-so
    running static:
    - running test-cpumap.c...OK
    - running test-threadmap.c...OK
    - running test-evlist.c...OK
    - running test-evsel.c...OK
    running dynamic:
    - running test-cpumap.c...OK
    - running test-threadmap.c...OK
    - running test-evlist.c...OK
    - running test-evsel.c...OK
    make: Leaving directory '/home/acme/git/perf/tools/perf/lib'
    #

    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Michael Petlan <mpetlan@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/20190721112506.12306-77-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/lib/tests/Makefile | 2 +-
    tools/perf/lib/tests/test-evsel.c | 82 +++++++++++++++++++++++++++++++
    2 files changed, 83 insertions(+), 1 deletion(-)
    create mode 100644 tools/perf/lib/tests/test-evsel.c

    diff --git a/tools/perf/lib/tests/Makefile b/tools/perf/lib/tests/Makefile
    index e66ed090f08e..1ee4e9ba848b 100644
    --- a/tools/perf/lib/tests/Makefile
    +++ b/tools/perf/lib/tests/Makefile
    @@ -1,6 +1,6 @@
    # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)

    -TESTS = test-cpumap test-threadmap test-evlist
    +TESTS = test-cpumap test-threadmap test-evlist test-evsel

    TESTS_SO := $(addsuffix -so,$(TESTS))
    TESTS_A := $(addsuffix -a,$(TESTS))
    diff --git a/tools/perf/lib/tests/test-evsel.c b/tools/perf/lib/tests/test-evsel.c
    new file mode 100644
    index 000000000000..268712292f60
    --- /dev/null
    +++ b/tools/perf/lib/tests/test-evsel.c
    @@ -0,0 +1,82 @@
    +// SPDX-License-Identifier: GPL-2.0
    +#include <linux/perf_event.h>
    +#include <perf/cpumap.h>
    +#include <perf/threadmap.h>
    +#include <perf/evsel.h>
    +#include <internal/tests.h>
    +
    +static int test_stat_cpu(void)
    +{
    + struct perf_cpu_map *cpus;
    + struct perf_evsel *evsel;
    + struct perf_event_attr attr = {
    + .type = PERF_TYPE_SOFTWARE,
    + .config = PERF_COUNT_SW_CPU_CLOCK,
    + };
    + int err, cpu, tmp;
    +
    + cpus = perf_cpu_map__new(NULL);
    + __T("failed to create cpus", cpus);
    +
    + evsel = perf_evsel__new(&attr);
    + __T("failed to create evsel", evsel);
    +
    + err = perf_evsel__open(evsel, cpus, NULL);
    + __T("failed to open evsel", err == 0);
    +
    + perf_cpu_map__for_each_cpu(cpu, tmp, cpus) {
    + struct perf_counts_values counts = { .val = 0 };
    +
    + perf_evsel__read(evsel, cpu, 0, &counts);
    + __T("failed to read value for evsel", counts.val != 0);
    + }
    +
    + perf_evsel__close(evsel);
    + perf_evsel__delete(evsel);
    +
    + perf_cpu_map__put(cpus);
    + return 0;
    +}
    +
    +static int test_stat_thread(void)
    +{
    + struct perf_counts_values counts = { .val = 0 };
    + struct perf_thread_map *threads;
    + struct perf_evsel *evsel;
    + struct perf_event_attr attr = {
    + .type = PERF_TYPE_SOFTWARE,
    + .config = PERF_COUNT_SW_TASK_CLOCK,
    + };
    + int err;
    +
    + threads = perf_thread_map__new_dummy();
    + __T("failed to create threads", threads);
    +
    + perf_thread_map__set_pid(threads, 0, 0);
    +
    + evsel = perf_evsel__new(&attr);
    + __T("failed to create evsel", evsel);
    +
    + err = perf_evsel__open(evsel, NULL, threads);
    + __T("failed to open evsel", err == 0);
    +
    + perf_evsel__read(evsel, 0, 0, &counts);
    + __T("failed to read value for evsel", counts.val != 0);
    +
    + perf_evsel__close(evsel);
    + perf_evsel__delete(evsel);
    +
    + perf_thread_map__put(threads);
    + return 0;
    +}
    +
    +int main(int argc, char **argv)
    +{
    + __T_START;
    +
    + test_stat_cpu();
    + test_stat_thread();
    +
    + __T_OK;
    + return 0;
    +}
    --
    2.21.0
    \
     
     \ /
      Last update: 2019-07-30 05:09    [W:5.108 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site