mirror of https://gitee.com/openkylin/linux.git
perf timechart: Fix the wakeup-arrows that point to non-visible processes
The timechart wakeup arrows currently show no process information when the waker/wakee are processes that are not actually chosen to be shown on the timechart. This patch fixes this oversight, by looking through all processes (after giving preference to visible processes) as well as falling back to just showing the PID if no name for the process can be resolved. Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> LKML-Reference: <20091020064649.0e4959b2@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
dc79959aaf
commit
3bc2a39c69
|
@ -765,19 +765,40 @@ static void draw_wakeups(void)
|
|||
if (c->Y && c->start_time <= we->time && c->end_time >= we->time) {
|
||||
if (p->pid == we->waker) {
|
||||
from = c->Y;
|
||||
task_from = c->comm;
|
||||
task_from = strdup(c->comm);
|
||||
}
|
||||
if (p->pid == we->wakee) {
|
||||
to = c->Y;
|
||||
task_to = c->comm;
|
||||
task_to = strdup(c->comm);
|
||||
}
|
||||
}
|
||||
c = c->next;
|
||||
}
|
||||
c = p->all;
|
||||
while (c) {
|
||||
if (p->pid == we->waker && !from) {
|
||||
from = c->Y;
|
||||
task_from = strdup(c->comm);
|
||||
}
|
||||
if (p->pid == we->wakee && !to) {
|
||||
to = c->Y;
|
||||
task_to = strdup(c->comm);
|
||||
}
|
||||
c = c->next;
|
||||
}
|
||||
}
|
||||
p = p->next;
|
||||
}
|
||||
|
||||
if (!task_from) {
|
||||
task_from = malloc(40);
|
||||
sprintf(task_from, "[%i]", we->waker);
|
||||
}
|
||||
if (!task_to) {
|
||||
task_to = malloc(40);
|
||||
sprintf(task_to, "[%i]", we->wakee);
|
||||
}
|
||||
|
||||
if (we->waker == -1)
|
||||
svg_interrupt(we->time, to);
|
||||
else if (from && to && abs(from - to) == 1)
|
||||
|
@ -785,6 +806,9 @@ static void draw_wakeups(void)
|
|||
else
|
||||
svg_partial_wakeline(we->time, from, task_from, to, task_to);
|
||||
we = we->next;
|
||||
|
||||
free(task_from);
|
||||
free(task_to);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue