diff options
Diffstat (limited to 'tools/perf/util/session.c')
| -rw-r--r-- | tools/perf/util/session.c | 48 | 
1 files changed, 27 insertions, 21 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 8e4f0755d2aa..2437fb0b463a 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -80,14 +80,12 @@ out_close:  	return -1;  } -void perf_session__update_sample_type(struct perf_session *self) +void perf_session__set_id_hdr_size(struct perf_session *session)  { -	self->sample_type = perf_evlist__sample_type(self->evlist); -	self->sample_size = __perf_evsel__sample_size(self->sample_type); -	self->sample_id_all = perf_evlist__sample_id_all(self->evlist); -	self->id_hdr_size = perf_evlist__id_hdr_size(self->evlist); -	self->host_machine.id_hdr_size = self->id_hdr_size; -	machines__set_id_hdr_size(&self->machines, self->id_hdr_size); +	u16 id_hdr_size = perf_evlist__id_hdr_size(session->evlist); + +	session->host_machine.id_hdr_size = id_hdr_size; +	machines__set_id_hdr_size(&session->machines, id_hdr_size);  }  int perf_session__create_kernel_maps(struct perf_session *self) @@ -147,7 +145,7 @@ struct perf_session *perf_session__new(const char *filename, int mode,  	if (mode == O_RDONLY) {  		if (perf_session__open(self, force) < 0)  			goto out_delete; -		perf_session__update_sample_type(self); +		perf_session__set_id_hdr_size(self);  	} else if (mode == O_WRONLY) {  		/*  		 * In O_RDONLY mode this will be performed when reading the @@ -158,7 +156,7 @@ struct perf_session *perf_session__new(const char *filename, int mode,  	}  	if (tool && tool->ordering_requires_timestamps && -	    tool->ordered_samples && !self->sample_id_all) { +	    tool->ordered_samples && !perf_evlist__sample_id_all(self->evlist)) {  		dump_printf("WARNING: No sample_id_all support, falling back to unordered processing\n");  		tool->ordered_samples = false;  	} @@ -673,7 +671,8 @@ static void flush_sample_queue(struct perf_session *s,  		if (iter->timestamp > limit)  			break; -		ret = perf_session__parse_sample(s, iter->event, &sample); +		ret = perf_evlist__parse_sample(s->evlist, iter->event, &sample, +						s->header.needs_swap);  		if (ret)  			pr_err("Can't parse sample, err = %d\n", ret);  		else @@ -865,16 +864,18 @@ static void perf_session__print_tstamp(struct perf_session *session,  				       union perf_event *event,  				       struct perf_sample *sample)  { +	u64 sample_type = perf_evlist__sample_type(session->evlist); +  	if (event->header.type != PERF_RECORD_SAMPLE && -	    !session->sample_id_all) { +	    !perf_evlist__sample_id_all(session->evlist)) {  		fputs("-1 -1 ", stdout);  		return;  	} -	if ((session->sample_type & PERF_SAMPLE_CPU)) +	if ((sample_type & PERF_SAMPLE_CPU))  		printf("%u ", sample->cpu); -	if (session->sample_type & PERF_SAMPLE_TIME) +	if (sample_type & PERF_SAMPLE_TIME)  		printf("%" PRIu64 " ", sample->time);  } @@ -899,6 +900,8 @@ static void dump_event(struct perf_session *session, union perf_event *event,  static void dump_sample(struct perf_session *session, union perf_event *event,  			struct perf_sample *sample)  { +	u64 sample_type; +  	if (!dump_trace)  		return; @@ -906,10 +909,12 @@ static void dump_sample(struct perf_session *session, union perf_event *event,  	       event->header.misc, sample->pid, sample->tid, sample->ip,  	       sample->period, sample->addr); -	if (session->sample_type & PERF_SAMPLE_CALLCHAIN) +	sample_type = perf_evlist__sample_type(session->evlist); + +	if (sample_type & PERF_SAMPLE_CALLCHAIN)  		callchain__printf(sample); -	if (session->sample_type & PERF_SAMPLE_BRANCH_STACK) +	if (sample_type & PERF_SAMPLE_BRANCH_STACK)  		branch_stack__printf(sample);  } @@ -1006,7 +1011,7 @@ static int perf_session__preprocess_sample(struct perf_session *session,  					   union perf_event *event, struct perf_sample *sample)  {  	if (event->header.type != PERF_RECORD_SAMPLE || -	    !(session->sample_type & PERF_SAMPLE_CALLCHAIN)) +	    !(perf_evlist__sample_type(session->evlist) & PERF_SAMPLE_CALLCHAIN))  		return 0;  	if (!ip_callchain__valid(sample->callchain, event)) { @@ -1030,7 +1035,7 @@ static int perf_session__process_user_event(struct perf_session *session, union  	case PERF_RECORD_HEADER_ATTR:  		err = tool->attr(event, &session->evlist);  		if (err == 0) -			perf_session__update_sample_type(session); +			perf_session__set_id_hdr_size(session);  		return err;  	case PERF_RECORD_HEADER_EVENT_TYPE:  		return tool->event_type(tool, event); @@ -1065,7 +1070,7 @@ static int perf_session__process_event(struct perf_session *session,  	int ret;  	if (session->header.needs_swap) -		event_swap(event, session->sample_id_all); +		event_swap(event, perf_evlist__sample_id_all(session->evlist));  	if (event->header.type >= PERF_RECORD_HEADER_MAX)  		return -EINVAL; @@ -1078,7 +1083,8 @@ static int perf_session__process_event(struct perf_session *session,  	/*  	 * For all kernel events we get the sample data  	 */ -	ret = perf_session__parse_sample(session, event, &sample); +	ret = perf_evlist__parse_sample(session->evlist, event, &sample, +					session->header.needs_swap);  	if (ret)  		return ret; @@ -1389,9 +1395,9 @@ int perf_session__process_events(struct perf_session *self,  	return err;  } -bool perf_session__has_traces(struct perf_session *self, const char *msg) +bool perf_session__has_traces(struct perf_session *session, const char *msg)  { -	if (!(self->sample_type & PERF_SAMPLE_RAW)) { +	if (!(perf_evlist__sample_type(session->evlist) & PERF_SAMPLE_RAW)) {  		pr_err("No trace sample to read. Did you call 'perf %s'?\n", msg);  		return false;  	}  |