Index: tools/perf/perf_tools/smoothness_measurement.py |
diff --git a/tools/perf/perf_tools/smoothness_measurement.py b/tools/perf/perf_tools/smoothness_measurement.py |
deleted file mode 100644 |
index 042d4b60a86bd41056a7a84d907066d1052794ac..0000000000000000000000000000000000000000 |
--- a/tools/perf/perf_tools/smoothness_measurement.py |
+++ /dev/null |
@@ -1,226 +0,0 @@ |
-# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
-from perf_tools import smoothness_metrics |
-from telemetry.core import util |
-from telemetry.page import page_measurement |
- |
-class DidNotScrollException(page_measurement.MeasurementFailure): |
- def __init__(self): |
- super(DidNotScrollException, self).__init__('Page did not scroll') |
- |
-class MissingDisplayFrameRate(page_measurement.MeasurementFailure): |
- def __init__(self): |
- super(MissingDisplayFrameRate, self).__init__( |
- 'Missing display frame rate metrics') |
- |
-def DivideIfPossibleOrZero(numerator, denominator): |
- if denominator == 0: |
- return 0 |
- return numerator / denominator |
- |
-def CalcScrollResults(rendering_stats_deltas, results): |
- num_frames_sent_to_screen = rendering_stats_deltas['numFramesSentToScreen'] |
- |
- mean_frame_time_seconds = ( |
- rendering_stats_deltas['totalTimeInSeconds'] / |
- float(num_frames_sent_to_screen)) |
- |
- dropped_percent = ( |
- rendering_stats_deltas['droppedFrameCount'] / |
- float(num_frames_sent_to_screen)) |
- |
- num_impl_thread_scrolls = rendering_stats_deltas.get( |
- 'numImplThreadScrolls', 0) |
- num_main_thread_scrolls = rendering_stats_deltas.get( |
- 'numMainThreadScrolls', 0) |
- |
- percent_impl_scrolled = DivideIfPossibleOrZero( |
- float(num_impl_thread_scrolls), |
- num_impl_thread_scrolls + num_main_thread_scrolls) |
- |
- num_layers = ( |
- rendering_stats_deltas.get('numLayersDrawn', 0) / |
- float(num_frames_sent_to_screen)) |
- |
- num_missing_tiles = ( |
- rendering_stats_deltas.get('numMissingTiles', 0) / |
- float(num_frames_sent_to_screen)) |
- |
- results.Add('mean_frame_time', 'ms', round(mean_frame_time_seconds * 1000, 3)) |
- results.Add('dropped_percent', '%', round(dropped_percent * 100, 1), |
- data_type='unimportant') |
- results.Add('percent_impl_scrolled', '%', |
- round(percent_impl_scrolled * 100, 1), |
- data_type='unimportant') |
- results.Add('average_num_layers_drawn', '', round(num_layers, 1), |
- data_type='unimportant') |
- results.Add('average_num_missing_tiles', '', round(num_missing_tiles, 1), |
- data_type='unimportant') |
- |
-def CalcTextureUploadResults(rendering_stats_deltas, results): |
- if (('totalCommitCount' not in rendering_stats_deltas) |
- or rendering_stats_deltas['totalCommitCount'] == 0) : |
- averageCommitTimeMs = 0 |
- else : |
- averageCommitTimeMs = ( |
- 1000 * rendering_stats_deltas['totalCommitTimeInSeconds'] / |
- rendering_stats_deltas['totalCommitCount']) |
- |
- results.Add('texture_upload_count', 'count', |
- rendering_stats_deltas.get('textureUploadCount', 0)) |
- results.Add('total_texture_upload_time', 'seconds', |
- rendering_stats_deltas.get('totalTextureUploadTimeInSeconds', 0)) |
- results.Add('average_commit_time', 'ms', averageCommitTimeMs, |
- data_type='unimportant') |
- |
-def CalcFirstPaintTimeResults(results, tab): |
- if tab.browser.is_content_shell: |
- results.Add('first_paint', 'ms', 'unsupported') |
- return |
- |
- tab.ExecuteJavaScript(""" |
- window.__rafFired = false; |
- window.webkitRequestAnimationFrame(function() { |
- window.__rafFired = true; |
- }); |
- """) |
- util.WaitFor(lambda: tab.EvaluateJavaScript('window.__rafFired'), 60) |
- |
- first_paint_secs = tab.EvaluateJavaScript( |
- 'window.chrome.loadTimes().firstPaintTime - ' + |
- 'window.chrome.loadTimes().startLoadTime') |
- |
- results.Add('first_paint', 'ms', round(first_paint_secs * 1000, 1)) |
- |
-def CalcImageDecodingResults(rendering_stats_deltas, results): |
- totalDeferredImageDecodeCount = rendering_stats_deltas.get( |
- 'totalDeferredImageDecodeCount', 0) |
- totalDeferredImageCacheHitCount = rendering_stats_deltas.get( |
- 'totalDeferredImageCacheHitCount', 0) |
- totalImageGatheringCount = rendering_stats_deltas.get( |
- 'totalImageGatheringCount', 0) |
- totalDeferredImageDecodeTimeInSeconds = rendering_stats_deltas.get( |
- 'totalDeferredImageDecodeTimeInSeconds', 0) |
- totalImageGatheringTimeInSeconds = rendering_stats_deltas.get( |
- 'totalImageGatheringTimeInSeconds', 0) |
- |
- averageImageGatheringTime = DivideIfPossibleOrZero( |
- (totalImageGatheringTimeInSeconds * 1000), totalImageGatheringCount) |
- |
- results.Add('total_deferred_image_decode_count', 'count', |
- totalDeferredImageDecodeCount, |
- data_type='unimportant') |
- results.Add('total_image_cache_hit_count', 'count', |
- totalDeferredImageCacheHitCount, |
- data_type='unimportant') |
- results.Add('average_image_gathering_time', 'ms', averageImageGatheringTime, |
- data_type='unimportant') |
- results.Add('total_deferred_image_decoding_time', 'seconds', |
- totalDeferredImageDecodeTimeInSeconds, |
- data_type='unimportant') |
- |
-def CalcAnalysisResults(rendering_stats_deltas, results): |
- totalTilesAnalyzed = rendering_stats_deltas.get( |
- 'totalTilesAnalyzed', 0) |
- solidColorTilesAnalyzed = rendering_stats_deltas.get( |
- 'solidColorTilesAnalyzed', 0) |
- totalTileAnalysisTimeInSeconds = rendering_stats_deltas.get( |
- 'totalTileAnalysisTimeInSeconds', 0) |
- |
- averageAnalysisTimeMS = \ |
- 1000 * DivideIfPossibleOrZero(totalTileAnalysisTimeInSeconds, |
- totalTilesAnalyzed) |
- |
- results.Add('total_tiles_analyzed', 'count', |
- totalTilesAnalyzed, |
- data_type='unimportant') |
- results.Add('solid_color_tiles_analyzed', 'count', |
- solidColorTilesAnalyzed, |
- data_type='unimportant') |
- results.Add('average_tile_analysis_time', 'ms', |
- averageAnalysisTimeMS, |
- data_type='unimportant') |
- |
-def CalcLatencyResults(rendering_stats_deltas, results): |
- inputEventCount = rendering_stats_deltas.get( |
- 'inputEventCount', 0) |
- totalInputLatencyInSeconds = rendering_stats_deltas.get( |
- 'totalInputLatency', 0) |
- |
- averageLatency = DivideIfPossibleOrZero( |
- (totalInputLatencyInSeconds * 1000), inputEventCount) |
- |
- results.Add('average_latency', 'ms', averageLatency, |
- data_type='unimportant') |
- |
- |
-class SmoothnessMeasurement(page_measurement.PageMeasurement): |
- def __init__(self): |
- super(SmoothnessMeasurement, self).__init__('smoothness') |
- self.force_enable_threaded_compositing = False |
- self.use_gpu_benchmarking_extension = True |
- self._metrics = None |
- |
- def AddCommandLineOptions(self, parser): |
- parser.add_option('--report-all-results', dest='report_all_results', |
- action='store_true', |
- help='Reports all data collected, not just FPS') |
- |
- def CustomizeBrowserOptions(self, options): |
- if self.use_gpu_benchmarking_extension: |
- options.extra_browser_args.append('--enable-gpu-benchmarking') |
- if self.force_enable_threaded_compositing: |
- options.extra_browser_args.append('--enable-threaded-compositing') |
- |
- def CanRunForPage(self, page): |
- return hasattr(page, 'smoothness') |
- |
- def WillRunAction(self, page, tab, action): |
- if tab.browser.platform.IsRawDisplayFrameRateSupported(): |
- tab.browser.platform.StartRawDisplayFrameRateMeasurement() |
- self._metrics = smoothness_metrics.SmoothnessMetrics(tab) |
- if action.CanBeBound(): |
- self._metrics.BindToAction(action) |
- else: |
- self._metrics.Start() |
- |
- def DidRunAction(self, page, tab, action): |
- if tab.browser.platform.IsRawDisplayFrameRateSupported(): |
- tab.browser.platform.StopRawDisplayFrameRateMeasurement() |
- if not action.CanBeBound(): |
- self._metrics.Stop() |
- |
- def MeasurePage(self, page, tab, results): |
- rendering_stats_deltas = self._metrics.deltas |
- |
- if not (rendering_stats_deltas['numFramesSentToScreen'] > 0): |
- raise DidNotScrollException() |
- |
- load_timings = tab.EvaluateJavaScript("window.performance.timing") |
- load_time_seconds = ( |
- float(load_timings['loadEventStart']) - |
- load_timings['navigationStart']) / 1000 |
- dom_content_loaded_time_seconds = ( |
- float(load_timings['domContentLoadedEventStart']) - |
- load_timings['navigationStart']) / 1000 |
- results.Add('load_time', 'seconds', load_time_seconds) |
- results.Add('dom_content_loaded_time', 'seconds', |
- dom_content_loaded_time_seconds) |
- |
- CalcFirstPaintTimeResults(results, tab) |
- CalcScrollResults(rendering_stats_deltas, results) |
- CalcTextureUploadResults(rendering_stats_deltas, results) |
- CalcImageDecodingResults(rendering_stats_deltas, results) |
- CalcAnalysisResults(rendering_stats_deltas, results) |
- CalcLatencyResults(rendering_stats_deltas, results) |
- |
- if self.options.report_all_results: |
- for k, v in rendering_stats_deltas.iteritems(): |
- results.Add(k, '', v) |
- |
- if tab.browser.platform.IsRawDisplayFrameRateSupported(): |
- for r in tab.browser.platform.GetRawDisplayFrameRateMeasurements(): |
- if not r.value: |
- raise MissingDisplayFrameRate() |
- results.Add(r.name, r.unit, r.value) |