Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 164327
b: refs/heads/master
c: a92fe7b
h: refs/heads/master
i:
  164325: 3408f5b
  164323: 4c61869
  164319: ac2d503
v: v3
  • Loading branch information
Arjan van de Ven authored and Ingo Molnar committed Sep 20, 2009
1 parent 84a5b5c commit 0cf2368
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4f1202c8e61478984ed2d0df616149faf84c2a7f
refs/heads/master: a92fe7b3063db2caa578872fce975ff53aa56214
6 changes: 3 additions & 3 deletions trunk/tools/perf/builtin-timechart.c
Original file line number Diff line number Diff line change
Expand Up @@ -827,15 +827,15 @@ static void draw_process_bars(void)
continue;
}

svg_box(Y, p->start_time, p->end_time, "process");
svg_box(Y, c->start_time, c->end_time, "process");
sample = c->samples;
while (sample) {
if (sample->type == TYPE_RUNNING)
svg_sample(Y, sample->cpu, sample->start_time, sample->end_time, "sample");
svg_sample(Y, sample->cpu, sample->start_time, sample->end_time);
if (sample->type == TYPE_BLOCKED)
svg_box(Y, sample->start_time, sample->end_time, "blocked");
if (sample->type == TYPE_WAITING)
svg_box(Y, sample->start_time, sample->end_time, "waiting");
svg_waiting(Y, sample->start_time, sample->end_time);
sample = sample->next;
}

Expand Down
56 changes: 52 additions & 4 deletions trunk/tools/perf/util/svghelper.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ void open_svg(const char *filename, int cpus, int rows)
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(255,255, 0); fill-opacity:0.3; 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(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");
fprintf(svgfile, " rect.c1 { fill:rgb(255,214,214); fill-opacity:0.5; stroke-width:0; } \n");
Expand All @@ -92,14 +93,14 @@ void svg_box(int Yslot, u64 start, u64 end, const char *type)
time2pixels(start), time2pixels(end)-time2pixels(start), Yslot * SLOT_MULT, SLOT_HEIGHT, type);
}

void svg_sample(int Yslot, int cpu, u64 start, u64 end, const char *type)
void svg_sample(int Yslot, int cpu, u64 start, u64 end)
{
double text_size;
if (!svgfile)
return;

fprintf(svgfile, "<rect x=\"%4.8f\" width=\"%4.8f\" y=\"%4.1f\" height=\"%4.1f\" class=\"%s\"/>\n",
time2pixels(start), time2pixels(end)-time2pixels(start), Yslot * SLOT_MULT, SLOT_HEIGHT, type);
fprintf(svgfile, "<rect x=\"%4.8f\" width=\"%4.8f\" y=\"%4.1f\" height=\"%4.1f\" class=\"sample\"/>\n",
time2pixels(start), time2pixels(end)-time2pixels(start), Yslot * SLOT_MULT, SLOT_HEIGHT);

text_size = (time2pixels(end)-time2pixels(start));
if (cpu > 9)
Expand All @@ -112,6 +113,53 @@ void svg_sample(int Yslot, int cpu, u64 start, u64 end, const char *type)

}

static char *time_to_string(u64 duration)
{
static char text[80];

text[0] = 0;

if (duration < 1000) /* less than 1 usec */
return text;

if (duration < 1000 * 1000) { /* less than 1 msec */
sprintf(text, "%4.1f us", duration / 1000.0);
return text;
}
sprintf(text, "%4.1f ms", duration / 1000.0 / 1000);

return text;
}

void svg_waiting(int Yslot, u64 start, u64 end)
{
char *text;
const char *style;
double font_size;

if (!svgfile)
return;

style = "waiting";

if (end-start > 10 * 1000000) /* 10 msec */
style = "WAITING";

text = time_to_string(end-start);

font_size = 1.0 * (time2pixels(end)-time2pixels(start)) / strlen(text);

if (font_size > 0.2)
font_size = 0.2;


fprintf(svgfile, "<rect x=\"%4.8f\" width=\"%4.8f\" y=\"%4.1f\" height=\"%4.1f\" class=\"%s\"/>\n",
time2pixels(start), time2pixels(end)-time2pixels(start), Yslot * SLOT_MULT, SLOT_HEIGHT, style);
if (font_size > MIN_TEXT_SIZE)
fprintf(svgfile, "<text transform=\"translate(%1.8f,%1.8f)\" font-size=\"%1.6fpt\">%s</text>\n",
time2pixels(start), Yslot * SLOT_MULT + 2, font_size, text);
}

static char *cpu_model(void)
{
static char cpu_m[255];
Expand Down
3 changes: 2 additions & 1 deletion trunk/tools/perf/util/svghelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@

extern void open_svg(const char *filename, int cpus, int rows);
extern void svg_box(int Yslot, u64 start, u64 end, const char *type);
extern void svg_sample(int Yslot, int cpu, u64 start, u64 end, const char *type);
extern void svg_sample(int Yslot, int cpu, u64 start, u64 end);
extern void svg_waiting(int Yslot, u64 start, u64 end);
extern void svg_cpu_box(int cpu, u64 max_frequency, u64 turbo_frequency);


Expand Down

0 comments on commit 0cf2368

Please sign in to comment.