root/tools/perf/util/evswitch.c

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

DEFINITIONS

This source file includes following definitions.
  1. evswitch__discard
  2. evswitch__fprintf_enoent
  3. evswitch__init

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 // Copyright (C) 2019, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>
   3 
   4 #include "evswitch.h"
   5 #include "evlist.h"
   6 
   7 bool evswitch__discard(struct evswitch *evswitch, struct evsel *evsel)
   8 {
   9         if (evswitch->on && evswitch->discarding) {
  10                 if (evswitch->on != evsel)
  11                         return true;
  12 
  13                 evswitch->discarding = false;
  14 
  15                 if (!evswitch->show_on_off_events)
  16                         return true;
  17 
  18                 return false;
  19         }
  20 
  21         if (evswitch->off && !evswitch->discarding) {
  22                 if (evswitch->off != evsel)
  23                         return false;
  24 
  25                 evswitch->discarding = true;
  26 
  27                 if (!evswitch->show_on_off_events)
  28                         return true;
  29         }
  30 
  31         return false;
  32 }
  33 
  34 static int evswitch__fprintf_enoent(FILE *fp, const char *evtype, const char *evname)
  35 {
  36         int printed = fprintf(fp, "ERROR: switch-%s event not found (%s)\n", evtype, evname);
  37 
  38         return printed += fprintf(fp, "HINT:  use 'perf evlist' to see the available event names\n");
  39 }
  40 
  41 int evswitch__init(struct evswitch *evswitch, struct evlist *evlist, FILE *fp)
  42 {
  43         if (evswitch->on_name) {
  44                 evswitch->on = perf_evlist__find_evsel_by_str(evlist, evswitch->on_name);
  45                 if (evswitch->on == NULL) {
  46                         evswitch__fprintf_enoent(fp, "on", evswitch->on_name);
  47                         return -ENOENT;
  48                 }
  49                 evswitch->discarding = true;
  50         }
  51 
  52         if (evswitch->off_name) {
  53                 evswitch->off = perf_evlist__find_evsel_by_str(evlist, evswitch->off_name);
  54                 if (evswitch->off == NULL) {
  55                         evswitch__fprintf_enoent(fp, "off", evswitch->off_name);
  56                         return -ENOENT;
  57                 }
  58         }
  59 
  60         return 0;
  61 }

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