Chromium Code Reviews| 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 telemetry import multi_page_benchmark |
| 5 from telemetry import util | |
| 5 | 6 |
| 6 class DidNotScrollException(multi_page_benchmark.MeasurementFailure): | 7 class DidNotScrollException(multi_page_benchmark.MeasurementFailure): |
| 7 def __init__(self): | 8 def __init__(self): |
| 8 super(DidNotScrollException, self).__init__('Page did not scroll') | 9 super(DidNotScrollException, self).__init__('Page did not scroll') |
| 9 | 10 |
| 10 def GetOrZero(stat, rendering_stats_deltas): | 11 def GetOrZero(stat, rendering_stats_deltas): |
| 11 if stat in rendering_stats_deltas: | 12 if stat in rendering_stats_deltas: |
| 12 return rendering_stats_deltas[stat] | 13 return rendering_stats_deltas[stat] |
| 13 return 0 | 14 return 0 |
| 14 | 15 |
| 15 def DivideIfPossibleOrZero(numerator, denominator): | 16 def DivideIfPossibleOrZero(numerator, denominator): |
| 16 if denominator == 0: | 17 if denominator == 0: |
| 17 return 0 | 18 return 0 |
| 18 return numerator / denominator | 19 return numerator / denominator |
| 19 | 20 |
| 20 def CalcScrollResults(rendering_stats_deltas, results): | 21 def CalcScrollResults(rendering_stats_deltas, results): |
| 22 # Scrolling | |
|
tonyg
2012/11/20 23:58:18
These new comments are a pretty good indicator tha
hartmanng
2012/11/21 14:34:55
Done.
| |
| 21 num_frames_sent_to_screen = rendering_stats_deltas['numFramesSentToScreen'] | 23 num_frames_sent_to_screen = rendering_stats_deltas['numFramesSentToScreen'] |
| 22 | 24 |
| 23 mean_frame_time_seconds = ( | 25 mean_frame_time_seconds = ( |
| 24 rendering_stats_deltas['totalTimeInSeconds'] / | 26 rendering_stats_deltas['totalTimeInSeconds'] / |
| 25 float(num_frames_sent_to_screen)) | 27 float(num_frames_sent_to_screen)) |
| 26 | 28 |
| 27 dropped_percent = ( | 29 dropped_percent = ( |
| 28 rendering_stats_deltas['droppedFrameCount'] / | 30 rendering_stats_deltas['droppedFrameCount'] / |
| 29 float(num_frames_sent_to_screen)) | 31 float(num_frames_sent_to_screen)) |
| 30 | 32 |
| 33 results.Add('mean_frame_time', 'ms', round(mean_frame_time_seconds * 1000, 3)) | |
| 34 results.Add('dropped_percent', '%', round(dropped_percent * 100, 1)) | |
| 31 | 35 |
| 36 | |
| 37 # Painting | |
| 32 totalPaintTime = GetOrZero('totalPaintTimeInSeconds', | 38 totalPaintTime = GetOrZero('totalPaintTimeInSeconds', |
| 33 rendering_stats_deltas) | 39 rendering_stats_deltas) |
| 34 | 40 |
| 35 totalRasterizeTime = GetOrZero('totalRasterizeTimeInSeconds', | 41 totalRasterizeTime = GetOrZero('totalRasterizeTimeInSeconds', |
| 36 rendering_stats_deltas) | 42 rendering_stats_deltas) |
| 37 | 43 |
| 38 totalPixelsPainted = GetOrZero('totalPixelsPainted', | 44 totalPixelsPainted = GetOrZero('totalPixelsPainted', |
| 39 rendering_stats_deltas) | 45 rendering_stats_deltas) |
| 40 | 46 |
| 41 totalPixelsRasterized = GetOrZero('totalPixelsRasterized', | 47 totalPixelsRasterized = GetOrZero('totalPixelsRasterized', |
| 42 rendering_stats_deltas) | 48 rendering_stats_deltas) |
| 43 | 49 |
| 44 | |
| 45 megapixelsPaintedPerSecond = DivideIfPossibleOrZero( | 50 megapixelsPaintedPerSecond = DivideIfPossibleOrZero( |
| 46 (totalPixelsPainted / 1000000.0), totalPaintTime) | 51 (totalPixelsPainted / 1000000.0), totalPaintTime) |
| 47 | 52 |
| 48 megapixelsRasterizedPerSecond = DivideIfPossibleOrZero( | 53 megapixelsRasterizedPerSecond = DivideIfPossibleOrZero( |
| 49 (totalPixelsRasterized / 1000000.0), totalRasterizeTime) | 54 (totalPixelsRasterized / 1000000.0), totalRasterizeTime) |
| 50 | 55 |
| 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) | 56 results.Add('total_paint_time', 'seconds', totalPaintTime) |
| 55 results.Add('total_rasterize_time', 'seconds', totalRasterizeTime) | 57 results.Add('total_rasterize_time', 'seconds', totalRasterizeTime) |
| 56 results.Add('total_pixels_painted', '', totalPixelsPainted) | 58 results.Add('total_pixels_painted', '', totalPixelsPainted) |
| 57 results.Add('total_pixels_rasterized', '', totalPixelsRasterized) | 59 results.Add('total_pixels_rasterized', '', totalPixelsRasterized) |
| 58 results.Add('megapixels_painted_per_second', '', megapixelsPaintedPerSecond) | 60 results.Add('megapixels_painted_per_second', '', megapixelsPaintedPerSecond) |
| 59 results.Add('megapixels_rasterized_per_second', '', | 61 results.Add('megapixels_rasterized_per_second', '', |
| 60 megapixelsRasterizedPerSecond) | 62 megapixelsRasterizedPerSecond) |
| 61 results.Add('total_paint_and_rasterize_time', 'seconds', totalPaintTime + | 63 results.Add('total_paint_and_rasterize_time', 'seconds', totalPaintTime + |
| 62 totalRasterizeTime) | 64 totalRasterizeTime) |
| 63 | 65 |
| 64 class ScrollingBenchmark(multi_page_benchmark.MultiPageBenchmark): | 66 # Texture Upload |
| 67 if (('totalCommitCount' not in rendering_stats_deltas) | |
| 68 or rendering_stats_deltas['totalCommitCount'] == 0) : | |
| 69 averageCommitTimeMs = 0 | |
| 70 else : | |
| 71 averageCommitTimeMs = ( | |
| 72 1000 * rendering_stats_deltas['totalCommitTimeInSeconds'] / | |
| 73 rendering_stats_deltas['totalCommitCount']) | |
| 74 | |
| 75 results.Add('texture_upload_count', 'count', | |
| 76 GetOrZero('textureUploadCount', rendering_stats_deltas)) | |
| 77 results.Add('average_commit_time', 'ms', averageCommitTimeMs) | |
|
tonyg
2012/11/20 23:58:18
While you are adding new results, I wonder if you
hartmanng
2012/11/21 14:34:55
Done.
| |
| 78 | |
| 79 class SmoothnessBenchmark(multi_page_benchmark.MultiPageBenchmark): | |
| 65 def __init__(self): | 80 def __init__(self): |
| 66 super(ScrollingBenchmark, self).__init__('scrolling') | 81 super(SmoothnessBenchmark, self).__init__('scrolling') |
| 67 | 82 |
| 68 def AddCommandLineOptions(self, parser): | 83 def AddCommandLineOptions(self, parser): |
| 69 parser.add_option('--no-gpu-benchmarking-extension', action='store_true', | 84 parser.add_option('--no-gpu-benchmarking-extension', action='store_true', |
| 70 dest='no_gpu_benchmarking_extension', | 85 dest='no_gpu_benchmarking_extension', |
| 71 help='Disable the chrome.gpuBenchmarking extension.') | 86 help='Disable the chrome.gpuBenchmarking extension.') |
| 72 parser.add_option('--report-all-results', dest='report_all_results', | 87 parser.add_option('--report-all-results', dest='report_all_results', |
| 73 action='store_true', | 88 action='store_true', |
| 74 help='Reports all data collected, not just FPS') | 89 help='Reports all data collected, not just FPS') |
| 75 | 90 |
| 76 def CustomizeBrowserOptions(self, options): | 91 def CustomizeBrowserOptions(self, options): |
| 77 if not options.no_gpu_benchmarking_extension: | 92 if not options.no_gpu_benchmarking_extension: |
| 78 options.extra_browser_args.append('--enable-gpu-benchmarking') | 93 options.extra_browser_args.append('--enable-gpu-benchmarking') |
| 79 | 94 |
| 80 def CanRunForPage(self, page): | 95 def CanRunForPage(self, page): |
| 81 return hasattr(page, 'scrolling') | 96 return hasattr(page, 'scrolling') |
| 82 | 97 |
| 83 def MeasurePage(self, page, tab, results): | 98 def MeasurePage(self, page, tab, results): |
| 84 rendering_stats_deltas = tab.runtime.Evaluate( | 99 rendering_stats_deltas = tab.runtime.Evaluate( |
| 85 'window.__renderingStatsDeltas') | 100 'window.__renderingStatsDeltas') |
| 86 | 101 |
| 87 if not (rendering_stats_deltas['numFramesSentToScreen'] > 0): | 102 if not (rendering_stats_deltas['numFramesSentToScreen'] > 0): |
| 88 raise DidNotScrollException() | 103 raise DidNotScrollException() |
| 89 | 104 |
| 105 # First Paint Time | |
|
tonyg
2012/11/20 23:58:18
Recommend moving this out to a CalcFirstPaintTimeR
hartmanng
2012/11/21 14:34:55
Done.
| |
| 106 if tab.browser.is_content_shell: | |
| 107 results.Add('first_paint', 'seconds', 'unsupported') | |
| 108 else: | |
| 109 tab.runtime.Execute(""" | |
| 110 window.__rafFired = false; | |
| 111 window.webkitRequestAnimationFrame(function() { | |
| 112 window.__rafFired = true; | |
| 113 }); | |
| 114 """) | |
| 115 util.WaitFor(lambda: tab.runtime.Evaluate('window.__rafFired'), 60) | |
| 116 | |
| 117 first_paint_secs = tab.runtime.Evaluate( | |
| 118 'window.chrome.loadTimes().firstPaintTime - ' + | |
|
tonyg
2012/11/20 23:58:18
nit: indent 4 spaces
hartmanng
2012/11/21 14:34:55
Done.
| |
| 119 'window.chrome.loadTimes().requestTime') | |
| 120 | |
| 121 results.Add('first_paint', 'seconds', round(first_paint_secs, 1)) | |
|
tonyg
2012/11/20 23:58:18
All the other results are in ms. Let's convert the
hartmanng
2012/11/21 14:34:55
Done.
| |
| 122 | |
| 90 CalcScrollResults(rendering_stats_deltas, results) | 123 CalcScrollResults(rendering_stats_deltas, results) |
| 91 if self.options.report_all_results: | 124 if self.options.report_all_results: |
| 92 for k, v in rendering_stats_deltas.iteritems(): | 125 for k, v in rendering_stats_deltas.iteritems(): |
| 93 results.Add(k, '', v) | 126 results.Add(k, '', v) |
| OLD | NEW |