diff options
Diffstat (limited to 'tools/perf/builtin-timechart.c')
-rw-r--r-- | tools/perf/builtin-timechart.c | 56 |
1 files changed, 15 insertions, 41 deletions
diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index c0f29ed09966..f472df9561ee 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c | |||
@@ -483,48 +483,22 @@ static void sched_switch(int cpu, u64 timestamp, struct trace_entry *te) | |||
483 | static int | 483 | static int |
484 | process_sample_event(event_t *event) | 484 | process_sample_event(event_t *event) |
485 | { | 485 | { |
486 | int cursor = 0; | 486 | struct sample_data data; |
487 | u64 addr = 0; | ||
488 | u64 stamp = 0; | ||
489 | u32 cpu = 0; | ||
490 | u32 pid = 0; | ||
491 | u32 size, *size_ptr; | ||
492 | struct trace_entry *te; | 487 | struct trace_entry *te; |
493 | 488 | ||
494 | if (sample_type & PERF_SAMPLE_IP) | 489 | memset(&data, 0, sizeof(data)); |
495 | cursor++; | ||
496 | |||
497 | if (sample_type & PERF_SAMPLE_TID) { | ||
498 | pid = event->sample.array[cursor]>>32; | ||
499 | cursor++; | ||
500 | } | ||
501 | if (sample_type & PERF_SAMPLE_TIME) { | ||
502 | stamp = event->sample.array[cursor++]; | ||
503 | 490 | ||
504 | if (!first_time || first_time > stamp) | 491 | event__parse_sample(event, sample_type, &data); |
505 | first_time = stamp; | ||
506 | if (last_time < stamp) | ||
507 | last_time = stamp; | ||
508 | 492 | ||
493 | if (sample_type & PERF_SAMPLE_TIME) { | ||
494 | if (!first_time || first_time > data.time) | ||
495 | first_time = data.time; | ||
496 | if (last_time < data.time) | ||
497 | last_time = data.time; | ||
509 | } | 498 | } |
510 | if (sample_type & PERF_SAMPLE_ADDR) | ||
511 | addr = event->sample.array[cursor++]; | ||
512 | if (sample_type & PERF_SAMPLE_ID) | ||
513 | cursor++; | ||
514 | if (sample_type & PERF_SAMPLE_STREAM_ID) | ||
515 | cursor++; | ||
516 | if (sample_type & PERF_SAMPLE_CPU) | ||
517 | cpu = event->sample.array[cursor++] & 0xFFFFFFFF; | ||
518 | if (sample_type & PERF_SAMPLE_PERIOD) | ||
519 | cursor++; | ||
520 | |||
521 | size_ptr = (void *)&event->sample.array[cursor]; | ||
522 | |||
523 | size = *size_ptr; | ||
524 | size_ptr++; | ||
525 | 499 | ||
526 | te = (void *)size_ptr; | 500 | te = (void *)data.raw_data; |
527 | if (sample_type & PERF_SAMPLE_RAW && size > 0) { | 501 | if (sample_type & PERF_SAMPLE_RAW && data.raw_size > 0) { |
528 | char *event_str; | 502 | char *event_str; |
529 | struct power_entry *pe; | 503 | struct power_entry *pe; |
530 | 504 | ||
@@ -536,19 +510,19 @@ process_sample_event(event_t *event) | |||
536 | return 0; | 510 | return 0; |
537 | 511 | ||
538 | if (strcmp(event_str, "power:power_start") == 0) | 512 | if (strcmp(event_str, "power:power_start") == 0) |
539 | c_state_start(cpu, stamp, pe->value); | 513 | c_state_start(data.cpu, data.time, pe->value); |
540 | 514 | ||
541 | if (strcmp(event_str, "power:power_end") == 0) | 515 | if (strcmp(event_str, "power:power_end") == 0) |
542 | c_state_end(cpu, stamp); | 516 | c_state_end(data.cpu, data.time); |
543 | 517 | ||
544 | if (strcmp(event_str, "power:power_frequency") == 0) | 518 | if (strcmp(event_str, "power:power_frequency") == 0) |
545 | p_state_change(cpu, stamp, pe->value); | 519 | p_state_change(data.cpu, data.time, pe->value); |
546 | 520 | ||
547 | if (strcmp(event_str, "sched:sched_wakeup") == 0) | 521 | if (strcmp(event_str, "sched:sched_wakeup") == 0) |
548 | sched_wakeup(cpu, stamp, pid, te); | 522 | sched_wakeup(data.cpu, data.time, data.pid, te); |
549 | 523 | ||
550 | if (strcmp(event_str, "sched:sched_switch") == 0) | 524 | if (strcmp(event_str, "sched:sched_switch") == 0) |
551 | sched_switch(cpu, stamp, te); | 525 | sched_switch(data.cpu, data.time, te); |
552 | } | 526 | } |
553 | return 0; | 527 | return 0; |
554 | } | 528 | } |