Re: [PATCH 14/14] perf script: show overhead events
From: Jiri Olsa
Date: Wed Nov 23 2016 - 18:30:08 EST
On Wed, Nov 23, 2016 at 04:44:52AM -0500, kan.liang@xxxxxxxxx wrote:
> From: Kan Liang <kan.liang@xxxxxxxxx>
>
> Introduce a new option --show-overhead to show overhead events in perf
> script
>
> Signed-off-by: Kan Liang <kan.liang@xxxxxxxxx>
> ---
> tools/perf/builtin-script.c | 36 ++++++++++++++++++++++++++++++++++++
> tools/perf/util/event.c | 37 +++++++++++++++++++++++++++++++++++++
> tools/perf/util/event.h | 1 +
> 3 files changed, 74 insertions(+)
>
> diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
> index e1daff3..76d9747 100644
> --- a/tools/perf/builtin-script.c
> +++ b/tools/perf/builtin-script.c
> @@ -829,6 +829,7 @@ struct perf_script {
> bool show_task_events;
> bool show_mmap_events;
> bool show_switch_events;
> + bool show_overhead;
> bool allocated;
> struct cpu_map *cpus;
> struct thread_map *threads;
> @@ -1264,6 +1265,37 @@ static int process_switch_event(struct perf_tool *tool,
> return 0;
> }
>
> +static int process_overhead_event(struct perf_tool *tool,
> + union perf_event *event,
> + struct perf_sample *sample,
> + struct machine *machine)
> +{
> + struct thread *thread;
> + struct perf_script *script = container_of(tool, struct perf_script, tool);
> + struct perf_session *session = script->session;
> + struct perf_evsel *evsel;
> +
> + if (perf_event__process_switch(tool, event, sample, machine) < 0)
> + return -1;
process_switch event? copy&paste error?
jirka
> + if (sample) {
> + evsel = perf_evlist__id2evsel(session->evlist, sample->id);
> + thread = machine__findnew_thread(machine, sample->pid, sample->tid);
> + if (thread == NULL) {
> + pr_debug("problem processing OVERHEAD event, skipping it.\n");
> + return -1;
> + }
> +
> + print_sample_start(sample, thread, evsel);
> + perf_event__fprintf(event, stdout);
> + thread__put(thread);
> + } else {
> + /* USER OVERHEAD event */
> + perf_event__fprintf(event, stdout);
> + }
> +
> + return 0;
> +}
> +
SNIP