summaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-script.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-script.c')
-rw-r--r--tools/perf/builtin-script.c23
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
107struct output_option { 108struct 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
144enum { 146enum {
@@ -1268,6 +1270,20 @@ static int perf_sample__fprintf_insn(struct perf_sample *sample,
1268 return printed; 1270 return printed;
1269} 1271}
1270 1272
1273static 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
1271static int perf_sample__fprintf_bts(struct perf_sample *sample, 1287static 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"),