xref: /openbmc/linux/tools/perf/tests/stat.c (revision 8e381596b67af53564a69f16440d3e5d5a73d034)
167424342SJiri Olsa #include <linux/compiler.h>
267424342SJiri Olsa #include "event.h"
367424342SJiri Olsa #include "tests.h"
467424342SJiri Olsa #include "stat.h"
567424342SJiri Olsa #include "debug.h"
667424342SJiri Olsa 
767424342SJiri Olsa static bool has_term(struct stat_config_event *config,
867424342SJiri Olsa 		     u64 tag, u64 val)
967424342SJiri Olsa {
1067424342SJiri Olsa 	unsigned i;
1167424342SJiri Olsa 
1267424342SJiri Olsa 	for (i = 0; i < config->nr; i++) {
1367424342SJiri Olsa 		if ((config->data[i].tag == tag) &&
1467424342SJiri Olsa 		    (config->data[i].val == val))
1567424342SJiri Olsa 			return true;
1667424342SJiri Olsa 	}
1767424342SJiri Olsa 
1867424342SJiri Olsa 	return false;
1967424342SJiri Olsa }
2067424342SJiri Olsa 
2167424342SJiri Olsa static int process_event(struct perf_tool *tool __maybe_unused,
2267424342SJiri Olsa 			 union perf_event *event,
2367424342SJiri Olsa 			 struct perf_sample *sample __maybe_unused,
2467424342SJiri Olsa 			 struct machine *machine __maybe_unused)
2567424342SJiri Olsa {
2667424342SJiri Olsa 	struct stat_config_event *config = &event->stat_config;
27*8e381596SJiri Olsa 	struct perf_stat_config stat_config;
2867424342SJiri Olsa 
2967424342SJiri Olsa #define HAS(term, val) \
3067424342SJiri Olsa 	has_term(config, PERF_STAT_CONFIG_TERM__##term, val)
3167424342SJiri Olsa 
3267424342SJiri Olsa 	TEST_ASSERT_VAL("wrong nr",        config->nr == PERF_STAT_CONFIG_TERM__MAX);
3367424342SJiri Olsa 	TEST_ASSERT_VAL("wrong aggr_mode", HAS(AGGR_MODE, AGGR_CORE));
3467424342SJiri Olsa 	TEST_ASSERT_VAL("wrong scale",     HAS(SCALE, 1));
3567424342SJiri Olsa 	TEST_ASSERT_VAL("wrong interval",  HAS(INTERVAL, 1));
3667424342SJiri Olsa 
3767424342SJiri Olsa #undef HAS
3867424342SJiri Olsa 
39*8e381596SJiri Olsa 	perf_event__read_stat_config(&stat_config, config);
40*8e381596SJiri Olsa 
41*8e381596SJiri Olsa 	TEST_ASSERT_VAL("wrong aggr_mode", stat_config.aggr_mode == AGGR_CORE);
42*8e381596SJiri Olsa 	TEST_ASSERT_VAL("wrong scale",     stat_config.scale == 1);
43*8e381596SJiri Olsa 	TEST_ASSERT_VAL("wrong interval",  stat_config.interval == 1);
4467424342SJiri Olsa 	return 0;
4567424342SJiri Olsa }
4667424342SJiri Olsa 
4767424342SJiri Olsa int test__synthesize_stat_config(int subtest __maybe_unused)
4867424342SJiri Olsa {
4967424342SJiri Olsa 	struct perf_stat_config stat_config = {
5067424342SJiri Olsa 		.aggr_mode	= AGGR_CORE,
5167424342SJiri Olsa 		.scale		= 1,
5267424342SJiri Olsa 		.interval	= 1,
5367424342SJiri Olsa 	};
5467424342SJiri Olsa 
5567424342SJiri Olsa 	TEST_ASSERT_VAL("failed to synthesize stat_config",
5667424342SJiri Olsa 		!perf_event__synthesize_stat_config(NULL, &stat_config, process_event, NULL));
5767424342SJiri Olsa 
5867424342SJiri Olsa 	return 0;
5967424342SJiri Olsa }
60