diff options
author | Arjan van de Ven <arjan@linux.intel.com> | 2009-09-20 12:13:28 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-09-20 13:37:34 -0400 |
commit | 4f1202c8e61478984ed2d0df616149faf84c2a7f (patch) | |
tree | 540fb2e48d8b55bda2db75a61085908401453ac0 | |
parent | cdf8073d6b2c6c5a3cd6ce0e6c1297157f7f99ba (diff) |
perf timechart: Show the name of the waker/wakee in timechart
Timechart currently shows thin green lines for sending or receiving
wakeups. This patch also prints (in a very small font) the name of
the process that is being woken/wakes up this process.
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <20090920181328.68baa978@linux.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | tools/perf/builtin-timechart.c | 11 | ||||
-rw-r--r-- | tools/perf/util/svghelper.c | 28 | ||||
-rw-r--r-- | tools/perf/util/svghelper.h | 2 |
3 files changed, 30 insertions, 11 deletions
diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 58d737ec8f5e..3f45b8b24e3d 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c | |||
@@ -752,6 +752,7 @@ static void draw_wakeups(void) | |||
752 | we = wake_events; | 752 | we = wake_events; |
753 | while (we) { | 753 | while (we) { |
754 | int from = 0, to = 0; | 754 | int from = 0, to = 0; |
755 | char *task_from = NULL, *task_to = NULL; | ||
755 | 756 | ||
756 | /* locate the column of the waker and wakee */ | 757 | /* locate the column of the waker and wakee */ |
757 | p = all_data; | 758 | p = all_data; |
@@ -760,10 +761,14 @@ static void draw_wakeups(void) | |||
760 | c = p->all; | 761 | c = p->all; |
761 | while (c) { | 762 | while (c) { |
762 | if (c->Y && c->start_time <= we->time && c->end_time >= we->time) { | 763 | if (c->Y && c->start_time <= we->time && c->end_time >= we->time) { |
763 | if (p->pid == we->waker) | 764 | if (p->pid == we->waker) { |
764 | from = c->Y; | 765 | from = c->Y; |
765 | if (p->pid == we->wakee) | 766 | task_from = c->comm; |
767 | } | ||
768 | if (p->pid == we->wakee) { | ||
766 | to = c->Y; | 769 | to = c->Y; |
770 | task_to = c->comm; | ||
771 | } | ||
767 | } | 772 | } |
768 | c = c->next; | 773 | c = c->next; |
769 | } | 774 | } |
@@ -776,7 +781,7 @@ static void draw_wakeups(void) | |||
776 | else if (from && to && abs(from - to) == 1) | 781 | else if (from && to && abs(from - to) == 1) |
777 | svg_wakeline(we->time, from, to); | 782 | svg_wakeline(we->time, from, to); |
778 | else | 783 | else |
779 | svg_partial_wakeline(we->time, from, to); | 784 | svg_partial_wakeline(we->time, from, task_from, to, task_to); |
780 | we = we->next; | 785 | we = we->next; |
781 | } | 786 | } |
782 | } | 787 | } |
diff --git a/tools/perf/util/svghelper.c b/tools/perf/util/svghelper.c index b0fcecdf378d..9f70fa8e7643 100644 --- a/tools/perf/util/svghelper.c +++ b/tools/perf/util/svghelper.c | |||
@@ -242,7 +242,7 @@ void svg_pstate(int cpu, u64 start, u64 end, u64 freq) | |||
242 | } | 242 | } |
243 | 243 | ||
244 | 244 | ||
245 | void svg_partial_wakeline(u64 start, int row1, int row2) | 245 | void svg_partial_wakeline(u64 start, int row1, char *desc1, int row2, char *desc2) |
246 | { | 246 | { |
247 | double height; | 247 | double height; |
248 | 248 | ||
@@ -251,21 +251,35 @@ void svg_partial_wakeline(u64 start, int row1, int row2) | |||
251 | 251 | ||
252 | 252 | ||
253 | if (row1 < row2) { | 253 | if (row1 < row2) { |
254 | if (row1) | 254 | if (row1) { |
255 | fprintf(svgfile, "<line x1=\"%4.8f\" y1=\"%4.2f\" x2=\"%4.8f\" y2=\"%4.2f\" style=\"stroke:rgb(32,255,32);stroke-width:0.009\"/>\n", | 255 | fprintf(svgfile, "<line x1=\"%4.8f\" y1=\"%4.2f\" x2=\"%4.8f\" y2=\"%4.2f\" style=\"stroke:rgb(32,255,32);stroke-width:0.009\"/>\n", |
256 | time2pixels(start), row1 * SLOT_MULT + SLOT_HEIGHT, time2pixels(start), row1 * SLOT_MULT + SLOT_HEIGHT + SLOT_MULT/32); | 256 | time2pixels(start), row1 * SLOT_MULT + SLOT_HEIGHT, time2pixels(start), row1 * SLOT_MULT + SLOT_HEIGHT + SLOT_MULT/32); |
257 | 257 | if (desc2) | |
258 | if (row2) | 258 | fprintf(svgfile, "<text transform=\"translate(%4.8f,%4.8f) rotate(90)\" font-size=\"0.02pt\">%s ></text>\n", |
259 | time2pixels(start), row1 * SLOT_MULT + SLOT_HEIGHT + SLOT_HEIGHT/48, desc2); | ||
260 | } | ||
261 | if (row2) { | ||
259 | fprintf(svgfile, "<line x1=\"%4.8f\" y1=\"%4.2f\" x2=\"%4.8f\" y2=\"%4.2f\" style=\"stroke:rgb(32,255,32);stroke-width:0.009\"/>\n", | 262 | fprintf(svgfile, "<line x1=\"%4.8f\" y1=\"%4.2f\" x2=\"%4.8f\" y2=\"%4.2f\" style=\"stroke:rgb(32,255,32);stroke-width:0.009\"/>\n", |
260 | time2pixels(start), row2 * SLOT_MULT - SLOT_MULT/32, time2pixels(start), row2 * SLOT_MULT); | 263 | time2pixels(start), row2 * SLOT_MULT - SLOT_MULT/32, time2pixels(start), row2 * SLOT_MULT); |
264 | if (desc1) | ||
265 | fprintf(svgfile, "<text transform=\"translate(%4.8f,%4.8f) rotate(90)\" font-size=\"0.02pt\">%s ></text>\n", | ||
266 | time2pixels(start), row2 * SLOT_MULT - SLOT_MULT/32, desc1); | ||
267 | } | ||
261 | } else { | 268 | } else { |
262 | if (row2) | 269 | if (row2) { |
263 | fprintf(svgfile, "<line x1=\"%4.8f\" y1=\"%4.2f\" x2=\"%4.8f\" y2=\"%4.2f\" style=\"stroke:rgb(32,255,32);stroke-width:0.009\"/>\n", | 270 | fprintf(svgfile, "<line x1=\"%4.8f\" y1=\"%4.2f\" x2=\"%4.8f\" y2=\"%4.2f\" style=\"stroke:rgb(32,255,32);stroke-width:0.009\"/>\n", |
264 | time2pixels(start), row2 * SLOT_MULT + SLOT_HEIGHT, time2pixels(start), row2 * SLOT_MULT + SLOT_HEIGHT + SLOT_MULT/32); | 271 | time2pixels(start), row2 * SLOT_MULT + SLOT_HEIGHT, time2pixels(start), row2 * SLOT_MULT + SLOT_HEIGHT + SLOT_MULT/32); |
265 | 272 | if (desc1) | |
266 | if (row1) | 273 | fprintf(svgfile, "<text transform=\"translate(%4.8f,%4.8f) rotate(90)\" font-size=\"0.02pt\">%s <</text>\n", |
274 | time2pixels(start), row2 * SLOT_MULT + SLOT_HEIGHT + SLOT_MULT/48, desc1); | ||
275 | } | ||
276 | if (row1) { | ||
267 | fprintf(svgfile, "<line x1=\"%4.8f\" y1=\"%4.2f\" x2=\"%4.8f\" y2=\"%4.2f\" style=\"stroke:rgb(32,255,32);stroke-width:0.009\"/>\n", | 277 | fprintf(svgfile, "<line x1=\"%4.8f\" y1=\"%4.2f\" x2=\"%4.8f\" y2=\"%4.2f\" style=\"stroke:rgb(32,255,32);stroke-width:0.009\"/>\n", |
268 | time2pixels(start), row1 * SLOT_MULT - SLOT_MULT/32, time2pixels(start), row1 * SLOT_MULT); | 278 | time2pixels(start), row1 * SLOT_MULT - SLOT_MULT/32, time2pixels(start), row1 * SLOT_MULT); |
279 | if (desc2) | ||
280 | fprintf(svgfile, "<text transform=\"translate(%4.8f,%4.8f) rotate(90)\" font-size=\"0.02pt\">%s <</text>\n", | ||
281 | time2pixels(start), row1 * SLOT_MULT - SLOT_HEIGHT/32, desc2); | ||
282 | } | ||
269 | } | 283 | } |
270 | height = row1 * SLOT_MULT; | 284 | height = row1 * SLOT_MULT; |
271 | if (row2 > row1) | 285 | if (row2 > row1) |
diff --git a/tools/perf/util/svghelper.h b/tools/perf/util/svghelper.h index ad79b5dc53de..8260a7e6e314 100644 --- a/tools/perf/util/svghelper.h +++ b/tools/perf/util/svghelper.h | |||
@@ -17,7 +17,7 @@ extern void svg_pstate(int cpu, u64 start, u64 end, u64 freq); | |||
17 | extern void svg_time_grid(u64 start, u64 end); | 17 | extern void svg_time_grid(u64 start, u64 end); |
18 | extern void svg_legenda(void); | 18 | extern void svg_legenda(void); |
19 | extern void svg_wakeline(u64 start, int row1, int row2); | 19 | extern void svg_wakeline(u64 start, int row1, int row2); |
20 | extern void svg_partial_wakeline(u64 start, int row1, int row2); | 20 | extern void svg_partial_wakeline(u64 start, int row1, char *desc1, int row2, char *desc2); |
21 | extern void svg_interrupt(u64 start, int row); | 21 | extern void svg_interrupt(u64 start, int row); |
22 | extern void svg_text(int Yslot, u64 start, const char *text); | 22 | extern void svg_text(int Yslot, u64 start, const char *text); |
23 | extern void svg_close(void); | 23 | extern void svg_close(void); |