On Fri, Jul 08, 2016 at 06:27:33PM +0200, Peter Zijlstra wrote:

> I've been thinking of filtering all targets and branches that are
> smaller than 0.1% in order to avoid this, but so far I've just been
> ignoring these things.

Like so... seems to 'work'.

---
 tools/perf/util/annotate.c | 45 ++++++++++++++++++++++++++-------------------
 1 file changed, 26 insertions(+), 19 deletions(-)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 8eeb151..c78b16f0 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -907,6 +907,7 @@ static void annotate__branch_printf(struct block_range *br, 
u64 addr)
 #if 1
        if (br->is_target && br->start == addr) {
                struct block_range *branch = br;
+               double p;
 
                /*
                 * Find matching branch to our target.
@@ -914,31 +915,37 @@ static void annotate__branch_printf(struct block_range 
*br, u64 addr)
                while (!branch->is_branch)
                        branch = block_range__next(branch);
 
-               if (emit_comment) {
-                       emit_comment = false;
-                       printf("\t#");
-               }
+               p = 100 *(double)br->entry / branch->coverage;
 
-               /*
-                * The percentage of coverage joined at this target in relation
-                * to the next branch.
-                */
-               printf(" +%.2f%%", 100*(double)br->entry / branch->coverage);
+               if (p > 0.1) {
+                       if (emit_comment) {
+                               emit_comment = false;
+                               printf("\t#");
+                       }
+
+                       /*
+                        * The percentage of coverage joined at this target in 
relation
+                        * to the next branch.
+                        */
+                       printf(" +%.2f%%", p);
+               }
        }
 #endif
        if (br->is_branch && br->end == addr) {
+               double p = 100*(double)br->taken / br->coverage;
 
-               if (emit_comment) {
-                       emit_comment = false;
-                       printf("\t#");
-               }
+               if (p > 0.1) {
+                       if (emit_comment) {
+                               emit_comment = false;
+                               printf("\t#");
+                       }
 
-               /*
-                * The percentage of coverage leaving at this branch, and
-                * its prediction ratio.
-                */
-               printf(" -%.2f%% / %.2f%%", 100*(double)br->taken / 
br->coverage,
-                                           100*(double)br->pred  / br->taken);
+                       /*
+                        * The percentage of coverage leaving at this branch, 
and
+                        * its prediction ratio.
+                        */
+                       printf(" -%.2f%% (p:%.2f%%)", p, 100*(double)br->pred  
/ br->taken);
+               }
        }
 }
 

Reply via email to