Commit 124e02be authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent add3a719
Loading
Loading
Loading
Loading
+3 −18
Original line number Diff line number Diff line
@@ -3868,24 +3868,9 @@ int cmd_script(int argc, const char **argv)
						  script.range_num);
	}

	if (script.evswitch.on_name) {
		script.evswitch.on = perf_evlist__find_evsel_by_str(session->evlist, script.evswitch.on_name);
		if (script.evswitch.on == NULL) {
			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;
	err = evswitch__init(&script.evswitch, session->evlist, stderr);
	if (err)
		goto out_delete;
		}
	}

	err = __cmd_script(&script);

+23 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
// Copyright (C) 2019, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>

#include "evswitch.h"
#include "evlist.h"

bool evswitch__discard(struct evswitch *evswitch, struct evsel *evsel)
{
@@ -29,3 +30,25 @@ bool evswitch__discard(struct evswitch *evswitch, struct evsel *evsel)

	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 −0
Original line number Diff line number Diff line
@@ -4,8 +4,10 @@
#define __PERF_EVSWITCH_H 1

#include <stdbool.h>
#include <stdio.h>

struct evsel;
struct evlist;

struct evswitch {
	struct evsel *on, *off;
@@ -14,6 +16,8 @@ struct evswitch {
	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);

#define OPTS_EVSWITCH(evswitch)								  \