linux/tools/perf/util/topdown.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2#include <stdio.h>
   3#include "pmu.h"
   4#include "topdown.h"
   5
   6int topdown_filter_events(const char **attr, char **str, bool use_group)
   7{
   8        int off = 0;
   9        int i;
  10        int len = 0;
  11        char *s;
  12
  13        for (i = 0; attr[i]; i++) {
  14                if (pmu_have_event("cpu", attr[i])) {
  15                        len += strlen(attr[i]) + 1;
  16                        attr[i - off] = attr[i];
  17                } else
  18                        off++;
  19        }
  20        attr[i - off] = NULL;
  21
  22        *str = malloc(len + 1 + 2);
  23        if (!*str)
  24                return -1;
  25        s = *str;
  26        if (i - off == 0) {
  27                *s = 0;
  28                return 0;
  29        }
  30        if (use_group)
  31                *s++ = '{';
  32        for (i = 0; attr[i]; i++) {
  33                strcpy(s, attr[i]);
  34                s += strlen(s);
  35                *s++ = ',';
  36        }
  37        if (use_group) {
  38                s[-1] = '}';
  39                *s = 0;
  40        } else
  41                s[-1] = 0;
  42        return 0;
  43}
  44
  45__weak bool arch_topdown_check_group(bool *warn)
  46{
  47        *warn = false;
  48        return false;
  49}
  50
  51__weak void arch_topdown_group_warn(void)
  52{
  53}
  54
  55__weak bool arch_topdown_sample_read(struct evsel *leader __maybe_unused)
  56{
  57        return false;
  58}
  59