mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
perf evswitch: Introduce init() method to set the on/off evsels from the command line
Another step in having all the boilerplate in just one place to then use in the other tools. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Florian Weimer <fweimer@redhat.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: William Cohen <wcohen@redhat.com> Link: https://lkml.kernel.org/n/tip-snreb1wmwyjei3eefwotxp1l@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
@@ -3868,24 +3868,9 @@ int cmd_script(int argc, const char **argv)
|
|||||||
script.range_num);
|
script.range_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (script.evswitch.on_name) {
|
err = evswitch__init(&script.evswitch, session->evlist, stderr);
|
||||||
script.evswitch.on = perf_evlist__find_evsel_by_str(session->evlist, script.evswitch.on_name);
|
if (err)
|
||||||
if (script.evswitch.on == NULL) {
|
goto out_delete;
|
||||||
fprintf(stderr, "switch-on event not found (%s)\n", script.evswitch.on_name);
|
|
||||||
err = -ENOENT;
|
|
||||||
goto out_delete;
|
|
||||||
}
|
|
||||||
script.evswitch.discarding = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (script.evswitch.off_name) {
|
|
||||||
script.evswitch.off = perf_evlist__find_evsel_by_str(session->evlist, script.evswitch.off_name);
|
|
||||||
if (script.evswitch.off == NULL) {
|
|
||||||
fprintf(stderr, "switch-off event not found (%s)\n", script.evswitch.off_name);
|
|
||||||
err = -ENOENT;
|
|
||||||
goto out_delete;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
err = __cmd_script(&script);
|
err = __cmd_script(&script);
|
||||||
|
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Copyright (C) 2019, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>
|
// Copyright (C) 2019, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||||
|
|
||||||
#include "evswitch.h"
|
#include "evswitch.h"
|
||||||
|
#include "evlist.h"
|
||||||
|
|
||||||
bool evswitch__discard(struct evswitch *evswitch, struct evsel *evsel)
|
bool evswitch__discard(struct evswitch *evswitch, struct evsel *evsel)
|
||||||
{
|
{
|
||||||
@@ -29,3 +30,25 @@ bool evswitch__discard(struct evswitch *evswitch, struct evsel *evsel)
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int evswitch__init(struct evswitch *evswitch, struct evlist *evlist, FILE *fp)
|
||||||
|
{
|
||||||
|
if (evswitch->on_name) {
|
||||||
|
evswitch->on = perf_evlist__find_evsel_by_str(evlist, evswitch->on_name);
|
||||||
|
if (evswitch->on == NULL) {
|
||||||
|
fprintf(fp, "switch-on event not found (%s)\n", evswitch->on_name);
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
evswitch->discarding = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (evswitch->off_name) {
|
||||||
|
evswitch->off = perf_evlist__find_evsel_by_str(evlist, evswitch->off_name);
|
||||||
|
if (evswitch->off == NULL) {
|
||||||
|
fprintf(fp, "switch-off event not found (%s)\n", evswitch->off_name);
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -4,8 +4,10 @@
|
|||||||
#define __PERF_EVSWITCH_H 1
|
#define __PERF_EVSWITCH_H 1
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
struct evsel;
|
struct evsel;
|
||||||
|
struct evlist;
|
||||||
|
|
||||||
struct evswitch {
|
struct evswitch {
|
||||||
struct evsel *on, *off;
|
struct evsel *on, *off;
|
||||||
@@ -14,6 +16,8 @@ struct evswitch {
|
|||||||
bool show_on_off_events;
|
bool show_on_off_events;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int evswitch__init(struct evswitch *evswitch, struct evlist *evlist, FILE *fp);
|
||||||
|
|
||||||
bool evswitch__discard(struct evswitch *evswitch, struct evsel *evsel);
|
bool evswitch__discard(struct evswitch *evswitch, struct evsel *evsel);
|
||||||
|
|
||||||
#define OPTS_EVSWITCH(evswitch) \
|
#define OPTS_EVSWITCH(evswitch) \
|
||||||
|
Reference in New Issue
Block a user