1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright (C) 2019, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>
7 bool evswitch__discard(struct evswitch
*evswitch
, struct evsel
*evsel
)
9 if (evswitch
->on
&& evswitch
->discarding
) {
10 if (evswitch
->on
!= evsel
)
13 evswitch
->discarding
= false;
15 if (!evswitch
->show_on_off_events
)
21 if (evswitch
->off
&& !evswitch
->discarding
) {
22 if (evswitch
->off
!= evsel
)
25 evswitch
->discarding
= true;
27 if (!evswitch
->show_on_off_events
)
34 static int evswitch__fprintf_enoent(FILE *fp
, const char *evtype
, const char *evname
)
36 int printed
= fprintf(fp
, "ERROR: switch-%s event not found (%s)\n", evtype
, evname
);
38 return printed
+= fprintf(fp
, "HINT: use 'perf evlist' to see the available event names\n");
41 int evswitch__init(struct evswitch
*evswitch
, struct evlist
*evlist
, FILE *fp
)
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
);
49 evswitch
->discarding
= true;
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
);