@ -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 [ ] = {