Index: tools/telemetry/telemetry/web_perf/metrics/smoothness.py |
diff --git a/tools/telemetry/telemetry/web_perf/metrics/smoothness.py b/tools/telemetry/telemetry/web_perf/metrics/smoothness.py |
index f63fea8bed3b45ec5c6ceaab2248f226f85c7e76..6add8685692efca0d7c0b3ea797f9fed4d264a64 100644 |
--- a/tools/telemetry/telemetry/web_perf/metrics/smoothness.py |
+++ b/tools/telemetry/telemetry/web_perf/metrics/smoothness.py |
@@ -2,7 +2,6 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-import logging |
from telemetry.perf_tests_helper import FlattenList |
from telemetry.util import statistics |
from telemetry.value import list_of_scalar_values |
@@ -50,13 +49,11 @@ |
self.VerifyNonOverlappedRecords(interaction_records) |
renderer_process = renderer_thread.parent |
stats = rendering_stats.RenderingStats( |
- renderer_process, model.browser_process, model.surface_flinger_process, |
+ renderer_process, model.browser_process, |
[r.GetBounds() for r in interaction_records]) |
- has_surface_flinger_stats = model.surface_flinger_process is not None |
- self._PopulateResultsFromStats(results, stats, has_surface_flinger_stats) |
- |
- def _PopulateResultsFromStats(self, results, stats, |
- has_surface_flinger_stats): |
+ self._PopulateResultsFromStats(results, stats) |
+ |
+ def _PopulateResultsFromStats(self, results, stats): |
page = results.current_page |
values = [ |
self._ComputeQueueingDuration(page, stats), |
@@ -69,78 +66,12 @@ |
stats.scroll_update_latency) |
values += self._ComputeFirstGestureScrollUpdateLatency(page, stats) |
values += self._ComputeFrameTimeMetric(page, stats) |
- if has_surface_flinger_stats: |
- values += self._ComputeSurfaceFlingerMetric(page, stats) |
- |
for v in values: |
results.AddValue(v) |
def _HasEnoughFrames(self, list_of_frame_timestamp_lists): |
"""Whether we have collected at least two frames in every timestamp list.""" |
return all(len(s) >= 2 for s in list_of_frame_timestamp_lists) |
- |
- @staticmethod |
- def _GetNormalizedDeltas(data, refresh_period, min_normalized_delta=None): |
- deltas = [t2 - t1 for t1, t2 in zip(data, data[1:])] |
- if min_normalized_delta != None: |
- deltas = [d for d in deltas |
- if d / refresh_period >= min_normalized_delta] |
- return (deltas, [delta / refresh_period for delta in deltas]) |
- |
- def _ComputeSurfaceFlingerMetric(self, page, stats): |
- jank_count = None |
- avg_surface_fps = None |
- max_frame_delay = None |
- frame_lengths = None |
- none_value_reason = None |
- if self._HasEnoughFrames(stats.frame_timestamps): |
- timestamps = FlattenList(stats.frame_timestamps) |
- frame_count = len(timestamps) |
- milliseconds = timestamps[-1] - timestamps[0] |
- min_normalized_frame_length = 0.5 |
- |
- frame_lengths, normalized_frame_lengths = \ |
- self._GetNormalizedDeltas(timestamps, stats.refresh_period, |
- min_normalized_frame_length) |
- if len(frame_lengths) < frame_count - 1: |
- logging.warning('Skipping frame lengths that are too short.') |
- frame_count = len(frame_lengths) + 1 |
- if len(frame_lengths) == 0: |
- raise Exception('No valid frames lengths found.') |
- _, normalized_changes = \ |
- self._GetNormalizedDeltas(frame_lengths, stats.refresh_period) |
- jankiness = [max(0, round(change)) for change in normalized_changes] |
- pause_threshold = 20 |
- jank_count = sum(1 for change in jankiness |
- if change > 0 and change < pause_threshold) |
- avg_surface_fps = int(round((frame_count - 1) * 1000.0 / milliseconds)) |
- max_frame_delay = round(max(normalized_frame_lengths)) |
- frame_lengths = normalized_frame_lengths |
- else: |
- none_value_reason = NOT_ENOUGH_FRAMES_MESSAGE |
- |
- return ( |
- scalar.ScalarValue( |
- page, 'avg_surface_fps', 'fps', avg_surface_fps, |
- description='Average frames per second as measured by the ' |
- 'platform\'s SurfaceFlinger.', |
- none_value_reason=none_value_reason), |
- scalar.ScalarValue( |
- page, 'jank_count', 'janks', jank_count, |
- description='Number of changes in frame rate as measured by the ' |
- 'platform\'s SurfaceFlinger.', |
- none_value_reason=none_value_reason), |
- scalar.ScalarValue( |
- page, 'max_frame_delay', 'vsyncs', max_frame_delay, |
- description='Largest frame time as measured by the platform\'s ' |
- 'SurfaceFlinger.', |
- none_value_reason=none_value_reason), |
- list_of_scalar_values.ListOfScalarValues( |
- page, 'frame_lengths', 'vsyncs', frame_lengths, |
- description='Frame time in vsyncs as measured by the platform\'s ' |
- 'SurfaceFlinger.', |
- none_value_reason=none_value_reason) |
- ) |
def _ComputeLatencyMetric(self, page, stats, name, list_of_latency_lists): |
"""Returns Values for the mean and discrepancy for given latency stats.""" |