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

Side by Side Diff: tools/perf/metrics/smoothness.py

Issue 132433004: Collecting LatencyInfo in telemetry (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 6 years, 11 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 unified diff | Download patch
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from metrics import Metric 5 from metrics import Metric
6 from metrics import rendering_stats 6 from metrics import rendering_stats
7 from metrics import statistics 7 from metrics import statistics
8 from telemetry.page import page_measurement 8 from telemetry.page import page_measurement
9 9
10 TIMELINE_MARKER = 'Smoothness' 10 TIMELINE_MARKER = 'Smoothness'
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 tab.browser.platform.StartRawDisplayFrameRateMeasurement() 43 tab.browser.platform.StartRawDisplayFrameRateMeasurement()
44 44
45 def Stop(self, page, tab): 45 def Stop(self, page, tab):
46 if tab.browser.platform.IsRawDisplayFrameRateSupported(): 46 if tab.browser.platform.IsRawDisplayFrameRateSupported():
47 tab.browser.platform.StopRawDisplayFrameRateMeasurement() 47 tab.browser.platform.StopRawDisplayFrameRateMeasurement()
48 tab.ExecuteJavaScript('console.timeEnd("' + TIMELINE_MARKER + '")') 48 tab.ExecuteJavaScript('console.timeEnd("' + TIMELINE_MARKER + '")')
49 timeline_model = tab.browser.StopTracing().AsTimelineModel() 49 timeline_model = tab.browser.StopTracing().AsTimelineModel()
50 timeline_ranges = [ action.GetActiveRangeOnTimeline(timeline_model) 50 timeline_ranges = [ action.GetActiveRangeOnTimeline(timeline_model)
51 for action in self._actions ] 51 for action in self._actions ]
52 52
53 browser_process = timeline_model.GetProcess(tab.browser.browser_pid)
53 renderer_process = timeline_model.GetRendererProcessFromTab(tab) 54 renderer_process = timeline_model.GetRendererProcessFromTab(tab)
54 self._stats = rendering_stats.RenderingStats( 55 self._stats = rendering_stats.RenderingStats(
55 renderer_process, timeline_ranges) 56 renderer_process, browser_process, timeline_ranges)
56 57
57 if not self._stats.frame_times: 58 if not self._stats.frame_times:
58 raise NotEnoughFramesError() 59 raise NotEnoughFramesError()
59 60
60 def SetStats(self, stats): 61 def SetStats(self, stats):
61 """ Pass in a RenderingStats object directly. For unittests that don't call 62 """ Pass in a RenderingStats object directly. For unittests that don't call
62 Start/Stop. 63 Start/Stop.
63 """ 64 """
64 self._stats = stats 65 self._stats = stats
65 66
66 def AddResults(self, tab, results): 67 def AddResults(self, tab, results):
nduca 2014/01/13 18:49:32 needs unit tests
Yufeng Shen (Slow to review) 2014/01/14 00:05:47 I assume the unittests for this is a test that sta
Yufeng Shen (Slow to review) 2014/01/20 21:59:30 Test added.
68 if self._stats.mouse_wheel_latency:
69 mean_mouse_wheel_latency = statistics.ArithmeticMean(
70 self._stats.mouse_wheel_latency, len(self._stats.mouse_wheel_latency))
71 results.Add('mean_mouse_wheel_latency', 'ms',
72 round(mean_mouse_wheel_latency, 3))
73 results.Add('mouse_wheel_latency_75%', 'ms',
74 statistics.Percentile(self._stats.mouse_wheel_latency, 75.0) )
75
76 if self._stats.gesture_scroll_latency:
77 mean_gesture_scroll_latency = statistics.ArithmeticMean(
78 self._stats.gesture_scroll_latency,
79 len(self._stats.gesture_scroll_latency))
80 results.Add('mean_gesture_scroll_latency', 'ms',
81 round(mean_gesture_scroll_latency, 3))
82 results.Add('gesture_scroll_latency_75%', 'ms',
83 statistics.Percentile(self._stats.gesture_scroll_latency,
84 75.0) )
85
86 if self._stats.touch_scroll_latency:
87 mean_touch_scroll_latency = statistics.ArithmeticMean(
88 self._stats.touch_scroll_latency,
89 len(self._stats.touch_scroll_latency))
90 results.Add('mean_touch_scroll_latency', 'ms',
91 round(mean_touch_scroll_latency, 3))
92 results.Add('touch_scroll_latency_75%', 'ms',
93 statistics.Percentile(self._stats.touch_scroll_latency,
94 75.0) )
67 # List of raw frame times. 95 # List of raw frame times.
68 results.Add('frame_times', 'ms', self._stats.frame_times) 96 results.Add('frame_times', 'ms', self._stats.frame_times)
69 97
70 # Arithmetic mean of frame times. 98 # Arithmetic mean of frame times.
71 mean_frame_time = statistics.ArithmeticMean(self._stats.frame_times, 99 mean_frame_time = statistics.ArithmeticMean(self._stats.frame_times,
72 len(self._stats.frame_times)) 100 len(self._stats.frame_times))
73 results.Add('mean_frame_time', 'ms', round(mean_frame_time, 3)) 101 results.Add('mean_frame_time', 'ms', round(mean_frame_time, 3))
74 102
75 # Absolute discrepancy of frame time stamps. 103 # Absolute discrepancy of frame time stamps.
76 jank = statistics.FrameDiscrepancy(self._stats.frame_timestamps) 104 jank = statistics.FrameDiscrepancy(self._stats.frame_timestamps)
77 results.Add('jank', '', round(jank, 4)) 105 results.Add('jank', '', round(jank, 4))
78 106
79 # Are we hitting 60 fps for 95 percent of all frames? 107 # Are we hitting 60 fps for 95 percent of all frames?
80 # We use 19ms as a somewhat looser threshold, instead of 1000.0/60.0. 108 # We use 19ms as a somewhat looser threshold, instead of 1000.0/60.0.
81 percentile_95 = statistics.Percentile(self._stats.frame_times, 95.0) 109 percentile_95 = statistics.Percentile(self._stats.frame_times, 95.0)
82 results.Add('mostly_smooth', '', 1.0 if percentile_95 < 19.0 else 0.0) 110 results.Add('mostly_smooth', '', 1.0 if percentile_95 < 19.0 else 0.0)
83 111
84 if tab.browser.platform.IsRawDisplayFrameRateSupported(): 112 if tab.browser.platform.IsRawDisplayFrameRateSupported():
85 for r in tab.browser.platform.GetRawDisplayFrameRateMeasurements(): 113 for r in tab.browser.platform.GetRawDisplayFrameRateMeasurements():
86 if r.value is None: 114 if r.value is None:
87 raise MissingDisplayFrameRateError(r.name) 115 raise MissingDisplayFrameRateError(r.name)
88 results.Add(r.name, r.unit, r.value) 116 results.Add(r.name, r.unit, r.value)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698