diff options
Diffstat (limited to 'tools/perf/builtin-script.c')
-rw-r--r-- | tools/perf/builtin-script.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 3a48a2627670..80c722ade852 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c | |||
@@ -102,6 +102,7 @@ enum perf_output_field { | |||
102 | PERF_OUTPUT_METRIC = 1U << 28, | 102 | PERF_OUTPUT_METRIC = 1U << 28, |
103 | PERF_OUTPUT_MISC = 1U << 29, | 103 | PERF_OUTPUT_MISC = 1U << 29, |
104 | PERF_OUTPUT_SRCCODE = 1U << 30, | 104 | PERF_OUTPUT_SRCCODE = 1U << 30, |
105 | PERF_OUTPUT_IPC = 1U << 31, | ||
105 | }; | 106 | }; |
106 | 107 | ||
107 | struct output_option { | 108 | struct output_option { |
@@ -139,6 +140,7 @@ struct output_option { | |||
139 | {.str = "metric", .field = PERF_OUTPUT_METRIC}, | 140 | {.str = "metric", .field = PERF_OUTPUT_METRIC}, |
140 | {.str = "misc", .field = PERF_OUTPUT_MISC}, | 141 | {.str = "misc", .field = PERF_OUTPUT_MISC}, |
141 | {.str = "srccode", .field = PERF_OUTPUT_SRCCODE}, | 142 | {.str = "srccode", .field = PERF_OUTPUT_SRCCODE}, |
143 | {.str = "ipc", .field = PERF_OUTPUT_IPC}, | ||
142 | }; | 144 | }; |
143 | 145 | ||
144 | enum { | 146 | enum { |
@@ -1268,6 +1270,20 @@ static int perf_sample__fprintf_insn(struct perf_sample *sample, | |||
1268 | return printed; | 1270 | return printed; |
1269 | } | 1271 | } |
1270 | 1272 | ||
1273 | static int perf_sample__fprintf_ipc(struct perf_sample *sample, | ||
1274 | struct perf_event_attr *attr, FILE *fp) | ||
1275 | { | ||
1276 | unsigned int ipc; | ||
1277 | |||
1278 | if (!PRINT_FIELD(IPC) || !sample->cyc_cnt || !sample->insn_cnt) | ||
1279 | return 0; | ||
1280 | |||
1281 | ipc = (sample->insn_cnt * 100) / sample->cyc_cnt; | ||
1282 | |||
1283 | return fprintf(fp, " \t IPC: %u.%02u (%" PRIu64 "/%" PRIu64 ") ", | ||
1284 | ipc / 100, ipc % 100, sample->insn_cnt, sample->cyc_cnt); | ||
1285 | } | ||
1286 | |||
1271 | static int perf_sample__fprintf_bts(struct perf_sample *sample, | 1287 | static int perf_sample__fprintf_bts(struct perf_sample *sample, |
1272 | struct perf_evsel *evsel, | 1288 | struct perf_evsel *evsel, |
1273 | struct thread *thread, | 1289 | struct thread *thread, |
@@ -1312,6 +1328,8 @@ static int perf_sample__fprintf_bts(struct perf_sample *sample, | |||
1312 | printed += perf_sample__fprintf_addr(sample, thread, attr, fp); | 1328 | printed += perf_sample__fprintf_addr(sample, thread, attr, fp); |
1313 | } | 1329 | } |
1314 | 1330 | ||
1331 | printed += perf_sample__fprintf_ipc(sample, attr, fp); | ||
1332 | |||
1315 | if (print_srcline_last) | 1333 | if (print_srcline_last) |
1316 | printed += map__fprintf_srcline(al->map, al->addr, "\n ", fp); | 1334 | printed += map__fprintf_srcline(al->map, al->addr, "\n ", fp); |
1317 | 1335 | ||
@@ -1859,6 +1877,9 @@ static void process_event(struct perf_script *script, | |||
1859 | 1877 | ||
1860 | if (PRINT_FIELD(PHYS_ADDR)) | 1878 | if (PRINT_FIELD(PHYS_ADDR)) |
1861 | fprintf(fp, "%16" PRIx64, sample->phys_addr); | 1879 | fprintf(fp, "%16" PRIx64, sample->phys_addr); |
1880 | |||
1881 | perf_sample__fprintf_ipc(sample, attr, fp); | ||
1882 | |||
1862 | fprintf(fp, "\n"); | 1883 | fprintf(fp, "\n"); |
1863 | 1884 | ||
1864 | if (PRINT_FIELD(SRCCODE)) { | 1885 | if (PRINT_FIELD(SRCCODE)) { |
@@ -3433,7 +3454,7 @@ int cmd_script(int argc, const char **argv) | |||
3433 | "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso," | 3454 | "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso," |
3434 | "addr,symoff,srcline,period,iregs,uregs,brstack," | 3455 | "addr,symoff,srcline,period,iregs,uregs,brstack," |
3435 | "brstacksym,flags,bpf-output,brstackinsn,brstackoff," | 3456 | "brstacksym,flags,bpf-output,brstackinsn,brstackoff," |
3436 | "callindent,insn,insnlen,synth,phys_addr,metric,misc", | 3457 | "callindent,insn,insnlen,synth,phys_addr,metric,misc,ipc", |
3437 | parse_output_fields), | 3458 | parse_output_fields), |
3438 | OPT_BOOLEAN('a', "all-cpus", &system_wide, | 3459 | OPT_BOOLEAN('a', "all-cpus", &system_wide, |
3439 | "system-wide collection from all CPUs"), | 3460 | "system-wide collection from all CPUs"), |