diff options
Diffstat (limited to 'tools/perf/util/callchain.c')
| -rw-r--r-- | tools/perf/util/callchain.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c index 32ef7bdca1cf..dc2212e12184 100644 --- a/tools/perf/util/callchain.c +++ b/tools/perf/util/callchain.c | |||
| @@ -766,6 +766,7 @@ static enum match_result match_chain(struct callchain_cursor_node *node, | |||
| 766 | cnode->cycles_count += node->branch_flags.cycles; | 766 | cnode->cycles_count += node->branch_flags.cycles; |
| 767 | cnode->iter_count += node->nr_loop_iter; | 767 | cnode->iter_count += node->nr_loop_iter; |
| 768 | cnode->iter_cycles += node->iter_cycles; | 768 | cnode->iter_cycles += node->iter_cycles; |
| 769 | cnode->from_count++; | ||
| 769 | } | 770 | } |
| 770 | } | 771 | } |
| 771 | 772 | ||
| @@ -1345,10 +1346,10 @@ static int branch_to_str(char *bf, int bfsize, | |||
| 1345 | static int branch_from_str(char *bf, int bfsize, | 1346 | static int branch_from_str(char *bf, int bfsize, |
| 1346 | u64 branch_count, | 1347 | u64 branch_count, |
| 1347 | u64 cycles_count, u64 iter_count, | 1348 | u64 cycles_count, u64 iter_count, |
| 1348 | u64 iter_cycles) | 1349 | u64 iter_cycles, u64 from_count) |
| 1349 | { | 1350 | { |
| 1350 | int printed = 0, i = 0; | 1351 | int printed = 0, i = 0; |
| 1351 | u64 cycles; | 1352 | u64 cycles, v = 0; |
| 1352 | 1353 | ||
| 1353 | cycles = cycles_count / branch_count; | 1354 | cycles = cycles_count / branch_count; |
| 1354 | if (cycles) { | 1355 | if (cycles) { |
| @@ -1357,14 +1358,16 @@ static int branch_from_str(char *bf, int bfsize, | |||
| 1357 | bf + printed, bfsize - printed); | 1358 | bf + printed, bfsize - printed); |
| 1358 | } | 1359 | } |
| 1359 | 1360 | ||
| 1360 | if (iter_count) { | 1361 | if (iter_count && from_count) { |
| 1361 | printed += count_pri64_printf(i++, "iter", | 1362 | v = iter_count / from_count; |
| 1362 | iter_count, | 1363 | if (v) { |
| 1363 | bf + printed, bfsize - printed); | 1364 | printed += count_pri64_printf(i++, "iter", |
| 1365 | v, bf + printed, bfsize - printed); | ||
| 1364 | 1366 | ||
| 1365 | printed += count_pri64_printf(i++, "avg_cycles", | 1367 | printed += count_pri64_printf(i++, "avg_cycles", |
| 1366 | iter_cycles / iter_count, | 1368 | iter_cycles / iter_count, |
| 1367 | bf + printed, bfsize - printed); | 1369 | bf + printed, bfsize - printed); |
| 1370 | } | ||
| 1368 | } | 1371 | } |
| 1369 | 1372 | ||
| 1370 | if (i) | 1373 | if (i) |
| @@ -1377,6 +1380,7 @@ static int counts_str_build(char *bf, int bfsize, | |||
| 1377 | u64 branch_count, u64 predicted_count, | 1380 | u64 branch_count, u64 predicted_count, |
| 1378 | u64 abort_count, u64 cycles_count, | 1381 | u64 abort_count, u64 cycles_count, |
| 1379 | u64 iter_count, u64 iter_cycles, | 1382 | u64 iter_count, u64 iter_cycles, |
| 1383 | u64 from_count, | ||
| 1380 | struct branch_type_stat *brtype_stat) | 1384 | struct branch_type_stat *brtype_stat) |
| 1381 | { | 1385 | { |
| 1382 | int printed; | 1386 | int printed; |
| @@ -1389,7 +1393,8 @@ static int counts_str_build(char *bf, int bfsize, | |||
| 1389 | predicted_count, abort_count, brtype_stat); | 1393 | predicted_count, abort_count, brtype_stat); |
| 1390 | } else { | 1394 | } else { |
| 1391 | printed = branch_from_str(bf, bfsize, branch_count, | 1395 | printed = branch_from_str(bf, bfsize, branch_count, |
| 1392 | cycles_count, iter_count, iter_cycles); | 1396 | cycles_count, iter_count, iter_cycles, |
| 1397 | from_count); | ||
| 1393 | } | 1398 | } |
| 1394 | 1399 | ||
| 1395 | if (!printed) | 1400 | if (!printed) |
| @@ -1402,13 +1407,14 @@ static int callchain_counts_printf(FILE *fp, char *bf, int bfsize, | |||
| 1402 | u64 branch_count, u64 predicted_count, | 1407 | u64 branch_count, u64 predicted_count, |
| 1403 | u64 abort_count, u64 cycles_count, | 1408 | u64 abort_count, u64 cycles_count, |
| 1404 | u64 iter_count, u64 iter_cycles, | 1409 | u64 iter_count, u64 iter_cycles, |
| 1410 | u64 from_count, | ||
| 1405 | struct branch_type_stat *brtype_stat) | 1411 | struct branch_type_stat *brtype_stat) |
| 1406 | { | 1412 | { |
| 1407 | char str[256]; | 1413 | char str[256]; |
| 1408 | 1414 | ||
| 1409 | counts_str_build(str, sizeof(str), branch_count, | 1415 | counts_str_build(str, sizeof(str), branch_count, |
| 1410 | predicted_count, abort_count, cycles_count, | 1416 | predicted_count, abort_count, cycles_count, |
| 1411 | iter_count, iter_cycles, brtype_stat); | 1417 | iter_count, iter_cycles, from_count, brtype_stat); |
| 1412 | 1418 | ||
| 1413 | if (fp) | 1419 | if (fp) |
| 1414 | return fprintf(fp, "%s", str); | 1420 | return fprintf(fp, "%s", str); |
| @@ -1422,6 +1428,7 @@ int callchain_list_counts__printf_value(struct callchain_list *clist, | |||
| 1422 | u64 branch_count, predicted_count; | 1428 | u64 branch_count, predicted_count; |
| 1423 | u64 abort_count, cycles_count; | 1429 | u64 abort_count, cycles_count; |
| 1424 | u64 iter_count, iter_cycles; | 1430 | u64 iter_count, iter_cycles; |
| 1431 | u64 from_count; | ||
| 1425 | 1432 | ||
| 1426 | branch_count = clist->branch_count; | 1433 | branch_count = clist->branch_count; |
| 1427 | predicted_count = clist->predicted_count; | 1434 | predicted_count = clist->predicted_count; |
| @@ -1429,11 +1436,12 @@ int callchain_list_counts__printf_value(struct callchain_list *clist, | |||
| 1429 | cycles_count = clist->cycles_count; | 1436 | cycles_count = clist->cycles_count; |
| 1430 | iter_count = clist->iter_count; | 1437 | iter_count = clist->iter_count; |
| 1431 | iter_cycles = clist->iter_cycles; | 1438 | iter_cycles = clist->iter_cycles; |
| 1439 | from_count = clist->from_count; | ||
| 1432 | 1440 | ||
| 1433 | return callchain_counts_printf(fp, bf, bfsize, branch_count, | 1441 | return callchain_counts_printf(fp, bf, bfsize, branch_count, |
| 1434 | predicted_count, abort_count, | 1442 | predicted_count, abort_count, |
| 1435 | cycles_count, iter_count, iter_cycles, | 1443 | cycles_count, iter_count, iter_cycles, |
| 1436 | &clist->brtype_stat); | 1444 | from_count, &clist->brtype_stat); |
| 1437 | } | 1445 | } |
| 1438 | 1446 | ||
| 1439 | static void free_callchain_node(struct callchain_node *node) | 1447 | static void free_callchain_node(struct callchain_node *node) |
