Add an option to strip leading zeros from histograms (#1226)
authorTaekho Nam <career.thnam@gmail.com>
Thu, 29 Jun 2017 14:20:47 +0000 (23:20 +0900)
committerSasha Goldshtein <goldshtn@gmail.com>
Thu, 29 Jun 2017 14:20:47 +0000 (17:20 +0300)
src/python/bcc/table.py
tools/funclatency_example.txt

index 0fb6f2f..7eeb059 100644 (file)
@@ -54,7 +54,7 @@ def _stars(val, val_max, width):
     return text
 
 
-def _print_log2_hist(vals, val_type):
+def _print_log2_hist(vals, val_type, strip_leading_zero):
     global stars_max
     log2_dist_max = 64
     idx_max = -1
@@ -74,15 +74,23 @@ def _print_log2_hist(vals, val_type):
         stars = int(stars_max / 2)
 
     if idx_max > 0:
-        print(header % val_type);
+        print(header % val_type)
+
     for i in range(1, idx_max + 1):
         low = (1 << i) >> 1
         high = (1 << i) - 1
         if (low == high):
             low -= 1
         val = vals[i]
-        print(body % (low, high, val, stars,
-                      _stars(val, val_max, stars)))
+
+        if strip_leading_zero:
+            if val:
+                print(body % (low, high, val, stars,
+                              _stars(val, val_max, stars)))
+                strip_leading_zero = False
+        else:
+            print(body % (low, high, val, stars,
+                          _stars(val, val_max, stars)))
 
 def _print_linear_hist(vals, val_type):
     global stars_max
@@ -281,7 +289,7 @@ class TableBase(MutableMapping):
         return next_key
 
     def print_log2_hist(self, val_type="value", section_header="Bucket ptr",
-            section_print_fn=None, bucket_fn=None):
+            section_print_fn=None, bucket_fn=None, strip_leading_zero=None):
         """print_log2_hist(val_type="value", section_header="Bucket ptr",
                            section_print_fn=None, bucket_fn=None)
 
@@ -292,8 +300,10 @@ class TableBase(MutableMapping):
         If section_print_fn is not None, it will be passed the bucket value
         to format into a string as it sees fit. If bucket_fn is not None,
         it will be used to produce a bucket value for the histogram keys.
-        The maximum index allowed is log2_index_max (65), which will
-        accomodate any 64-bit integer in the histogram.
+        If the value of strip_leading_zero is not False, prints a histogram
+        that is omitted leading zeros from the beginning. The maximum index
+        allowed is log2_index_max (65), which will accomodate any 64-bit
+        integer in the histogram.
         """
         if isinstance(self.Key(), ct.Structure):
             tmp = {}
@@ -312,12 +322,12 @@ class TableBase(MutableMapping):
                         section_print_fn(bucket)))
                 else:
                     print("\n%s = %r" % (section_header, bucket))
-                _print_log2_hist(vals, val_type)
+                _print_log2_hist(vals, val_type, strip_leading_zero)
         else:
             vals = [0] * log2_index_max
             for k, v in self.items():
                 vals[k.value] = v.value
-            _print_log2_hist(vals, val_type)
+            _print_log2_hist(vals, val_type, strip_leading_zero)
 
     def print_linear_hist(self, val_type="value", section_header="Bucket ptr",
             section_print_fn=None, bucket_fn=None):
@@ -709,4 +719,3 @@ class StackTrace(TableBase):
 
     def clear(self):
         pass
-
index a4c6f88..ee63a5b 100644 (file)
@@ -76,7 +76,7 @@ Tracing 1 function for "pthread:pthread_mutex_lock"... Hit Ctrl-C to end.
    1048576 -> 2097151    : 9        |                                        |
 Detaching...
 
-It seems that most calls to pthread_mutex_lock completed rather quickly (in 
+It seems that most calls to pthread_mutex_lock completed rather quickly (in
 under 4us), but there were some cases of considerable contention, sometimes
 over a full millisecond.