aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-stat.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-stat.c')
-rw-r--r--tools/perf/builtin-stat.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 16af2d82e858..3db31e7bf173 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -69,7 +69,8 @@ static int run_idx = 0;
69static int run_count = 1; 69static int run_count = 1;
70static int inherit = 1; 70static int inherit = 1;
71static int scale = 1; 71static int scale = 1;
72static int target_pid = -1; 72static pid_t target_pid = -1;
73static pid_t child_pid = -1;
73static int null_run = 0; 74static int null_run = 0;
74 75
75static int fd[MAX_NR_CPUS][MAX_COUNTERS]; 76static int fd[MAX_NR_CPUS][MAX_COUNTERS];
@@ -285,6 +286,8 @@ static int run_perf_stat(int argc __used, const char **argv)
285 exit(-1); 286 exit(-1);
286 } 287 }
287 288
289 child_pid = pid;
290
288 /* 291 /*
289 * Wait for the child to be ready to exec. 292 * Wait for the child to be ready to exec.
290 */ 293 */
@@ -338,14 +341,24 @@ static void nsec_printout(int counter, double avg)
338 341
339static void abs_printout(int counter, double avg) 342static void abs_printout(int counter, double avg)
340{ 343{
344 double total, ratio = 0.0;
345
341 fprintf(stderr, " %14.0f %-24s", avg, event_name(counter)); 346 fprintf(stderr, " %14.0f %-24s", avg, event_name(counter));
342 347
343 if (MATCH_EVENT(HARDWARE, HW_INSTRUCTIONS, counter)) { 348 if (MATCH_EVENT(HARDWARE, HW_INSTRUCTIONS, counter)) {
344 fprintf(stderr, " # %10.3f IPC ", 349 total = avg_stats(&runtime_cycles_stats);
345 avg / avg_stats(&runtime_cycles_stats)); 350
351 if (total)
352 ratio = avg / total;
353
354 fprintf(stderr, " # %10.3f IPC ", ratio);
346 } else { 355 } else {
347 fprintf(stderr, " # %10.3f M/sec", 356 total = avg_stats(&runtime_nsecs_stats);
348 1000.0 * avg / avg_stats(&runtime_nsecs_stats)); 357
358 if (total)
359 ratio = 1000.0 * avg / total;
360
361 fprintf(stderr, " # %10.3f M/sec", ratio);
349 } 362 }
350} 363}
351 364
@@ -423,6 +436,9 @@ static void skip_signal(int signo)
423 436
424static void sig_atexit(void) 437static void sig_atexit(void)
425{ 438{
439 if (child_pid != -1)
440 kill(child_pid, SIGTERM);
441
426 if (signr == -1) 442 if (signr == -1)
427 return; 443 return;
428 444