Skip to content

Commit

Permalink
perf tests: Add event parsing test for '*:*' tracepoints
Browse files Browse the repository at this point in the history
Adding event parsing test for '*:*' tracepoints. Checking the count
matches all the tracepoints available plus current standard tracepoint
perf_event_attr check.

This test exposes warnings from traceevent lib about not being able to
parse some tracepoints' format data. Exposing these messages in the
automated test suite will probably speed up the fix ;-)

Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1355749718-4355-4-git-send-email-jolsa@redhat.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Jiri Olsa authored and Arnaldo Carvalho de Melo committed Jan 24, 2013
1 parent f35488f commit 82ce75d
Showing 1 changed file with 62 additions and 0 deletions.
62 changes: 62 additions & 0 deletions tools/perf/tests/parse-events.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "evsel.h"
#include "evlist.h"
#include "sysfs.h"
#include "debugfs.h"
#include "tests.h"
#include <linux/hw_breakpoint.h>

Expand Down Expand Up @@ -782,6 +783,63 @@ static int test__group5(struct perf_evlist *evlist __maybe_unused)
return 0;
}

static int count_tracepoints(void)
{
char events_path[PATH_MAX];
struct dirent *events_ent;
DIR *events_dir;
int cnt = 0;

scnprintf(events_path, PATH_MAX, "%s/tracing/events",
debugfs_find_mountpoint());

events_dir = opendir(events_path);

TEST_ASSERT_VAL("Can't open events dir", events_dir);

while ((events_ent = readdir(events_dir))) {
char sys_path[PATH_MAX];
struct dirent *sys_ent;
DIR *sys_dir;

if (!strcmp(events_ent->d_name, ".")
|| !strcmp(events_ent->d_name, "..")
|| !strcmp(events_ent->d_name, "enable")
|| !strcmp(events_ent->d_name, "header_event")
|| !strcmp(events_ent->d_name, "header_page"))
continue;

scnprintf(sys_path, PATH_MAX, "%s/%s",
events_path, events_ent->d_name);

sys_dir = opendir(sys_path);
TEST_ASSERT_VAL("Can't open sys dir", sys_dir);

while ((sys_ent = readdir(sys_dir))) {
if (!strcmp(sys_ent->d_name, ".")
|| !strcmp(sys_ent->d_name, "..")
|| !strcmp(sys_ent->d_name, "enable")
|| !strcmp(sys_ent->d_name, "filter"))
continue;

cnt++;
}

closedir(sys_dir);
}

closedir(events_dir);
return cnt;
}

static int test__all_tracepoints(struct perf_evlist *evlist)
{
TEST_ASSERT_VAL("wrong events count",
count_tracepoints() == evlist->nr_entries);

return test__checkevent_tracepoint_multi(evlist);
}

struct test__event_st {
const char *name;
__u32 type;
Expand Down Expand Up @@ -921,6 +979,10 @@ static struct test__event_st test__events[] = {
.name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
.check = test__group5,
},
[33] = {
.name = "*:*",
.check = test__all_tracepoints,
},
};

static struct test__event_st test__events_pmu[] = {
Expand Down

0 comments on commit 82ce75d

Please sign in to comment.