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 Original line Diff line number Diff line
@@ -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) {
			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;
		goto out_delete;
		}
	}


	err = __cmd_script(&script);
	err = __cmd_script(&script);


+23 −0
Original line number Original line Diff line number Diff line
@@ -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 −0
Original line number Original line Diff line number Diff line
@@ -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)								  \