| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 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 from telemetry import multi_page_benchmark | 4 from perf_tools import smoothness_benchmark |
| 5 | 5 |
| 6 class DidNotScrollException(multi_page_benchmark.MeasurementFailure): | 6 class ScrollingBenchmark(smoothness_benchmark.SmoothnessBenchmark): |
| 7 def __init__(self): | 7 def __init__(self): |
| 8 super(DidNotScrollException, self).__init__('Page did not scroll') | 8 super(ScrollingBenchmark, self).__init__() |
| 9 | |
| 10 def GetOrZero(stat, rendering_stats_deltas): | |
| 11 if stat in rendering_stats_deltas: | |
| 12 return rendering_stats_deltas[stat] | |
| 13 return 0 | |
| 14 | |
| 15 def DivideIfPossibleOrZero(numerator, denominator): | |
| 16 if denominator == 0: | |
| 17 return 0 | |
| 18 return numerator / denominator | |
| 19 | |
| 20 def CalcScrollResults(rendering_stats_deltas, results): | |
| 21 num_frames_sent_to_screen = rendering_stats_deltas['numFramesSentToScreen'] | |
| 22 | |
| 23 mean_frame_time_seconds = ( | |
| 24 rendering_stats_deltas['totalTimeInSeconds'] / | |
| 25 float(num_frames_sent_to_screen)) | |
| 26 | |
| 27 dropped_percent = ( | |
| 28 rendering_stats_deltas['droppedFrameCount'] / | |
| 29 float(num_frames_sent_to_screen)) | |
| 30 | |
| 31 | |
| 32 totalPaintTime = GetOrZero('totalPaintTimeInSeconds', | |
| 33 rendering_stats_deltas) | |
| 34 | |
| 35 totalRasterizeTime = GetOrZero('totalRasterizeTimeInSeconds', | |
| 36 rendering_stats_deltas) | |
| 37 | |
| 38 totalPixelsPainted = GetOrZero('totalPixelsPainted', | |
| 39 rendering_stats_deltas) | |
| 40 | |
| 41 totalPixelsRasterized = GetOrZero('totalPixelsRasterized', | |
| 42 rendering_stats_deltas) | |
| 43 | |
| 44 | |
| 45 megapixelsPaintedPerSecond = DivideIfPossibleOrZero( | |
| 46 (totalPixelsPainted / 1000000.0), totalPaintTime) | |
| 47 | |
| 48 megapixelsRasterizedPerSecond = DivideIfPossibleOrZero( | |
| 49 (totalPixelsRasterized / 1000000.0), totalRasterizeTime) | |
| 50 | |
| 51 results.Add('mean_frame_time', 'ms', round(mean_frame_time_seconds * 1000, 3)) | |
| 52 results.Add('dropped_percent', '%', round(dropped_percent * 100, 1)) | |
| 53 | |
| 54 results.Add('total_paint_time', 'seconds', totalPaintTime) | |
| 55 results.Add('total_rasterize_time', 'seconds', totalRasterizeTime) | |
| 56 results.Add('total_pixels_painted', '', totalPixelsPainted) | |
| 57 results.Add('total_pixels_rasterized', '', totalPixelsRasterized) | |
| 58 results.Add('megapixels_painted_per_second', '', megapixelsPaintedPerSecond) | |
| 59 results.Add('megapixels_rasterized_per_second', '', | |
| 60 megapixelsRasterizedPerSecond) | |
| 61 results.Add('total_paint_and_rasterize_time', 'seconds', totalPaintTime + | |
| 62 totalRasterizeTime) | |
| 63 | |
| 64 class ScrollingBenchmark(multi_page_benchmark.MultiPageBenchmark): | |
| 65 def __init__(self): | |
| 66 super(ScrollingBenchmark, self).__init__('scrolling') | |
| 67 | |
| 68 def AddCommandLineOptions(self, parser): | |
| 69 parser.add_option('--no-gpu-benchmarking-extension', action='store_true', | |
| 70 dest='no_gpu_benchmarking_extension', | |
| 71 help='Disable the chrome.gpuBenchmarking extension.') | |
| 72 parser.add_option('--report-all-results', dest='report_all_results', | |
| 73 action='store_true', | |
| 74 help='Reports all data collected, not just FPS') | |
| 75 | |
| 76 def CustomizeBrowserOptions(self, options): | |
| 77 if not options.no_gpu_benchmarking_extension: | |
| 78 options.extra_browser_args.append('--enable-gpu-benchmarking') | |
| 79 | |
| 80 def CanRunForPage(self, page): | |
| 81 return hasattr(page, 'scrolling') | |
| 82 | |
| 83 def MeasurePage(self, page, tab, results): | |
| 84 rendering_stats_deltas = tab.runtime.Evaluate( | |
| 85 'window.__renderingStatsDeltas') | |
| 86 | |
| 87 if not (rendering_stats_deltas['numFramesSentToScreen'] > 0): | |
| 88 raise DidNotScrollException() | |
| 89 | |
| 90 CalcScrollResults(rendering_stats_deltas, results) | |
| 91 if self.options.report_all_results: | |
| 92 for k, v in rendering_stats_deltas.iteritems(): | |
| 93 results.Add(k, '', v) | |
| OLD | NEW |