Linux Perf
stat.c
Go to the documentation of this file.
1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/compiler.h>
3 #include "event.h"
4 #include "tests.h"
5 #include "stat.h"
6 #include "counts.h"
7 #include "debug.h"
8 
9 static bool has_term(struct stat_config_event *config,
10  u64 tag, u64 val)
11 {
12  unsigned i;
13 
14  for (i = 0; i < config->nr; i++) {
15  if ((config->data[i].tag == tag) &&
16  (config->data[i].val == val))
17  return true;
18  }
19 
20  return false;
21 }
22 
23 static int process_stat_config_event(struct perf_tool *tool __maybe_unused,
24  union perf_event *event,
25  struct perf_sample *sample __maybe_unused,
26  struct machine *machine __maybe_unused)
27 {
28  struct stat_config_event *config = &event->stat_config;
29  struct perf_stat_config stat_config;
30 
31 #define HAS(term, val) \
32  has_term(config, PERF_STAT_CONFIG_TERM__##term, val)
33 
34  TEST_ASSERT_VAL("wrong nr", config->nr == PERF_STAT_CONFIG_TERM__MAX);
35  TEST_ASSERT_VAL("wrong aggr_mode", HAS(AGGR_MODE, AGGR_CORE));
36  TEST_ASSERT_VAL("wrong scale", HAS(SCALE, 1));
37  TEST_ASSERT_VAL("wrong interval", HAS(INTERVAL, 1));
38 
39 #undef HAS
40 
41  perf_event__read_stat_config(&stat_config, config);
42 
43  TEST_ASSERT_VAL("wrong aggr_mode", stat_config.aggr_mode == AGGR_CORE);
44  TEST_ASSERT_VAL("wrong scale", stat_config.scale == 1);
45  TEST_ASSERT_VAL("wrong interval", stat_config.interval == 1);
46  return 0;
47 }
48 
49 int test__synthesize_stat_config(struct test *test __maybe_unused, int subtest __maybe_unused)
50 {
51  struct perf_stat_config stat_config = {
53  .scale = 1,
54  .interval = 1,
55  };
56 
57  TEST_ASSERT_VAL("failed to synthesize stat_config",
59 
60  return 0;
61 }
62 
63 static int process_stat_event(struct perf_tool *tool __maybe_unused,
64  union perf_event *event,
65  struct perf_sample *sample __maybe_unused,
66  struct machine *machine __maybe_unused)
67 {
68  struct stat_event *st = &event->stat;
69 
70  TEST_ASSERT_VAL("wrong cpu", st->cpu == 1);
71  TEST_ASSERT_VAL("wrong thread", st->thread == 2);
72  TEST_ASSERT_VAL("wrong id", st->id == 3);
73  TEST_ASSERT_VAL("wrong val", st->val == 100);
74  TEST_ASSERT_VAL("wrong run", st->ena == 200);
75  TEST_ASSERT_VAL("wrong ena", st->run == 300);
76  return 0;
77 }
78 
79 int test__synthesize_stat(struct test *test __maybe_unused, int subtest __maybe_unused)
80 {
81  struct perf_counts_values count;
82 
83  count.val = 100;
84  count.ena = 200;
85  count.run = 300;
86 
87  TEST_ASSERT_VAL("failed to synthesize stat_config",
88  !perf_event__synthesize_stat(NULL, 1, 2, 3, &count, process_stat_event, NULL));
89 
90  return 0;
91 }
92 
93 static int process_stat_round_event(struct perf_tool *tool __maybe_unused,
94  union perf_event *event,
95  struct perf_sample *sample __maybe_unused,
96  struct machine *machine __maybe_unused)
97 {
98  struct stat_round_event *stat_round = &event->stat_round;
99 
100  TEST_ASSERT_VAL("wrong time", stat_round->time == 0xdeadbeef);
101  TEST_ASSERT_VAL("wrong type", stat_round->type == PERF_STAT_ROUND_TYPE__INTERVAL);
102  return 0;
103 }
104 
105 int test__synthesize_stat_round(struct test *test __maybe_unused, int subtest __maybe_unused)
106 {
107  TEST_ASSERT_VAL("failed to synthesize stat_config",
109  process_stat_round_event, NULL));
110 
111  return 0;
112 }
static bool has_term(struct stat_config_event *config, u64 tag, u64 val)
Definition: stat.c:9
enum aggr_mode aggr_mode
Definition: stat.h:88
static int process_stat_config_event(struct perf_tool *tool __maybe_unused, union perf_event *event, struct perf_sample *sample __maybe_unused, struct machine *machine __maybe_unused)
Definition: stat.c:23
#define TEST_ASSERT_VAL(text, cond)
Definition: tests.h:7
u32 thread
Definition: event.h:587
#define config
int test__synthesize_stat(struct test *test __maybe_unused, int subtest __maybe_unused)
Definition: stat.c:79
int test__synthesize_stat_config(struct test *test __maybe_unused, int subtest __maybe_unused)
Definition: stat.c:49
int perf_event__synthesize_stat_config(struct perf_tool *tool, struct perf_stat_config *config, perf_event__handler_t process, struct machine *machine)
Definition: event.c:1133
int perf_event__synthesize_stat(struct perf_tool *tool, u32 cpu, u32 thread, u64 id, struct perf_counts_values *count, perf_event__handler_t process, struct machine *machine)
Definition: event.c:1171
u64 val
Definition: event.h:591
Definition: tool.h:44
Definition: stat.h:41
struct stat_config_event_entry data[]
Definition: event.h:579
static int process_stat_round_event(struct perf_tool *tool __maybe_unused, union perf_event *event, struct perf_sample *sample __maybe_unused, struct machine *machine __maybe_unused)
Definition: stat.c:93
u64 run
Definition: event.h:593
static struct perf_tool tool
Definition: builtin-diff.c:362
bool scale
Definition: stat.h:89
#define event
static int process_stat_event(struct perf_tool *tool __maybe_unused, union perf_event *event, struct perf_sample *sample __maybe_unused, struct machine *machine __maybe_unused)
Definition: stat.c:63
u64 tag
Definition: event.h:572
int test__synthesize_stat_round(struct test *test __maybe_unused, int subtest __maybe_unused)
Definition: stat.c:105
u64 val
Definition: event.h:573
u64 id
Definition: event.h:585
Definition: tests.h:30
u32 cpu
Definition: event.h:586
int perf_event__synthesize_stat_round(struct perf_tool *tool, u64 evtime, u64 type, perf_event__handler_t process, struct machine *machine)
Definition: event.c:1193
unsigned int interval
Definition: stat.h:91
#define HAS(term, val)
void perf_event__read_stat_config(struct perf_stat_config *config, struct stat_config_event *event)
Definition: event.c:1210
u64 ena
Definition: event.h:592