diff options
Diffstat (limited to 'tools/perf/builtin-trace.c')
| -rw-r--r-- | tools/perf/builtin-trace.c | 49 | 
1 files changed, 9 insertions, 40 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 5f45166c892d..206bf72b77fc 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -74,8 +74,6 @@ struct trace {  		size_t		nr;  		int		*entries;  	}			ev_qualifier_ids; -	struct intlist		*tid_list; -	struct intlist		*pid_list;  	struct {  		size_t		nr;  		pid_t		*entries; @@ -1890,18 +1888,6 @@ out_put:  	return err;  } -static bool skip_sample(struct trace *trace, struct perf_sample *sample) -{ -	if ((trace->pid_list && intlist__find(trace->pid_list, sample->pid)) || -	    (trace->tid_list && intlist__find(trace->tid_list, sample->tid))) -		return false; - -	if (trace->pid_list || trace->tid_list) -		return true; - -	return false; -} -  static void trace__set_base_time(struct trace *trace,  				 struct perf_evsel *evsel,  				 struct perf_sample *sample) @@ -1926,11 +1912,13 @@ static int trace__process_sample(struct perf_tool *tool,  				 struct machine *machine __maybe_unused)  {  	struct trace *trace = container_of(tool, struct trace, tool); +	struct thread *thread;  	int err = 0;  	tracepoint_handler handler = evsel->handler; -	if (skip_sample(trace, sample)) +	thread = machine__findnew_thread(trace->host, sample->pid, sample->tid); +	if (thread && thread__is_filtered(thread))  		return 0;  	trace__set_base_time(trace, evsel, sample); @@ -1943,27 +1931,6 @@ static int trace__process_sample(struct perf_tool *tool,  	return err;  } -static int parse_target_str(struct trace *trace) -{ -	if (trace->opts.target.pid) { -		trace->pid_list = intlist__new(trace->opts.target.pid); -		if (trace->pid_list == NULL) { -			pr_err("Error parsing process id string\n"); -			return -EINVAL; -		} -	} - -	if (trace->opts.target.tid) { -		trace->tid_list = intlist__new(trace->opts.target.tid); -		if (trace->tid_list == NULL) { -			pr_err("Error parsing thread id string\n"); -			return -EINVAL; -		} -	} - -	return 0; -} -  static int trace__record(struct trace *trace, int argc, const char **argv)  {  	unsigned int rec_argc, i, j; @@ -2460,6 +2427,12 @@ static int trace__replay(struct trace *trace)  	if (session == NULL)  		return -1; +	if (trace->opts.target.pid) +		symbol_conf.pid_list_str = strdup(trace->opts.target.pid); + +	if (trace->opts.target.tid) +		symbol_conf.tid_list_str = strdup(trace->opts.target.tid); +  	if (symbol__init(&session->header.env) < 0)  		goto out; @@ -2503,10 +2476,6 @@ static int trace__replay(struct trace *trace)  			evsel->handler = trace__pgfault;  	} -	err = parse_target_str(trace); -	if (err != 0) -		goto out; -  	setup_pager();  	err = perf_session__process_events(session);  | 
