xref: /openbmc/linux/tools/perf/tests/stat.c (revision 6742434261158ad9678bf15b165304e0200cc324)
1*67424342SJiri Olsa #include <linux/compiler.h>
2*67424342SJiri Olsa #include "event.h"
3*67424342SJiri Olsa #include "tests.h"
4*67424342SJiri Olsa #include "stat.h"
5*67424342SJiri Olsa #include "debug.h"
6*67424342SJiri Olsa 
7*67424342SJiri Olsa static bool has_term(struct stat_config_event *config,
8*67424342SJiri Olsa 		     u64 tag, u64 val)
9*67424342SJiri Olsa {
10*67424342SJiri Olsa 	unsigned i;
11*67424342SJiri Olsa 
12*67424342SJiri Olsa 	for (i = 0; i < config->nr; i++) {
13*67424342SJiri Olsa 		if ((config->data[i].tag == tag) &&
14*67424342SJiri Olsa 		    (config->data[i].val == val))
15*67424342SJiri Olsa 			return true;
16*67424342SJiri Olsa 	}
17*67424342SJiri Olsa 
18*67424342SJiri Olsa 	return false;
19*67424342SJiri Olsa }
20*67424342SJiri Olsa 
21*67424342SJiri Olsa static int process_event(struct perf_tool *tool __maybe_unused,
22*67424342SJiri Olsa 			 union perf_event *event,
23*67424342SJiri Olsa 			 struct perf_sample *sample __maybe_unused,
24*67424342SJiri Olsa 			 struct machine *machine __maybe_unused)
25*67424342SJiri Olsa {
26*67424342SJiri Olsa 	struct stat_config_event *config = &event->stat_config;
27*67424342SJiri Olsa 
28*67424342SJiri Olsa #define HAS(term, val) \
29*67424342SJiri Olsa 	has_term(config, PERF_STAT_CONFIG_TERM__##term, val)
30*67424342SJiri Olsa 
31*67424342SJiri Olsa 	TEST_ASSERT_VAL("wrong nr",        config->nr == PERF_STAT_CONFIG_TERM__MAX);
32*67424342SJiri Olsa 	TEST_ASSERT_VAL("wrong aggr_mode", HAS(AGGR_MODE, AGGR_CORE));
33*67424342SJiri Olsa 	TEST_ASSERT_VAL("wrong scale",     HAS(SCALE, 1));
34*67424342SJiri Olsa 	TEST_ASSERT_VAL("wrong interval",  HAS(INTERVAL, 1));
35*67424342SJiri Olsa 
36*67424342SJiri Olsa #undef HAS
37*67424342SJiri Olsa 
38*67424342SJiri Olsa 	return 0;
39*67424342SJiri Olsa }
40*67424342SJiri Olsa 
41*67424342SJiri Olsa int test__synthesize_stat_config(int subtest __maybe_unused)
42*67424342SJiri Olsa {
43*67424342SJiri Olsa 	struct perf_stat_config stat_config = {
44*67424342SJiri Olsa 		.aggr_mode	= AGGR_CORE,
45*67424342SJiri Olsa 		.scale		= 1,
46*67424342SJiri Olsa 		.interval	= 1,
47*67424342SJiri Olsa 	};
48*67424342SJiri Olsa 
49*67424342SJiri Olsa 	TEST_ASSERT_VAL("failed to synthesize stat_config",
50*67424342SJiri Olsa 		!perf_event__synthesize_stat_config(NULL, &stat_config, process_event, NULL));
51*67424342SJiri Olsa 
52*67424342SJiri Olsa 	return 0;
53*67424342SJiri Olsa }
54