Skip to content

Commit

Permalink
perf test: Add test for the sched tracepoint format fields
Browse files Browse the repository at this point in the history
So that we make sure the routines that do event format parsing are
working on at least two well know scheduler tracepoints.

Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@gmail.com>
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-g3rm9b3wtim4djx3z8dkftrj@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
acmel committed Sep 24, 2012
1 parent efd2b92 commit 6a6cd11
Showing 1 changed file with 86 additions and 0 deletions.
86 changes: 86 additions & 0 deletions tools/perf/builtin-test.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "util/symbol.h"
#include "util/thread_map.h"
#include "util/pmu.h"
#include "event-parse.h"
#include "../../include/linux/hw_breakpoint.h"

#include <sys/mman.h>
Expand Down Expand Up @@ -1207,6 +1208,87 @@ static int perf_evsel__roundtrip_name_test(void)
return ret;
}

static int perf_evsel__test_field(struct perf_evsel *evsel, const char *name,
int size, bool should_be_signed)
{
struct format_field *field = perf_evsel__field(evsel, name);
int is_signed;
int ret = 0;

if (field == NULL) {
pr_debug("%s: \"%s\" field not found!\n", evsel->name, name);
return -1;
}

is_signed = !!(field->flags | FIELD_IS_SIGNED);
if (should_be_signed && !is_signed) {
pr_debug("%s: \"%s\" signedness(%d) is wrong, should be %d\n",
evsel->name, name, is_signed, should_be_signed);
ret = -1;
}

if (field->size != size) {
pr_debug("%s: \"%s\" size (%d) should be %d!\n",
evsel->name, name, field->size, size);
ret = -1;
}

return 0;
}

static int perf_evsel__tp_sched_test(void)
{
struct perf_evsel *evsel = perf_evsel__newtp("sched", "sched_switch", 0);
int ret = 0;

if (evsel == NULL) {
pr_debug("perf_evsel__new\n");
return -1;
}

if (perf_evsel__test_field(evsel, "prev_comm", 16, true))
ret = -1;

if (perf_evsel__test_field(evsel, "prev_pid", 4, true))
ret = -1;

if (perf_evsel__test_field(evsel, "prev_prio", 4, true))
ret = -1;

if (perf_evsel__test_field(evsel, "prev_state", 8, true))
ret = -1;

if (perf_evsel__test_field(evsel, "next_comm", 16, true))
ret = -1;

if (perf_evsel__test_field(evsel, "next_pid", 4, true))
ret = -1;

if (perf_evsel__test_field(evsel, "next_prio", 4, true))
ret = -1;

perf_evsel__delete(evsel);

evsel = perf_evsel__newtp("sched", "sched_wakeup", 0);

if (perf_evsel__test_field(evsel, "comm", 16, true))
ret = -1;

if (perf_evsel__test_field(evsel, "pid", 4, true))
ret = -1;

if (perf_evsel__test_field(evsel, "prio", 4, true))
ret = -1;

if (perf_evsel__test_field(evsel, "success", 4, true))
ret = -1;

if (perf_evsel__test_field(evsel, "target_cpu", 4, true))
ret = -1;

return 0;
}

static struct test {
const char *desc;
int (*func)(void);
Expand Down Expand Up @@ -1253,6 +1335,10 @@ static struct test {
.desc = "roundtrip evsel->name check",
.func = perf_evsel__roundtrip_name_test,
},
{
.desc = "Check parsing of sched tracepoints fields",
.func = perf_evsel__tp_sched_test,
},
{
.func = NULL,
},
Expand Down

0 comments on commit 6a6cd11

Please sign in to comment.