X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fbootchart%2Fsvg.c;h=9fee810795b30afb471d4a6fc40a54cba622aed1;hp=414d7af9b98451584362f367c397c53e4ebe505c;hb=1f3523baf7418adf3b2738b3917ef956a8414ab7;hpb=e93450c6c053d7499971a2b1310e893978f67f74
diff --git a/src/bootchart/svg.c b/src/bootchart/svg.c
index 414d7af9b..9fee81079 100644
--- a/src/bootchart/svg.c
+++ b/src/bootchart/svg.c
@@ -103,7 +103,7 @@ static void svg_header(void)
svg("\n\n");
svg("\n", VERSION);
- svg("\n", hz, len);
+ svg("\n", hz, samples_len);
svg("\n", scale_x, scale_y);
svg("\n", relative, filter);
svg("\n", pss, entropy);
@@ -165,18 +165,19 @@ static void svg_title(const char *build)
}
/* extract root fs so we can find disk model name in sysfs */
+ /* FIXME: this works only in the simple case */
c = strstr(cmdline, "root=/dev/");
if (c) {
strncpy(rootbdev, &c[10], 3);
rootbdev[3] = '\0';
- }
- sprintf(filename, "block/%s/device/model", rootbdev);
- fd = openat(sysfd, filename, O_RDONLY);
- f = fdopen(fd, "r");
- if (f) {
- if (!fgets(model, 255, f))
- fprintf(stderr, "Error reading disk model for %s\n", rootbdev);
- fclose(f);
+ sprintf(filename, "block/%s/device/model", rootbdev);
+ fd = openat(sysfd, filename, O_RDONLY);
+ f = fdopen(fd, "r");
+ if (f) {
+ if (!fgets(model, 255, f))
+ fprintf(stderr, "Error reading disk model for %s\n", rootbdev);
+ fclose(f);
+ }
}
/* various utsname parameters */
@@ -221,7 +222,7 @@ static void svg_title(const char *build)
svg("Not detected");
svg("\n");
svg("Graph data: %.03f samples/sec, recorded %i total, dropped %i samples, %i processes, %i filtered\n",
- hz, len, overrun, pscount, pfiltered);
+ hz, samples_len, overrun, pscount, pfiltered);
}
@@ -266,6 +267,20 @@ static void svg_graph_box(int height)
}
}
+/* xml comments must not contain "--" */
+static char* xml_comment_encode(const char* name) {
+ char *enc_name, *p;
+
+ enc_name = strdup(name);
+ if (!enc_name)
+ return NULL;
+
+ for (p = enc_name; *p; p++)
+ if (p[0] == '-' && p[1] == '-')
+ p[1] = '_';
+
+ return enc_name;
+}
static void svg_pss_graph(void)
{
@@ -368,7 +383,7 @@ static void svg_pss_graph(void)
top = bottom + ps->sample[i].pss;
/* draw a label with the process / PID */
if ((i == 1) || (ps->sample[i - 1].pss <= (100 * scale_y)))
- svg(" %s [%i]\n",
+ svg(" [%i]\n",
time_to_graph(sampletime[i] - graph_start),
kb_to_graph(1000000.0 - bottom - ((top - bottom) / 2)),
ps->name,
@@ -382,10 +397,17 @@ static void svg_pss_graph(void)
svg("\n\n\n");
ps = ps_first;
while (ps->next_ps) {
+ char _cleanup_free_*enc_name;
ps = ps->next_ps;
if (!ps)
continue;
- svg("\n", ps->name, ps->pid,
+ svg("\n", enc_name, ps->pid,
ps->ppid, ps->total);
/* it would be nice if we could use exec_start from /proc/pid/sched,
@@ -897,7 +925,7 @@ static void svg_ps_bars(void)
w = ps->first;
/* text label of process name */
- svg(" %s [%i] %.03fs\n",
+ svg(" [%i]%.03fs\n",
time_to_graph(sampletime[w] - graph_start) + 5.0,
ps_to_graph(j) + 14.0,
ps->name,
@@ -1001,7 +1029,7 @@ static void svg_top_ten_cpu(void)
svg("Top CPU consumers:\n");
for (n = 0; n < 10; n++)
- svg("%3.03fs - %s[%d]\n",
+ svg("%3.03fs - [%d]\n",
20 + (n * 13),
top[n]->total,
top[n]->name,
@@ -1036,7 +1064,7 @@ static void svg_top_ten_pss(void)
svg("Top PSS consumers:\n");
for (n = 0; n < 10; n++)
- svg("%dK - %s[%d]\n",
+ svg("%dK - [%d]\n",
20 + (n * 13),
top[n]->pss_max,
top[n]->name,