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

Side by Side Diff: tools/perf/perf_tools/smoothness_benchmark.py

Issue 11366197: Refactoring benchmarks for perf bot efficiency. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years 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 | Annotate | Revision Log
OLDNEW
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):
21 num_frames_sent_to_screen = rendering_stats_deltas['numFramesSentToScreen'] 22 num_frames_sent_to_screen = rendering_stats_deltas['numFramesSentToScreen']
22 23
23 mean_frame_time_seconds = ( 24 mean_frame_time_seconds = (
24 rendering_stats_deltas['totalTimeInSeconds'] / 25 rendering_stats_deltas['totalTimeInSeconds'] /
25 float(num_frames_sent_to_screen)) 26 float(num_frames_sent_to_screen))
26 27
27 dropped_percent = ( 28 dropped_percent = (
28 rendering_stats_deltas['droppedFrameCount'] / 29 rendering_stats_deltas['droppedFrameCount'] /
29 float(num_frames_sent_to_screen)) 30 float(num_frames_sent_to_screen))
30 31
32 results.Add('mean_frame_time', 'ms', round(mean_frame_time_seconds * 1000, 3))
33 results.Add('dropped_percent', '%', round(dropped_percent * 100, 1),
34 data_type='unimportant')
31 35
36
37 def CalcPaintingResults(rendering_stats_deltas, results):
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)) 56 results.Add('total_paint_time', 'seconds', totalPaintTime)
52 results.Add('dropped_percent', '%', round(dropped_percent * 100, 1)) 57 results.Add('total_rasterize_time', 'seconds', totalRasterizeTime,
58 data_type='unimportant')
59 results.Add('total_pixels_painted', '', totalPixelsPainted,
60 data_type='unimportant')
61 results.Add('total_pixels_rasterized', '', totalPixelsRasterized,
62 data_type='unimportant')
63 results.Add('megapixels_painted_per_second', '', megapixelsPaintedPerSecond,
64 data_type='unimportant')
65 results.Add('megapixels_rasterized_per_second', '',
66 megapixelsRasterizedPerSecond, data_type='unimportant')
67 results.Add('total_paint_and_rasterize_time', 'seconds', totalPaintTime +
68 totalRasterizeTime, data_type='unimportant')
53 69
54 results.Add('total_paint_time', 'seconds', totalPaintTime) 70 def CalcTextureUploadResults(rendering_stats_deltas, results):
55 results.Add('total_rasterize_time', 'seconds', totalRasterizeTime) 71 if (('totalCommitCount' not in rendering_stats_deltas)
56 results.Add('total_pixels_painted', '', totalPixelsPainted) 72 or rendering_stats_deltas['totalCommitCount'] == 0) :
57 results.Add('total_pixels_rasterized', '', totalPixelsRasterized) 73 averageCommitTimeMs = 0
58 results.Add('megapixels_painted_per_second', '', megapixelsPaintedPerSecond) 74 else :
59 results.Add('megapixels_rasterized_per_second', '', 75 averageCommitTimeMs = (
60 megapixelsRasterizedPerSecond) 76 1000 * rendering_stats_deltas['totalCommitTimeInSeconds'] /
61 results.Add('total_paint_and_rasterize_time', 'seconds', totalPaintTime + 77 rendering_stats_deltas['totalCommitCount'])
62 totalRasterizeTime)
63 78
64 class ScrollingBenchmark(multi_page_benchmark.MultiPageBenchmark): 79 results.Add('texture_upload_count', 'count',
80 GetOrZero('textureUploadCount', rendering_stats_deltas))
81 results.Add('average_commit_time', 'ms', averageCommitTimeMs,
82 data_type='unimportant')
83
84 def CalcFirstPaintTimeResults(results, tab):
85 if tab.browser.is_content_shell:
86 results.Add('first_paint', 'ms', 'unsupported')
87 return
88
89 tab.runtime.Execute("""
90 window.__rafFired = false;
91 window.webkitRequestAnimationFrame(function() {
92 window.__rafFired = true;
93 });
94 """)
95 util.WaitFor(lambda: tab.runtime.Evaluate('window.__rafFired'), 60)
96
97 first_paint_secs = tab.runtime.Evaluate(
98 'window.chrome.loadTimes().firstPaintTime - ' +
99 'window.chrome.loadTimes().requestTime')
100
101 results.Add('first_paint', 'ms', round(first_paint_secs * 1000, 1))
102
103 class SmoothnessBenchmark(multi_page_benchmark.MultiPageBenchmark):
65 def __init__(self): 104 def __init__(self):
66 super(ScrollingBenchmark, self).__init__('scrolling') 105 super(SmoothnessBenchmark, self).__init__('scrolling')
67 106
68 def AddCommandLineOptions(self, parser): 107 def AddCommandLineOptions(self, parser):
69 parser.add_option('--no-gpu-benchmarking-extension', action='store_true', 108 parser.add_option('--no-gpu-benchmarking-extension', action='store_true',
70 dest='no_gpu_benchmarking_extension', 109 dest='no_gpu_benchmarking_extension',
71 help='Disable the chrome.gpuBenchmarking extension.') 110 help='Disable the chrome.gpuBenchmarking extension.')
72 parser.add_option('--report-all-results', dest='report_all_results', 111 parser.add_option('--report-all-results', dest='report_all_results',
73 action='store_true', 112 action='store_true',
74 help='Reports all data collected, not just FPS') 113 help='Reports all data collected, not just FPS')
75 114
76 def CustomizeBrowserOptions(self, options): 115 def CustomizeBrowserOptions(self, options):
77 if not options.no_gpu_benchmarking_extension: 116 if not options.no_gpu_benchmarking_extension:
78 options.extra_browser_args.append('--enable-gpu-benchmarking') 117 options.extra_browser_args.append('--enable-gpu-benchmarking')
79 118
80 def CanRunForPage(self, page): 119 def CanRunForPage(self, page):
81 return hasattr(page, 'scrolling') 120 return hasattr(page, 'scrolling')
82 121
83 def MeasurePage(self, page, tab, results): 122 def MeasurePage(self, page, tab, results):
84 rendering_stats_deltas = tab.runtime.Evaluate( 123 rendering_stats_deltas = tab.runtime.Evaluate(
85 'window.__renderingStatsDeltas') 124 'window.__renderingStatsDeltas')
86 125
87 if not (rendering_stats_deltas['numFramesSentToScreen'] > 0): 126 if not (rendering_stats_deltas['numFramesSentToScreen'] > 0):
88 raise DidNotScrollException() 127 raise DidNotScrollException()
89 128
129 CalcFirstPaintTimeResults(results, tab)
90 CalcScrollResults(rendering_stats_deltas, results) 130 CalcScrollResults(rendering_stats_deltas, results)
131 CalcPaintingResults(rendering_stats_deltas, results)
132 CalcTextureUploadResults(rendering_stats_deltas, results)
133
91 if self.options.report_all_results: 134 if self.options.report_all_results:
92 for k, v in rendering_stats_deltas.iteritems(): 135 for k, v in rendering_stats_deltas.iteritems():
93 results.Add(k, '', v) 136 results.Add(k, '', v)
OLDNEW
« no previous file with comments | « tools/perf/perf_tools/scrolling_benchmark_unittest.py ('k') | tools/perf/perf_tools/smoothness_benchmark_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698