diff options
| -rw-r--r-- | tools/perf/builtin-trace.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index c45c1cfeb866..99daeed55a9b 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c | |||
| @@ -2400,6 +2400,14 @@ static bool skip_sample(struct trace *trace, struct perf_sample *sample) | |||
| 2400 | return false; | 2400 | return false; |
| 2401 | } | 2401 | } |
| 2402 | 2402 | ||
| 2403 | static void trace__set_base_time(struct trace *trace, | ||
| 2404 | struct perf_evsel *evsel __maybe_unused, | ||
| 2405 | struct perf_sample *sample) | ||
| 2406 | { | ||
| 2407 | if (trace->base_time == 0 && !trace->full_time) | ||
| 2408 | trace->base_time = sample->time; | ||
| 2409 | } | ||
| 2410 | |||
| 2403 | static int trace__process_sample(struct perf_tool *tool, | 2411 | static int trace__process_sample(struct perf_tool *tool, |
| 2404 | union perf_event *event, | 2412 | union perf_event *event, |
| 2405 | struct perf_sample *sample, | 2413 | struct perf_sample *sample, |
| @@ -2414,8 +2422,7 @@ static int trace__process_sample(struct perf_tool *tool, | |||
| 2414 | if (skip_sample(trace, sample)) | 2422 | if (skip_sample(trace, sample)) |
| 2415 | return 0; | 2423 | return 0; |
| 2416 | 2424 | ||
| 2417 | if (!trace->full_time && trace->base_time == 0) | 2425 | trace__set_base_time(trace, evsel, sample); |
| 2418 | trace->base_time = sample->time; | ||
| 2419 | 2426 | ||
| 2420 | if (handler) { | 2427 | if (handler) { |
| 2421 | ++trace->nr_events; | 2428 | ++trace->nr_events; |
| @@ -2553,9 +2560,6 @@ static void trace__handle_event(struct trace *trace, union perf_event *event, st | |||
| 2553 | const u32 type = event->header.type; | 2560 | const u32 type = event->header.type; |
| 2554 | struct perf_evsel *evsel; | 2561 | struct perf_evsel *evsel; |
| 2555 | 2562 | ||
| 2556 | if (!trace->full_time && trace->base_time == 0) | ||
| 2557 | trace->base_time = sample->time; | ||
| 2558 | |||
| 2559 | if (type != PERF_RECORD_SAMPLE) { | 2563 | if (type != PERF_RECORD_SAMPLE) { |
| 2560 | trace__process_event(trace, trace->host, event, sample); | 2564 | trace__process_event(trace, trace->host, event, sample); |
| 2561 | return; | 2565 | return; |
| @@ -2567,6 +2571,8 @@ static void trace__handle_event(struct trace *trace, union perf_event *event, st | |||
| 2567 | return; | 2571 | return; |
| 2568 | } | 2572 | } |
| 2569 | 2573 | ||
| 2574 | trace__set_base_time(trace, evsel, sample); | ||
| 2575 | |||
| 2570 | if (evsel->attr.type == PERF_TYPE_TRACEPOINT && | 2576 | if (evsel->attr.type == PERF_TYPE_TRACEPOINT && |
| 2571 | sample->raw_data == NULL) { | 2577 | sample->raw_data == NULL) { |
| 2572 | fprintf(trace->output, "%s sample with no payload for tid: %d, cpu %d, raw_size=%d, skipping...\n", | 2578 | fprintf(trace->output, "%s sample with no payload for tid: %d, cpu %d, raw_size=%d, skipping...\n", |
