Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1444)

Unified Diff: tools/perf/metrics/smoothness.py

Issue 23506030: telemetry: Add new metrics to smoothness benchmark. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/perf/metrics/gpu_rendering_stats.py ('k') | tools/perf/metrics/smoothness_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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),
« no previous file with comments | « tools/perf/metrics/gpu_rendering_stats.py ('k') | tools/perf/metrics/smoothness_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698