Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 919d86d3 authored by Adrian Hunter's avatar Adrian Hunter Committed by Arnaldo Carvalho de Melo
Browse files

perf session: Flag if the event stream is entirely in memory



Flag if the event stream is a file that has been mmapped in one go.

This is useful, for example, if a tool needs to keep an event for later
reference.  If the new flag is set, a pointer to the event can be
retained, otherwise the event must be copied.

Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1405332185-4050-28-git-send-email-adrian.hunter@intel.com


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 9c00a81b
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -1297,8 +1297,10 @@ int __perf_session__process_events(struct perf_session *session,
	ui_progress__init(&prog, file_size, "Processing events...");

	mmap_size = MMAP_SIZE;
	if (mmap_size > file_size)
	if (mmap_size > file_size) {
		mmap_size = file_size;
		session->one_mmap = true;
	}

	memset(mmaps, 0, sizeof(mmaps));

@@ -1320,6 +1322,10 @@ int __perf_session__process_events(struct perf_session *session,
	mmaps[map_idx] = buf;
	map_idx = (map_idx + 1) & (ARRAY_SIZE(mmaps) - 1);
	file_pos = file_offset + head;
	if (session->one_mmap) {
		session->one_mmap_addr = buf;
		session->one_mmap_offset = file_offset;
	}

more:
	event = fetch_mmaped_event(session, head, mmap_size, buf);
@@ -1365,6 +1371,7 @@ int __perf_session__process_events(struct perf_session *session,
	ui_progress__finish();
	perf_session__warn_about_errors(session, tool);
	perf_session_free_sample_buffers(session);
	session->one_mmap = false;
	return err;
}

+3 −0
Original line number Diff line number Diff line
@@ -36,6 +36,9 @@ struct perf_session {
	struct trace_event	tevent;
	struct events_stats	stats;
	bool			repipe;
	bool			one_mmap;
	void			*one_mmap_addr;
	u64			one_mmap_offset;
	struct ordered_samples	ordered_samples;
	struct perf_data_file	*file;
};