Merge branch 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: perf timechart: Improve the visual appearance of scheduler delays perf timechart: Fix the wakeup-arrows that point to non-visible processes perf top: Fix --delay_secs 0 division by zero perf tools: Bump version to 0.0.2 perf_event: Adjust frequency and unthrottle for non-group-leader events
This commit is contained in:
Коммит
37c2ca2411
|
@ -1355,7 +1355,7 @@ static void perf_ctx_adjust_freq(struct perf_event_context *ctx)
|
|||
u64 interrupts, freq;
|
||||
|
||||
spin_lock(&ctx->lock);
|
||||
list_for_each_entry(event, &ctx->group_list, group_entry) {
|
||||
list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
|
||||
if (event->state != PERF_EVENT_STATE_ACTIVE)
|
||||
continue;
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -686,6 +686,8 @@ static void handle_keypress(int c)
|
|||
switch (c) {
|
||||
case 'd':
|
||||
prompt_integer(&delay_secs, "Enter display delay");
|
||||
if (delay_secs < 1)
|
||||
delay_secs = 1;
|
||||
break;
|
||||
case 'e':
|
||||
prompt_integer(&print_entries, "Enter display entries (lines)");
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
GVF=PERF-VERSION-FILE
|
||||
DEF_VER=v0.0.1.PERF
|
||||
DEF_VER=v0.0.2.PERF
|
||||
|
||||
LF='
|
||||
'
|
||||
|
|
|
@ -103,7 +103,7 @@ void open_svg(const char *filename, int cpus, int rows, u64 start, u64 end)
|
|||
fprintf(svgfile, " rect.process2 { fill:rgb(180,180,180); fill-opacity:0.9; stroke-width:0; stroke:rgb( 0, 0, 0); } \n");
|
||||
fprintf(svgfile, " rect.sample { fill:rgb( 0, 0,255); fill-opacity:0.8; stroke-width:0; stroke:rgb( 0, 0, 0); } \n");
|
||||
fprintf(svgfile, " rect.blocked { fill:rgb(255, 0, 0); fill-opacity:0.5; stroke-width:0; stroke:rgb( 0, 0, 0); } \n");
|
||||
fprintf(svgfile, " rect.waiting { fill:rgb(214,214, 0); fill-opacity:0.3; stroke-width:0; stroke:rgb( 0, 0, 0); } \n");
|
||||
fprintf(svgfile, " rect.waiting { fill:rgb(224,214, 0); fill-opacity:0.8; stroke-width:0; stroke:rgb( 0, 0, 0); } \n");
|
||||
fprintf(svgfile, " rect.WAITING { fill:rgb(255,214, 48); fill-opacity:0.6; stroke-width:0; stroke:rgb( 0, 0, 0); } \n");
|
||||
fprintf(svgfile, " rect.cpu { fill:rgb(192,192,192); fill-opacity:0.2; stroke-width:0.5; stroke:rgb(128,128,128); } \n");
|
||||
fprintf(svgfile, " rect.pstate { fill:rgb(128,128,128); fill-opacity:0.8; stroke-width:0; } \n");
|
||||
|
|
Загрузка…
Ссылка в новой задаче