diff options
Diffstat (limited to 'tools/perf/tests/builtin-test.c')
| -rw-r--r-- | tools/perf/tests/builtin-test.c | 65 | 
1 files changed, 55 insertions, 10 deletions
diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c index 3471ec52ea11..da5b6cc23f25 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -75,6 +75,13 @@ static struct test generic_tests[] = {  	{  		.desc = "PMU events",  		.func = test__pmu_events, +		.subtest = { +			.skip_if_fail	= false, +			.get_nr		= test__pmu_events_subtest_get_nr, +			.get_desc	= test__pmu_events_subtest_get_desc, +			.skip_reason	= test__pmu_events_subtest_skip_reason, +		}, +  	},  	{  		.desc = "DSO data read", @@ -310,6 +317,15 @@ static struct test generic_tests[] = {  		.func = test__jit_write_elf,  	},  	{ +		.desc = "Test libpfm4 support", +		.func = test__pfm, +		.subtest = { +			.skip_if_fail	= true, +			.get_nr		= test__pfm_subtest_get_nr, +			.get_desc	= test__pfm_subtest_get_desc, +		} +	}, +	{  		.desc = "Test api io",  		.func = test__api_io,  	}, @@ -318,6 +334,10 @@ static struct test generic_tests[] = {  		.func = test__maps__merge_in,  	},  	{ +		.desc = "Demangle Java", +		.func = test__demangle_java, +	}, +	{  		.func = NULL,  	},  }; @@ -327,7 +347,7 @@ static struct test *tests[] = {  	arch_tests,  }; -static bool perf_test__matches(struct test *test, int curr, int argc, const char *argv[]) +static bool perf_test__matches(const char *desc, int curr, int argc, const char *argv[])  {  	int i; @@ -344,7 +364,7 @@ static bool perf_test__matches(struct test *test, int curr, int argc, const char  			continue;  		} -		if (strcasestr(test->desc, argv[i])) +		if (strcasestr(desc, argv[i]))  			return true;  	} @@ -429,8 +449,15 @@ static int test_and_print(struct test *t, bool force_skip, int subtest)  	case TEST_OK:  		pr_info(" Ok\n");  		break; -	case TEST_SKIP: -		color_fprintf(stderr, PERF_COLOR_YELLOW, " Skip\n"); +	case TEST_SKIP: { +		const char *skip_reason = NULL; +		if (t->subtest.skip_reason) +			skip_reason = t->subtest.skip_reason(subtest); +		if (skip_reason) +			color_fprintf(stderr, PERF_COLOR_YELLOW, " Skip (%s)\n", skip_reason); +		else +			color_fprintf(stderr, PERF_COLOR_YELLOW, " Skip\n"); +	}  		break;  	case TEST_FAIL:  	default: @@ -566,7 +593,7 @@ static int run_shell_tests(int argc, const char *argv[], int i, int width)  			.priv = &st,  		}; -		if (!perf_test__matches(&test, curr, argc, argv)) +		if (!perf_test__matches(test.desc, curr, argc, argv))  			continue;  		st.file = ent->d_name; @@ -594,9 +621,25 @@ static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)  	for_each_test(j, t) {  		int curr = i++, err; +		int subi; -		if (!perf_test__matches(t, curr, argc, argv)) -			continue; +		if (!perf_test__matches(t->desc, curr, argc, argv)) { +			bool skip = true; +			int subn; + +			if (!t->subtest.get_nr) +				continue; + +			subn = t->subtest.get_nr(); + +			for (subi = 0; subi < subn; subi++) { +				if (perf_test__matches(t->subtest.get_desc(subi), curr, argc, argv)) +					skip = false; +			} + +			if (skip) +				continue; +		}  		if (t->is_supported && !t->is_supported()) {  			pr_debug("%2d: %-*s: Disabled\n", i, width, t->desc); @@ -624,7 +667,6 @@ static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)  			 */  			int subw = width > 2 ? width - 2 : width;  			bool skip = false; -			int subi;  			if (subn <= 0) {  				color_fprintf(stderr, PERF_COLOR_YELLOW, @@ -641,6 +683,9 @@ static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)  			}  			for (subi = 0; subi < subn; subi++) { +				if (!perf_test__matches(t->subtest.get_desc(subi), curr, argc, argv)) +					continue; +  				pr_info("%2d.%1d: %-*s:", i, subi + 1, subw,  					t->subtest.get_desc(subi));  				err = test_and_print(t, skip, subi); @@ -674,7 +719,7 @@ static int perf_test__list_shell(int argc, const char **argv, int i)  			.desc = shell_test__description(bf, sizeof(bf), path, ent->d_name),  		}; -		if (!perf_test__matches(&t, curr, argc, argv)) +		if (!perf_test__matches(t.desc, curr, argc, argv))  			continue;  		pr_info("%2d: %s\n", i, t.desc); @@ -693,7 +738,7 @@ static int perf_test__list(int argc, const char **argv)  	for_each_test(j, t) {  		int curr = i++; -		if (!perf_test__matches(t, curr, argc, argv) || +		if (!perf_test__matches(t->desc, curr, argc, argv) ||  		    (t->is_supported && !t->is_supported()))  			continue;  | 
