root/tools/perf/tests/stat.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. has_term
  2. process_stat_config_event
  3. test__synthesize_stat_config
  4. process_stat_event
  5. test__synthesize_stat
  6. process_stat_round_event
  7. test__synthesize_stat_round

   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 #include "util/synthetic-events.h"
   9 
  10 static bool has_term(struct perf_record_stat_config *config,
  11                      u64 tag, u64 val)
  12 {
  13         unsigned i;
  14 
  15         for (i = 0; i < config->nr; i++) {
  16                 if ((config->data[i].tag == tag) &&
  17                     (config->data[i].val == val))
  18                         return true;
  19         }
  20 
  21         return false;
  22 }
  23 
  24 static int process_stat_config_event(struct perf_tool *tool __maybe_unused,
  25                                      union perf_event *event,
  26                                      struct perf_sample *sample __maybe_unused,
  27                                      struct machine *machine __maybe_unused)
  28 {
  29         struct perf_record_stat_config *config = &event->stat_config;
  30         struct perf_stat_config stat_config;
  31 
  32 #define HAS(term, val) \
  33         has_term(config, PERF_STAT_CONFIG_TERM__##term, val)
  34 
  35         TEST_ASSERT_VAL("wrong nr",        config->nr == PERF_STAT_CONFIG_TERM__MAX);
  36         TEST_ASSERT_VAL("wrong aggr_mode", HAS(AGGR_MODE, AGGR_CORE));
  37         TEST_ASSERT_VAL("wrong scale",     HAS(SCALE, 1));
  38         TEST_ASSERT_VAL("wrong interval",  HAS(INTERVAL, 1));
  39 
  40 #undef HAS
  41 
  42         perf_event__read_stat_config(&stat_config, config);
  43 
  44         TEST_ASSERT_VAL("wrong aggr_mode", stat_config.aggr_mode == AGGR_CORE);
  45         TEST_ASSERT_VAL("wrong scale",     stat_config.scale == 1);
  46         TEST_ASSERT_VAL("wrong interval",  stat_config.interval == 1);
  47         return 0;
  48 }
  49 
  50 int test__synthesize_stat_config(struct test *test __maybe_unused, int subtest __maybe_unused)
  51 {
  52         struct perf_stat_config stat_config = {
  53                 .aggr_mode      = AGGR_CORE,
  54                 .scale          = 1,
  55                 .interval       = 1,
  56         };
  57 
  58         TEST_ASSERT_VAL("failed to synthesize stat_config",
  59                 !perf_event__synthesize_stat_config(NULL, &stat_config, process_stat_config_event, NULL));
  60 
  61         return 0;
  62 }
  63 
  64 static int process_stat_event(struct perf_tool *tool __maybe_unused,
  65                               union perf_event *event,
  66                               struct perf_sample *sample __maybe_unused,
  67                               struct machine *machine __maybe_unused)
  68 {
  69         struct perf_record_stat *st = &event->stat;
  70 
  71         TEST_ASSERT_VAL("wrong cpu",    st->cpu    == 1);
  72         TEST_ASSERT_VAL("wrong thread", st->thread == 2);
  73         TEST_ASSERT_VAL("wrong id",     st->id     == 3);
  74         TEST_ASSERT_VAL("wrong val",    st->val    == 100);
  75         TEST_ASSERT_VAL("wrong run",    st->ena    == 200);
  76         TEST_ASSERT_VAL("wrong ena",    st->run    == 300);
  77         return 0;
  78 }
  79 
  80 int test__synthesize_stat(struct test *test __maybe_unused, int subtest __maybe_unused)
  81 {
  82         struct perf_counts_values count;
  83 
  84         count.val = 100;
  85         count.ena = 200;
  86         count.run = 300;
  87 
  88         TEST_ASSERT_VAL("failed to synthesize stat_config",
  89                 !perf_event__synthesize_stat(NULL, 1, 2, 3, &count, process_stat_event, NULL));
  90 
  91         return 0;
  92 }
  93 
  94 static int process_stat_round_event(struct perf_tool *tool __maybe_unused,
  95                                     union perf_event *event,
  96                                     struct perf_sample *sample __maybe_unused,
  97                                     struct machine *machine __maybe_unused)
  98 {
  99         struct perf_record_stat_round *stat_round = &event->stat_round;
 100 
 101         TEST_ASSERT_VAL("wrong time", stat_round->time == 0xdeadbeef);
 102         TEST_ASSERT_VAL("wrong type", stat_round->type == PERF_STAT_ROUND_TYPE__INTERVAL);
 103         return 0;
 104 }
 105 
 106 int test__synthesize_stat_round(struct test *test __maybe_unused, int subtest __maybe_unused)
 107 {
 108         TEST_ASSERT_VAL("failed to synthesize stat_config",
 109                 !perf_event__synthesize_stat_round(NULL, 0xdeadbeef, PERF_STAT_ROUND_TYPE__INTERVAL,
 110                                                    process_stat_round_event, NULL));
 111 
 112         return 0;
 113 }

/* [<][>][^][v][top][bottom][index][help] */