[analyzer] [testing] Compute data on path length, compute percentiles
authorGeorge Karpenkov <ekarpenkov@apple.com>
Tue, 23 Oct 2018 01:30:26 +0000 (01:30 +0000)
committerGeorge Karpenkov <ekarpenkov@apple.com>
Tue, 23 Oct 2018 01:30:26 +0000 (01:30 +0000)
Differential Revision: https://reviews.llvm.org/D52844

llvm-svn: 344990

clang/utils/analyzer/CmpRuns.py

index 7c97447..ab8c48b 100755 (executable)
@@ -281,9 +281,21 @@ def compareResults(A, B, opts):
 
     return res
 
+def computePercentile(l, percentile):
+    """
+    Return computed percentile.
+    """
+    return sorted(l)[int(round(percentile * len(l) + 0.5)) - 1]
+
 def deriveStats(results):
     # Assume all keys are the same in each statistics bucket.
     combined_data = defaultdict(list)
+
+    # Collect data on paths length.
+    for report in results.reports:
+        for diagnostic in report.diagnostics:
+            combined_data['PathsLength'].append(diagnostic.getPathLength())
+
     for stat in results.stats:
         for key, value in stat.iteritems():
             combined_data[key].append(value)
@@ -293,6 +305,8 @@ def deriveStats(results):
             "max": max(values),
             "min": min(values),
             "mean": sum(values) / len(values),
+            "90th %tile": computePercentile(values, 0.9),
+            "95th %tile": computePercentile(values, 0.95),
             "median": sorted(values)[len(values) / 2],
             "total": sum(values)
         }