Index: tools/perf/metrics/smoothness.py |
diff --git a/tools/perf/metrics/smoothness.py b/tools/perf/metrics/smoothness.py |
index de6331454a61ac6f084effbc05292595600aeb1a..056318eb41e76b777ed494dbd6a973beee35cce0 100644 |
--- a/tools/perf/metrics/smoothness.py |
+++ b/tools/perf/metrics/smoothness.py |
@@ -4,6 +4,7 @@ |
import os |
from telemetry.core import util |
+from metrics import discrepancy |
TIMELINE_MARKER = 'smoothness_scroll' |
@@ -88,6 +89,32 @@ def Average(numerator, denominator, scale = None, precision = None): |
avg = round(avg, precision) |
return avg |
+def DivideIfPossibleOrZero(numerator, denominator): |
+ if not denominator: |
+ return 0.0 |
+ else: |
+ return numerator / denominator |
+ |
+def GeneralizedMean(values, exponent): |
+ ''' http://en.wikipedia.org/wiki/Generalized_mean ''' |
+ if not values: |
+ return 0.0 |
+ sum_of_powers = 0.0 |
+ for v in values: |
+ sum_of_powers += v ** exponent |
+ return (sum_of_powers / len(values)) ** (1.0/exponent) |
+ |
+def Median(values): |
+ if not values: |
+ return 0.0 |
+ values.sort() |
+ n = len(values) |
+ if n % 2: |
+ median = values[n/2] |
+ else: |
+ median = 0.5 * (values[n/2] + values[n/2 - 1]) |
+ return median |
+ |
def CalcFirstPaintTimeResults(results, tab): |
if tab.browser.is_content_shell: |
results.Add('first_paint', 'ms', 'unsupported') |
@@ -110,9 +137,25 @@ def CalcFirstPaintTimeResults(results, tab): |
def CalcResults(benchmark_stats, results): |
s = benchmark_stats |
+ frame_times = [] |
+ for i in xrange(1, len(s.screen_frame_timestamps)): |
+ frame_times.append( |
+ s.screen_frame_timestamps[i] - s.screen_frame_timestamps[i-1]) |
+ |
# Scroll Results |
results.Add('mean_frame_time', 'ms', |
Average(s.total_time, s.screen_frame_count, 1000, 3)) |
+ # Absolute discrepancy of frame time stamps (experimental) |
+ results.Add('experimental_jank', '', |
+ round(discrepancy.FrameDiscrepancy(s.screen_frame_timestamps, |
+ True), 4)) |
+ # Generalized mean frame time with exponent=2 (experimental) |
+ results.Add('experimental_mean_frame_time', '', |
+ round(GeneralizedMean(frame_times, 2.0), 2)) |
+ # Median frame time (experimental) |
+ results.Add('experimental_median_frame_time', '', |
+ round(Median(frame_times), 2)) |
+ |
results.Add('dropped_percent', '%', |
Average(s.dropped_frame_count, s.screen_frame_count, |
100, 1), |