bootchart: assorted coding style fixes

* kill unnecessary {}
* add newlines where appropriate
* remove dead code
* reorder variable declarations
* fix more return code logic
* pass O_CLOEXEC to all open*() calles
* use safe_close() where possible
This commit is contained in:
Daniel Mack
2015-04-03 15:29:18 +02:00
parent 1f2ecb0393
commit af672f03ec
3 changed files with 158 additions and 155 deletions
+44 -51
View File
@@ -85,8 +85,6 @@ char arg_init_path[PATH_MAX] = DEFAULT_INIT;
char arg_output_path[PATH_MAX] = DEFAULT_OUTPUT;
static void signal_handler(int sig) {
if (sig++)
sig--;
exiting = 1;
}
@@ -253,43 +251,41 @@ static int parse_argv(int argc, char *argv[]) {
return 1;
}
static void do_journal_append(char *file) {
static int do_journal_append(char *file) {
_cleanup_free_ char *bootchart_message = NULL;
_cleanup_free_ char *bootchart_file = NULL;
_cleanup_free_ char *p = NULL;
_cleanup_close_ int fd = -1;
struct iovec iovec[5];
int r, j = 0;
ssize_t n;
_cleanup_free_ char *bootchart_file = NULL, *bootchart_message = NULL,
*p = NULL;
_cleanup_close_ int fd = -1;
bootchart_file = strappend("BOOTCHART_FILE=", file);
if (bootchart_file)
IOVEC_SET_STRING(iovec[j++], bootchart_file);
if (!bootchart_file)
return log_oom();
IOVEC_SET_STRING(iovec[j++], bootchart_file);
IOVEC_SET_STRING(iovec[j++], "MESSAGE_ID=9f26aa562cf440c2b16c773d0479b518");
IOVEC_SET_STRING(iovec[j++], "PRIORITY=7");
bootchart_message = strjoin("MESSAGE=Bootchart created: ", file, NULL);
if (bootchart_message)
IOVEC_SET_STRING(iovec[j++], bootchart_message);
if (!bootchart_message)
return log_oom();
p = malloc(9 + BOOTCHART_MAX);
if (!p) {
log_oom();
return;
}
IOVEC_SET_STRING(iovec[j++], bootchart_message);
p = malloc(10 + BOOTCHART_MAX);
if (!p)
return log_oom();
memcpy(p, "BOOTCHART=", 10);
fd = open(file, O_RDONLY|O_CLOEXEC);
if (fd < 0) {
log_error_errno(errno, "Failed to open bootchart data \"%s\": %m", file);
return;
}
if (fd < 0)
return log_error_errno(errno, "Failed to open bootchart data \"%s\": %m", file);
n = loop_read(fd, p + 10, BOOTCHART_MAX, false);
if (n < 0) {
log_error_errno(n, "Failed to read bootchart data: %m");
return;
}
if (n < 0)
return log_error_errno(n, "Failed to read bootchart data: %m");
iovec[j].iov_base = p;
iovec[j].iov_len = 10 + n;
@@ -298,32 +294,33 @@ static void do_journal_append(char *file) {
r = sd_journal_sendv(iovec, j);
if (r < 0)
log_error_errno(r, "Failed to send bootchart: %m");
return 0;
}
int main(int argc, char *argv[]) {
_cleanup_free_ char *build = NULL;
_cleanup_close_ int sysfd = -1;
static struct list_sample_data *sampledata;
_cleanup_closedir_ DIR *proc = NULL;
_cleanup_free_ char *build = NULL;
_cleanup_fclose_ FILE *of = NULL;
_cleanup_close_ int sysfd = -1;
struct ps_struct *ps_first;
double graph_start;
double log_start;
double interval;
struct ps_struct *ps_first;
struct sigaction sig = {
.sa_handler = signal_handler,
};
struct ps_struct *ps;
char output_file[PATH_MAX];
char datestr[200];
time_t t = 0;
int r;
int pscount = 0;
int n_cpus = 0;
int overrun = 0;
int samples;
time_t t = 0;
int r, samples;
struct ps_struct *ps;
struct rlimit rlim;
struct list_sample_data *head;
static struct list_sample_data *sampledata;
struct sigaction sig = {
.sa_handler = signal_handler,
};
parse_conf();
@@ -464,12 +461,12 @@ int main(int argc, char *argv[]) {
ps = ps_first;
while (ps->next_ps) {
ps = ps->next_ps;
if (ps->schedstat >= 0)
close(ps->schedstat);
if (ps->sched >= 0)
close(ps->sched);
if (ps->smaps)
ps->schedstat = safe_close(ps->schedstat);
ps->sched = safe_close(ps->sched);
if (ps->smaps) {
fclose(ps->smaps);
ps->smaps = NULL;
}
}
if (!of) {
@@ -486,17 +483,9 @@ int main(int argc, char *argv[]) {
return EXIT_FAILURE;
}
r = svg_do(of,
strna(build),
head,
ps_first,
samples,
pscount,
n_cpus,
graph_start,
log_start,
interval,
overrun);
r = svg_do(of, strna(build), head, ps_first,
samples, pscount, n_cpus, graph_start,
log_start, interval, overrun);
if (r < 0) {
log_error_errno(r, "Error generating svg file: %m\n");
@@ -505,7 +494,9 @@ int main(int argc, char *argv[]) {
log_info("systemd-bootchart wrote %s\n", output_file);
do_journal_append(output_file);
r = do_journal_append(output_file);
if (r < 0)
return EXIT_FAILURE;
/* nitpic cleanups */
ps = ps_first->next_ps;
@@ -525,6 +516,7 @@ int main(int argc, char *argv[]) {
free(old->sample);
free(old);
}
free(ps->cgroup);
free(ps->sample);
free(ps);
@@ -536,6 +528,7 @@ int main(int argc, char *argv[]) {
free(old_sampledata);
}
free(sampledata);
/* don't complain when overrun once, happens most commonly on 1st sample */
if (overrun > 1)
log_warning("systemd-boochart: sample time overrun %i times\n", overrun);
+44 -44
View File
@@ -63,16 +63,17 @@ static char *bufgetline(char *buf) {
c = strchr(buf, '\n');
if (c)
c++;
return c;
}
static int pid_cmdline_strscpy(int procfd, char *buffer, size_t buf_len, int pid) {
char filename[PATH_MAX];
_cleanup_close_ int fd=-1;
_cleanup_close_ int fd = -1;
ssize_t n;
sprintf(filename, "%d/cmdline", pid);
fd = openat(procfd, filename, O_RDONLY);
fd = openat(procfd, filename, O_RDONLY|O_CLOEXEC);
if (fd < 0)
return -errno;
@@ -84,6 +85,7 @@ static int pid_cmdline_strscpy(int procfd, char *buffer, size_t buf_len, int pid
buffer[i] = ' ';
buffer[n] = '\0';
}
return 0;
}
@@ -122,8 +124,8 @@ int log_sample(DIR *proc,
if (vmstat < 0) {
/* block stuff */
vmstat = openat(procfd, "vmstat", O_RDONLY);
if (vmstat == -1)
vmstat = openat(procfd, "vmstat", O_RDONLY|O_CLOEXEC);
if (vmstat < 0)
return log_error_errno(errno, "Failed to open /proc/vmstat: %m");
}
@@ -134,6 +136,7 @@ int log_sample(DIR *proc,
return -errno;
return -ENODATA;
}
buf[n] = '\0';
m = buf;
@@ -154,8 +157,8 @@ vmstat_next:
if (schedstat < 0) {
/* overall CPU utilization */
schedstat = openat(procfd, "schedstat", O_RDONLY);
if (schedstat == -1)
schedstat = openat(procfd, "schedstat", O_RDONLY|O_CLOEXEC);
if (schedstat < 0)
return log_error_errno(errno, "Failed to open /proc/schedstat (requires CONFIG_SCHEDSTATS=y in kernel config): %m");
}
@@ -166,6 +169,7 @@ vmstat_next:
return -errno;
return -ENODATA;
}
buf[n] = '\0';
m = buf;
@@ -194,15 +198,14 @@ schedstat_next:
if (arg_entropy) {
if (e_fd < 0) {
e_fd = openat(procfd, "sys/kernel/random/entropy_avail", O_RDONLY);
if (e_fd == -1)
e_fd = openat(procfd, "sys/kernel/random/entropy_avail", O_RDONLY|O_CLOEXEC);
if (e_fd < 0)
return log_error_errno(errno, "Failed to open /proc/sys/kernel/random/entropy_avail: %m");
}
n = pread(e_fd, buf, sizeof(buf) - 1, 0);
if (n <= 0) {
close(e_fd);
e_fd = -1;
e_fd = safe_close(e_fd);
} else {
buf[n] = '\0';
sampledata->entropy_avail = atoi(buf);
@@ -261,15 +264,14 @@ schedstat_next:
/* get name, start time */
if (ps->sched < 0) {
sprintf(filename, "%d/sched", pid);
ps->sched = openat(procfd, filename, O_RDONLY);
if (ps->sched == -1)
ps->sched = openat(procfd, filename, O_RDONLY|O_CLOEXEC);
if (ps->sched < 0)
continue;
}
s = pread(ps->sched, buf, sizeof(buf) - 1, 0);
if (s <= 0) {
close(ps->sched);
ps->sched = -1;
ps->sched = safe_close(ps->sched);
continue;
}
buf[s] = '\0';
@@ -308,17 +310,19 @@ schedstat_next:
/* ppid */
sprintf(filename, "%d/stat", pid);
fd = openat(procfd, filename, O_RDONLY);
if (fd == -1)
fd = openat(procfd, filename, O_RDONLY|O_CLOEXEC);
if (fd < 0)
continue;
st = fdopen(fd, "r");
st = fdopen(fd, "re");
if (!st) {
close(fd);
continue;
}
if (!fscanf(st, "%*s %*s %*s %i", &p)) {
if (!fscanf(st, "%*s %*s %*s %i", &p))
continue;
}
ps->ppid = p;
/*
@@ -355,6 +359,7 @@ schedstat_next:
children = parent->children;
while (children->next)
children = children->next;
children->next = ps;
}
}
@@ -367,23 +372,20 @@ schedstat_next:
/* rt, wt */
if (ps->schedstat < 0) {
sprintf(filename, "%d/schedstat", pid);
ps->schedstat = openat(procfd, filename, O_RDONLY);
if (ps->schedstat == -1)
ps->schedstat = openat(procfd, filename, O_RDONLY|O_CLOEXEC);
if (ps->schedstat < 0)
continue;
}
s = pread(ps->schedstat, buf, sizeof(buf) - 1, 0);
if (s <= 0) {
/* clean up our file descriptors - assume that the process exited */
close(ps->schedstat);
ps->schedstat = -1;
if (ps->sched) {
close(ps->sched);
ps->sched = -1;
}
//if (ps->smaps)
// fclose(ps->smaps);
ps->sched = safe_close(ps->sched);
continue;
}
buf[s] = '\0';
if (!sscanf(buf, "%s %s %*s", rt, wt))
@@ -400,9 +402,9 @@ schedstat_next:
ps->sample->waittime = atoll(wt);
ps->sample->sampledata = sampledata;
ps->sample->ps_new = ps;
if (ps_prev) {
if (ps_prev)
ps_prev->cross = ps->sample;
}
ps_prev = ps->sample;
ps->total = (ps->last->runtime - ps->first->runtime)
/ 1000000000.0;
@@ -413,19 +415,19 @@ schedstat_next:
/* Pss */
if (!ps->smaps) {
sprintf(filename, "%d/smaps", pid);
fd = openat(procfd, filename, O_RDONLY);
if (fd == -1)
fd = openat(procfd, filename, O_RDONLY|O_CLOEXEC);
if (fd < 0)
continue;
ps->smaps = fdopen(fd, "r");
ps->smaps = fdopen(fd, "re");
if (!ps->smaps) {
close(fd);
continue;
}
setvbuf(ps->smaps, smaps_buf, _IOFBF, sizeof(smaps_buf));
}
else {
} else {
rewind(ps->smaps);
}
/* test to see if we need to skip another field */
if (skip == 0) {
if (fgets(buf, sizeof(buf), ps->smaps) == NULL) {
@@ -442,6 +444,7 @@ schedstat_next:
}
rewind(ps->smaps);
}
while (1) {
int pss_kb;
@@ -462,6 +465,7 @@ schedstat_next:
break;
}
}
if (ps->sample->pss > ps->pss_max)
ps->pss_max = ps->sample->pss;
@@ -474,23 +478,19 @@ catch_rename:
/* get name, start time */
if (!ps->sched) {
sprintf(filename, "%d/sched", pid);
ps->sched = openat(procfd, filename, O_RDONLY);
if (ps->sched == -1)
ps->sched = openat(procfd, filename, O_RDONLY|O_CLOEXEC);
if (ps->sched < 0)
continue;
}
s = pread(ps->sched, buf, sizeof(buf) - 1, 0);
if (s <= 0) {
/* clean up file descriptors */
close(ps->sched);
ps->sched = -1;
if (ps->schedstat) {
close(ps->schedstat);
ps->schedstat = -1;
}
//if (ps->smaps)
// fclose(ps->smaps);
ps->sched = safe_close(ps->sched);
ps->schedstat = safe_close(ps->schedstat);
continue;
}
buf[s] = '\0';
if (!sscanf(buf, "%s %*s %*s", key))
+70 -60
View File
@@ -191,10 +191,8 @@ static int svg_title(FILE *of, const char *build, int pscount, double log_start,
/* CPU type */
r = read_full_file("/proc/cpuinfo", &buf, NULL);
if (r < 0) {
log_error_errno(r, "Unable to read cpuinfo: %m\n");
return r;
}
if (r < 0)
return log_error_errno(r, "Unable to read cpuinfo: %m\n");
cpu = strstr(buf, "model name");
if (!cpu) {
@@ -364,11 +362,11 @@ static void svg_pss_graph(FILE *of,
}
fprintf(of, " <rect class=\"clrw\" style=\"fill: %s\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
"rgb(64,64,64)",
time_to_graph(prev_sampledata->sampletime - graph_start),
kb_to_graph(1000000.0 - top),
time_to_graph(sampledata->sampletime - prev_sampledata->sampletime),
kb_to_graph(top - bottom));
"rgb(64,64,64)",
time_to_graph(prev_sampledata->sampletime - graph_start),
kb_to_graph(1000000.0 - top),
time_to_graph(sampledata->sampletime - prev_sampledata->sampletime),
kb_to_graph(top - bottom));
bottom = top;
/* now plot the ones that are of significant size */
@@ -384,34 +382,36 @@ static void svg_pss_graph(FILE *of,
break;
}
/* don't draw anything smaller than 2mb */
if (ps->sample->sampledata == sampledata) {
if (ps->sample->pss > (100 * arg_scale_y)) {
if (ps->sample->sampledata != sampledata)
continue;
if (ps->sample->pss > (100 * arg_scale_y)) {
top = bottom + ps->sample->pss;
fprintf(of, " <rect class=\"clrw\" style=\"fill: %s\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
colorwheel[ps->pid % 12],
time_to_graph(prev_sampledata->sampletime - graph_start),
kb_to_graph(1000000.0 - top),
time_to_graph(sampledata->sampletime - prev_sampledata->sampletime),
kb_to_graph(top - bottom));
colorwheel[ps->pid % 12],
time_to_graph(prev_sampledata->sampletime - graph_start),
kb_to_graph(1000000.0 - top),
time_to_graph(sampledata->sampletime - prev_sampledata->sampletime),
kb_to_graph(top - bottom));
bottom = top;
}
break;
}
break;
}
while ((cross_place = ps->sample->cross)) {
ps = ps->sample->cross->ps_new;
ps->sample = cross_place;
if (ps->sample->pss > (100 * arg_scale_y)) {
top = bottom + ps->sample->pss;
fprintf(of, " <rect class=\"clrw\" style=\"fill: %s\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
colorwheel[ps->pid % 12],
time_to_graph(prev_sampledata->sampletime - graph_start),
kb_to_graph(1000000.0 - top),
time_to_graph(sampledata->sampletime - prev_sampledata->sampletime),
kb_to_graph(top - bottom));
colorwheel[ps->pid % 12],
time_to_graph(prev_sampledata->sampletime - graph_start),
kb_to_graph(1000000.0 - top),
time_to_graph(sampledata->sampletime - prev_sampledata->sampletime),
kb_to_graph(top - bottom));
bottom = top;
}
}
prev_sampledata = sampledata;
i++;
}
@@ -430,18 +430,22 @@ static void svg_pss_graph(FILE *of,
ps = ps->next_ps;
if (!ps)
continue;
ps->sample = ps->first;
while (ps->sample->next) {
ps->sample = ps->sample->next;
if (ps->sample->sampledata == sampledata)
break;
}
if (ps->sample->sampledata == sampledata) {
if (ps->sample->pss <= (100 * arg_scale_y))
top += ps->sample->pss;
break;
}
}
while ((cross_place = ps->sample->cross)) {
ps = ps->sample->cross->ps_new;
ps->sample = cross_place;
@@ -471,10 +475,9 @@ static void svg_pss_graph(FILE *of,
/* draw a label with the process / PID */
if ((i == 1) || (prev_sample->pss <= (100 * arg_scale_y)))
fprintf(of, " <text x=\"%.03f\" y=\"%.03f\"><![CDATA[%s]]> [%i]</text>\n",
time_to_graph(sampledata->sampletime - graph_start),
kb_to_graph(1000000.0 - bottom - ((top - bottom) / 2)),
ps->name,
ps->pid);
time_to_graph(sampledata->sampletime - graph_start),
kb_to_graph(1000000.0 - bottom - ((top - bottom) / 2)),
ps->name, ps->pid);
bottom = top;
}
break;
@@ -495,6 +498,7 @@ static void svg_pss_graph(FILE *of,
bottom = top;
}
}
i++;
}
@@ -518,6 +522,7 @@ static void svg_pss_graph(FILE *of,
ps->sample = ps->sample->next;
fprintf(of, "%d," , ps->sample->pss);
}
fprintf(of, " -->\n");
}
@@ -569,21 +574,20 @@ static void svg_io_bi_bar(FILE *of,
start_sampledata = sampledata;
stop_sampledata = sampledata;
for (k=0;(k<((range/2)-1))&&(start_sampledata->link_next);k++)
for (k = 0; k < ((range/2) - 1) && start_sampledata->link_next; k++)
start_sampledata = start_sampledata->link_next;
for (k=0;(k<(range/2))&&(stop_sampledata->link_prev);k++)
for (k = 0; k < (range/2) && stop_sampledata->link_prev; k++)
stop_sampledata = stop_sampledata->link_prev;
tot = (double)(stop_sampledata->blockstat.bi - start_sampledata->blockstat.bi)
/ diff;
tot = (double)(stop_sampledata->blockstat.bi - start_sampledata->blockstat.bi) / diff;
if (tot > max) {
max = tot;
max_here = i;
}
tot = (double)(stop_sampledata->blockstat.bo - start_sampledata->blockstat.bo)
/ diff;
tot = (double)(stop_sampledata->blockstat.bo - start_sampledata->blockstat.bo) / diff;
if (tot > max)
max = tot;
@@ -608,13 +612,13 @@ static void svg_io_bi_bar(FILE *of,
start_sampledata = sampledata;
stop_sampledata = sampledata;
for (k=0;(k<((range/2)-1))&&(start_sampledata->link_next);k++)
for (k = 0; k < ((range/2)-1) && start_sampledata->link_next; k++)
start_sampledata = start_sampledata->link_next;
for (k=0;(k<(range/2))&&(stop_sampledata->link_prev);k++)
for (k = 0; k < (range/2) && stop_sampledata->link_prev; k++)
stop_sampledata = stop_sampledata->link_prev;
tot = (double)(stop_sampledata->blockstat.bi - start_sampledata->blockstat.bi)
/ diff;
tot = (double)(stop_sampledata->blockstat.bi - start_sampledata->blockstat.bi) / diff;
if (max > 0)
pbi = tot / max;
@@ -633,6 +637,7 @@ static void svg_io_bi_bar(FILE *of,
((arg_scale_y * 5) - (pbi * (arg_scale_y * 5))) + 15,
max / 1024.0 / (interval / 1000000000.0));
}
i++;
prev_sampledata = sampledata;
}
@@ -683,33 +688,32 @@ static void svg_io_bo_bar(FILE *of,
start_sampledata = sampledata;
stop_sampledata = sampledata;
for (k=0;(k<((range/2)-1))&&(start_sampledata->link_next);k++)
for (k = 0; k < (range/2) - 1 && start_sampledata->link_next; k++)
start_sampledata = start_sampledata->link_next;
for (k=0;(k<(range/2))&&(stop_sampledata->link_prev);k++)
for (k = 0; k < (range/2) && stop_sampledata->link_prev; k++)
stop_sampledata = stop_sampledata->link_prev;
tot = (double)(stop_sampledata->blockstat.bi - start_sampledata->blockstat.bi)
/ diff;
tot = (double)(stop_sampledata->blockstat.bi - start_sampledata->blockstat.bi) / diff;
if (tot > max)
max = tot;
tot = (double)(stop_sampledata->blockstat.bo - start_sampledata->blockstat.bo)
/ diff;
tot = (double)(stop_sampledata->blockstat.bo - start_sampledata->blockstat.bo) / diff;
if (tot > max) {
max = tot;
max_here = i;
}
i++;
}
/* plot bo */
prev_sampledata = head;
i=1;
i = 1;
LIST_FOREACH_BEFORE(link, sampledata, head) {
int start;
int stop;
int diff;
double tot;
double pbo;
int start, stop, diff;
double tot, pbo;
pbo = 0;
@@ -720,9 +724,10 @@ static void svg_io_bo_bar(FILE *of,
start_sampledata = sampledata;
stop_sampledata = sampledata;
for (k=0;(k<((range/2)-1))&&(start_sampledata->link_next);k++)
for (k = 0; k < ((range/2)-1) && start_sampledata->link_next; k++)
start_sampledata = start_sampledata->link_next;
for (k=0;(k<(range/2))&&(stop_sampledata->link_prev);k++)
for (k = 0; k < (range/2) && stop_sampledata->link_prev; k++)
stop_sampledata = stop_sampledata->link_prev;
tot = (double)(stop_sampledata->blockstat.bo - start_sampledata->blockstat.bo)
@@ -745,6 +750,7 @@ static void svg_io_bo_bar(FILE *of,
((arg_scale_y * 5) - (pbo * (arg_scale_y * 5))),
max / 1024.0 / (interval / 1000000000.0));
}
i++;
prev_sampledata = sampledata;
}
@@ -758,6 +764,7 @@ static void svg_cpu_bar(FILE *of, struct list_sample_data *head, int n_cpus, int
fprintf(of, "<text class=\"t2\" x=\"5\" y=\"-15\">CPU[overall] utilization</text>\n");
else
fprintf(of, "<text class=\"t2\" x=\"5\" y=\"-15\">CPU[%d] utilization</text>\n", cpu_num);
/* surrounding box */
svg_graph_box(of, head, 5, graph_start);
@@ -787,13 +794,13 @@ static void svg_cpu_bar(FILE *of, struct list_sample_data *head, int n_cpus, int
if (ptrt > 1.0)
ptrt = 1.0;
if (ptrt > 0.001) {
if (ptrt > 0.001)
fprintf(of, "<rect class=\"cpu\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
time_to_graph(prev_sampledata->sampletime - graph_start),
(arg_scale_y * 5) - (ptrt * (arg_scale_y * 5)),
time_to_graph(sampledata->sampletime - prev_sampledata->sampletime),
ptrt * (arg_scale_y * 5));
}
prev_sampledata = sampledata;
}
}
@@ -836,13 +843,13 @@ static void svg_wait_bar(FILE *of, struct list_sample_data *head, int n_cpus, in
if (ptwt > 1.0)
ptwt = 1.0;
if (ptwt > 0.001) {
if (ptwt > 0.001)
fprintf(of, "<rect class=\"wait\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
time_to_graph(prev_sampledata->sampletime - graph_start),
((arg_scale_y * 5) - (ptwt * (arg_scale_y * 5))),
time_to_graph(sampledata->sampletime - prev_sampledata->sampletime),
ptwt * (arg_scale_y * 5));
}
prev_sampledata = sampledata;
}
}
@@ -885,9 +892,9 @@ static struct ps_struct *get_next_ps(struct ps_struct *ps, struct ps_struct *ps_
/* go back for parent siblings */
while (1) {
if (ps->parent)
if (ps->parent->next)
return ps->parent->next;
if (ps->parent && ps->parent->next)
return ps->parent->next;
ps = ps->parent;
if (!ps)
return ps;
@@ -1174,13 +1181,14 @@ static void svg_ps_bars(FILE *of,
ps->sample = ps->sample->next;
sample_hz = ps->sample;
for (ii=0;((ii<(int)arg_hz/2)&&(sample_hz->next));ii++)
for (ii = 0; (ii < (int)arg_hz/2) && sample_hz->next; ii++)
sample_hz = sample_hz->next;
/* subtract bootchart cpu utilization from total */
crt = 0.0;
for (c = 0; c < n_cpus; c++)
crt += sample_hz->sampledata->runtime[c] - ps->sample->sampledata->runtime[c];
brt = sample_hz->runtime - ps->sample->runtime;
/*
* our definition of "idle":
@@ -1202,6 +1210,7 @@ static void svg_ps_bars(FILE *of,
idletime);
break;
}
i++;
}
}
@@ -1253,6 +1262,7 @@ static void svg_top_ten_pss(FILE *of, struct ps_struct *ps_first) {
for (n = 0; n < 10; n++) {
if (ps->pss_max <= top[n]->pss_max)
continue;
/* cascade insert */
for (m = 9; m > n; m--)
top[m] = top[m-1];
@@ -1290,7 +1300,7 @@ int svg_do(FILE *of,
/* count initcall thread count first */
svg_do_initcall(of, head, 1, graph_start);
ksize = (kcount ? ps_to_graph(kcount) + (arg_scale_y * 2) : 0);
ksize = kcount ? ps_to_graph(kcount) + (arg_scale_y * 2) : 0;
/* then count processes */
while ((ps = get_next_ps(ps, ps_first))) {