diff options
Diffstat (limited to 'tools/perf/builtin-timechart.c')
| -rw-r--r-- | tools/perf/builtin-timechart.c | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 4405681b3134..e8a510d935e5 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c | |||
| @@ -46,6 +46,8 @@ static u64 turbo_frequency; | |||
| 46 | 46 | ||
| 47 | static u64 first_time, last_time; | 47 | static u64 first_time, last_time; |
| 48 | 48 | ||
| 49 | static int power_only; | ||
| 50 | |||
| 49 | 51 | ||
| 50 | static struct perf_header *header; | 52 | static struct perf_header *header; |
| 51 | 53 | ||
| @@ -547,7 +549,7 @@ static void end_sample_processing(void) | |||
| 547 | u64 cpu; | 549 | u64 cpu; |
| 548 | struct power_event *pwr; | 550 | struct power_event *pwr; |
| 549 | 551 | ||
| 550 | for (cpu = 0; cpu < numcpus; cpu++) { | 552 | for (cpu = 0; cpu <= numcpus; cpu++) { |
| 551 | pwr = malloc(sizeof(struct power_event)); | 553 | pwr = malloc(sizeof(struct power_event)); |
| 552 | if (!pwr) | 554 | if (!pwr) |
| 553 | return; | 555 | return; |
| @@ -763,19 +765,40 @@ static void draw_wakeups(void) | |||
| 763 | if (c->Y && c->start_time <= we->time && c->end_time >= we->time) { | 765 | if (c->Y && c->start_time <= we->time && c->end_time >= we->time) { |
| 764 | if (p->pid == we->waker) { | 766 | if (p->pid == we->waker) { |
| 765 | from = c->Y; | 767 | from = c->Y; |
| 766 | task_from = c->comm; | 768 | task_from = strdup(c->comm); |
| 767 | } | 769 | } |
| 768 | if (p->pid == we->wakee) { | 770 | if (p->pid == we->wakee) { |
| 769 | to = c->Y; | 771 | to = c->Y; |
| 770 | task_to = c->comm; | 772 | task_to = strdup(c->comm); |
| 771 | } | 773 | } |
| 772 | } | 774 | } |
| 773 | c = c->next; | 775 | c = c->next; |
| 774 | } | 776 | } |
| 777 | c = p->all; | ||
| 778 | while (c) { | ||
| 779 | if (p->pid == we->waker && !from) { | ||
| 780 | from = c->Y; | ||
| 781 | task_from = strdup(c->comm); | ||
| 782 | } | ||
| 783 | if (p->pid == we->wakee && !to) { | ||
| 784 | to = c->Y; | ||
| 785 | task_to = strdup(c->comm); | ||
| 786 | } | ||
| 787 | c = c->next; | ||
| 788 | } | ||
| 775 | } | 789 | } |
| 776 | p = p->next; | 790 | p = p->next; |
| 777 | } | 791 | } |
| 778 | 792 | ||
| 793 | if (!task_from) { | ||
| 794 | task_from = malloc(40); | ||
| 795 | sprintf(task_from, "[%i]", we->waker); | ||
| 796 | } | ||
| 797 | if (!task_to) { | ||
| 798 | task_to = malloc(40); | ||
| 799 | sprintf(task_to, "[%i]", we->wakee); | ||
| 800 | } | ||
| 801 | |||
| 779 | if (we->waker == -1) | 802 | if (we->waker == -1) |
| 780 | svg_interrupt(we->time, to); | 803 | svg_interrupt(we->time, to); |
| 781 | else if (from && to && abs(from - to) == 1) | 804 | else if (from && to && abs(from - to) == 1) |
| @@ -783,6 +806,9 @@ static void draw_wakeups(void) | |||
| 783 | else | 806 | else |
| 784 | svg_partial_wakeline(we->time, from, task_from, to, task_to); | 807 | svg_partial_wakeline(we->time, from, task_from, to, task_to); |
| 785 | we = we->next; | 808 | we = we->next; |
| 809 | |||
| 810 | free(task_from); | ||
| 811 | free(task_to); | ||
| 786 | } | 812 | } |
| 787 | } | 813 | } |
| 788 | 814 | ||
| @@ -871,7 +897,7 @@ static int determine_display_tasks(u64 threshold) | |||
| 871 | /* no exit marker, task kept running to the end */ | 897 | /* no exit marker, task kept running to the end */ |
| 872 | if (p->end_time == 0) | 898 | if (p->end_time == 0) |
| 873 | p->end_time = last_time; | 899 | p->end_time = last_time; |
| 874 | if (p->total_time >= threshold) | 900 | if (p->total_time >= threshold && !power_only) |
| 875 | p->display = 1; | 901 | p->display = 1; |
| 876 | 902 | ||
| 877 | c = p->all; | 903 | c = p->all; |
| @@ -882,7 +908,7 @@ static int determine_display_tasks(u64 threshold) | |||
| 882 | if (c->start_time == 1) | 908 | if (c->start_time == 1) |
| 883 | c->start_time = first_time; | 909 | c->start_time = first_time; |
| 884 | 910 | ||
| 885 | if (c->total_time >= threshold) { | 911 | if (c->total_time >= threshold && !power_only) { |
| 886 | c->display = 1; | 912 | c->display = 1; |
| 887 | count++; | 913 | count++; |
| 888 | } | 914 | } |
| @@ -1134,6 +1160,8 @@ static const struct option options[] = { | |||
| 1134 | "output file name"), | 1160 | "output file name"), |
| 1135 | OPT_INTEGER('w', "width", &svg_page_width, | 1161 | OPT_INTEGER('w', "width", &svg_page_width, |
| 1136 | "page width"), | 1162 | "page width"), |
| 1163 | OPT_BOOLEAN('p', "power-only", &power_only, | ||
| 1164 | "output power data only"), | ||
| 1137 | OPT_END() | 1165 | OPT_END() |
| 1138 | }; | 1166 | }; |
| 1139 | 1167 | ||
