diff options
Diffstat (limited to 'tools/perf')
| -rw-r--r-- | tools/perf/tests/parse-events.c | 178 | 
1 files changed, 177 insertions, 1 deletions
diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index 80a8daf54a6..c5636f36fe3 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c @@ -577,7 +577,7 @@ static int test__group2(struct perf_evlist *evlist)  	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);  	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);  	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); -	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); +	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);  	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);  	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);  	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); @@ -811,6 +811,166 @@ static int test__group5(struct perf_evlist *evlist __maybe_unused)  	return 0;  } +static int test__group_gh1(struct perf_evlist *evlist) +{ +	struct perf_evsel *evsel, *leader; + +	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); +	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); + +	/* cycles + :H group modifier */ +	evsel = leader = perf_evlist__first(evlist); +	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); +	TEST_ASSERT_VAL("wrong config", +			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); +	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); +	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); +	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); +	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); +	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); +	TEST_ASSERT_VAL("wrong group name", !evsel->group_name); +	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); +	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); +	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); + +	/* cache-misses:G + :H group modifier */ +	evsel = perf_evsel__next(evsel); +	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); +	TEST_ASSERT_VAL("wrong config", +			PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); +	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); +	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); +	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); +	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); +	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); +	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); +	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); + +	return 0; +} + +static int test__group_gh2(struct perf_evlist *evlist) +{ +	struct perf_evsel *evsel, *leader; + +	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); +	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); + +	/* cycles + :G group modifier */ +	evsel = leader = perf_evlist__first(evlist); +	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); +	TEST_ASSERT_VAL("wrong config", +			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); +	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); +	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); +	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); +	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); +	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); +	TEST_ASSERT_VAL("wrong group name", !evsel->group_name); +	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); +	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); +	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); + +	/* cache-misses:H + :G group modifier */ +	evsel = perf_evsel__next(evsel); +	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); +	TEST_ASSERT_VAL("wrong config", +			PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); +	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); +	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); +	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); +	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); +	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); +	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); +	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); + +	return 0; +} + +static int test__group_gh3(struct perf_evlist *evlist) +{ +	struct perf_evsel *evsel, *leader; + +	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); +	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); + +	/* cycles:G + :u group modifier */ +	evsel = leader = perf_evlist__first(evlist); +	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); +	TEST_ASSERT_VAL("wrong config", +			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); +	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); +	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); +	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); +	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); +	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); +	TEST_ASSERT_VAL("wrong group name", !evsel->group_name); +	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); +	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); +	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); + +	/* cache-misses:H + :u group modifier */ +	evsel = perf_evsel__next(evsel); +	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); +	TEST_ASSERT_VAL("wrong config", +			PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); +	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); +	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); +	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); +	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); +	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); +	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); +	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); + +	return 0; +} + +static int test__group_gh4(struct perf_evlist *evlist) +{ +	struct perf_evsel *evsel, *leader; + +	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); +	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); + +	/* cycles:G + :uG group modifier */ +	evsel = leader = perf_evlist__first(evlist); +	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); +	TEST_ASSERT_VAL("wrong config", +			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); +	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); +	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); +	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); +	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); +	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); +	TEST_ASSERT_VAL("wrong group name", !evsel->group_name); +	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); +	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); +	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); + +	/* cache-misses:H + :uG group modifier */ +	evsel = perf_evsel__next(evsel); +	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); +	TEST_ASSERT_VAL("wrong config", +			PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); +	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); +	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); +	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); +	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); +	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); +	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); +	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); + +	return 0; +} +  static int count_tracepoints(void)  {  	char events_path[PATH_MAX]; @@ -1011,6 +1171,22 @@ static struct evlist_test test__events[] = {  		.name  = "*:*",  		.check = test__all_tracepoints,  	}, +	[34] = { +		.name  = "{cycles,cache-misses:G}:H", +		.check = test__group_gh1, +	}, +	[35] = { +		.name  = "{cycles,cache-misses:H}:G", +		.check = test__group_gh2, +	}, +	[36] = { +		.name  = "{cycles:G,cache-misses:H}:u", +		.check = test__group_gh3, +	}, +	[37] = { +		.name  = "{cycles:G,cache-misses:H}:uG", +		.check = test__group_gh4, +	},  };  static struct evlist_test test__events_pmu[] = {  |