Commit | Line | Data |
---|---|---|
67424342 JO |
1 | #include <linux/compiler.h> |
2 | #include "event.h" | |
3 | #include "tests.h" | |
4 | #include "stat.h" | |
5796f8f0 | 5 | #include "counts.h" |
67424342 JO |
6 | #include "debug.h" |
7 | ||
8 | static bool has_term(struct stat_config_event *config, | |
9 | u64 tag, u64 val) | |
10 | { | |
11 | unsigned i; | |
12 | ||
13 | for (i = 0; i < config->nr; i++) { | |
14 | if ((config->data[i].tag == tag) && | |
15 | (config->data[i].val == val)) | |
16 | return true; | |
17 | } | |
18 | ||
19 | return false; | |
20 | } | |
21 | ||
5796f8f0 JO |
22 | static int process_stat_config_event(struct perf_tool *tool __maybe_unused, |
23 | union perf_event *event, | |
24 | struct perf_sample *sample __maybe_unused, | |
25 | struct machine *machine __maybe_unused) | |
67424342 JO |
26 | { |
27 | struct stat_config_event *config = &event->stat_config; | |
8e381596 | 28 | struct perf_stat_config stat_config; |
67424342 JO |
29 | |
30 | #define HAS(term, val) \ | |
31 | has_term(config, PERF_STAT_CONFIG_TERM__##term, val) | |
32 | ||
33 | TEST_ASSERT_VAL("wrong nr", config->nr == PERF_STAT_CONFIG_TERM__MAX); | |
34 | TEST_ASSERT_VAL("wrong aggr_mode", HAS(AGGR_MODE, AGGR_CORE)); | |
35 | TEST_ASSERT_VAL("wrong scale", HAS(SCALE, 1)); | |
36 | TEST_ASSERT_VAL("wrong interval", HAS(INTERVAL, 1)); | |
37 | ||
38 | #undef HAS | |
39 | ||
8e381596 JO |
40 | perf_event__read_stat_config(&stat_config, config); |
41 | ||
42 | TEST_ASSERT_VAL("wrong aggr_mode", stat_config.aggr_mode == AGGR_CORE); | |
43 | TEST_ASSERT_VAL("wrong scale", stat_config.scale == 1); | |
44 | TEST_ASSERT_VAL("wrong interval", stat_config.interval == 1); | |
67424342 JO |
45 | return 0; |
46 | } | |
47 | ||
48 | int test__synthesize_stat_config(int subtest __maybe_unused) | |
49 | { | |
50 | struct perf_stat_config stat_config = { | |
51 | .aggr_mode = AGGR_CORE, | |
52 | .scale = 1, | |
53 | .interval = 1, | |
54 | }; | |
55 | ||
56 | TEST_ASSERT_VAL("failed to synthesize stat_config", | |
5796f8f0 JO |
57 | !perf_event__synthesize_stat_config(NULL, &stat_config, process_stat_config_event, NULL)); |
58 | ||
59 | return 0; | |
60 | } | |
61 | ||
62 | static int process_stat_event(struct perf_tool *tool __maybe_unused, | |
63 | union perf_event *event, | |
64 | struct perf_sample *sample __maybe_unused, | |
65 | struct machine *machine __maybe_unused) | |
66 | { | |
67 | struct stat_event *st = &event->stat; | |
68 | ||
69 | TEST_ASSERT_VAL("wrong cpu", st->cpu == 1); | |
70 | TEST_ASSERT_VAL("wrong thread", st->thread == 2); | |
71 | TEST_ASSERT_VAL("wrong id", st->id == 3); | |
72 | TEST_ASSERT_VAL("wrong val", st->val == 100); | |
73 | TEST_ASSERT_VAL("wrong run", st->ena == 200); | |
74 | TEST_ASSERT_VAL("wrong ena", st->run == 300); | |
75 | return 0; | |
76 | } | |
77 | ||
78 | int test__synthesize_stat(int subtest __maybe_unused) | |
79 | { | |
80 | struct perf_counts_values count; | |
81 | ||
82 | count.val = 100; | |
83 | count.ena = 200; | |
84 | count.run = 300; | |
85 | ||
86 | TEST_ASSERT_VAL("failed to synthesize stat_config", | |
87 | !perf_event__synthesize_stat(NULL, 1, 2, 3, &count, process_stat_event, NULL)); | |
67424342 JO |
88 | |
89 | return 0; | |
90 | } |