Fine-tuning UI2
[spandex:spandex.git] / bd / benchmarks / ui2 / benchmark.py
1 #\r
2 # Spandex benchmark and test framework.\r
3 #\r
4 # Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).\r
5 #\r
6 # Contact: Kari J. Kangas <kari.j.kangas@nokia.com>\r
7 #          Sami Kyostila <sami.kyostila@gmail.com>\r
8 #\r
9 #   This framework is free software; you can redistribute it and/or modify it\r
10 # under the terms of the GNU Lesser General Public License as published by the\r
11 # Free Software Foundation, version 2.1 of the License.\r
12 #\r
13 #   This framework is distributed in the hope that it will be useful, but\r
14 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
15 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License\r
16 # for more details.\r
17 #\r
18 #   You should have received a copy of the GNU Lesser General Public License\r
19 # along with this framework; if not, see <http://www.gnu.org/licenses/>.\r
20 #\r
21 \r
22 #----------------------------------------------------------------------\r
23 import  sys\r
24 sys.path.append( '../../../python' )\r
25 sys.path.append( '../..' )\r
26 \r
27 import  bd\r
28 import  common\r
29 \r
30 #----------------------------------------------------------------------\r
31 suite, command          = bd.init()\r
32 \r
33 suite.targetModulePath  = '../../lib/targets'\r
34 suite.name              = 'Spandex v2 UI benchmark'\r
35 \r
36 builder                 = suite.getBuilder( command.target )\r
37 target                  = suite.getTargetModule( command.target )\r
38 modules                 = builder.actionModules\r
39 \r
40 #----------------------------------------------------------------------\r
41 ( width, height, )      = target.getScreenSize()\r
42 \r
43 import cpumem\r
44 import opengles2\r
45 \r
46 res_vga    = ( 480,  640,  )\r
47 res_720p   = ( 720,  1280, )\r
48 res_fullhd = ( 1080, 1920, )\r
49 \r
50 bg         = ( common.BACKGROUND, 'RGB8'  )\r
51 panels     = ( common.PANELS,     'RGBA8' )\r
52 groups     = ( common.GROUPS,     'RGBA8' )\r
53 icons      = ( common.ICONS,      'RGBA8' )\r
54 overlay    = ( common.OVERLAY,    'RGBA8' )\r
55 \r
56 # ----------------------------------------------------------------------\r
57 # Texture data upload with no drawing and hence no display sync.\r
58 # ----------------------------------------------------------------------\r
59 suite.addBenchmark( opengles2.TextureDataUploadBenchmark(   64,   64, 'FLOWER', 'RGBA8',       False, None, False ) )\r
60 suite.addBenchmark( opengles2.TextureDataUploadBenchmark(  128,  128, 'FLOWER', 'RGBA8',       False, None, False ) )\r
61 suite.addBenchmark( opengles2.TextureDataUploadBenchmark(  256,  256, 'FLOWER', 'RGBA8',       False, None, False ) )\r
62 suite.addBenchmark( opengles2.TextureDataUploadBenchmark(  512,  512, 'FLOWER', 'RGBA8',       False, None, False ) )\r
63 suite.addBenchmark( opengles2.TextureDataUploadBenchmark(  360,  640, 'FLOWER', 'RGBA8',       False, None, False ) )\r
64 suite.addBenchmark( opengles2.TextureDataUploadBenchmark(  640,  480, 'FLOWER', 'RGBA8',       False, None, False ) )\r
65 suite.addBenchmark( opengles2.TextureDataUploadBenchmark(  480,  800, 'FLOWER', 'RGBA8',       False, None, False ) )\r
66 suite.addBenchmark( opengles2.TextureDataUploadBenchmark(  480,  854, 'FLOWER', 'RGBA8',       False, None, False ) )\r
67 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'RGBA8',       False, None, False ) )\r
68 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 2048, 'FLOWER', 'RGBA8',       False, None, False ) )\r
69 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 2048, 2048, 'FLOWER', 'RGBA8',       False, None, False ) )\r
70 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'ETC1_RGB8',   False, None, False ) )\r
71 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'ETC1_RGB8_A', False, None, False ) )\r
72 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'PVRTC_RGB4',  False, None, False ) )\r
73 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'PVRTC_RGB2',  False, None, False ) )\r
74 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'PVRTC_RGBA4', False, None, False ) )\r
75 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'PVRTC_RGBA2', False, None, False ) )\r
76 \r
77 for sz in [ res_720p, res_fullhd ]:\r
78     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER',    'RGB565', False, None, False ) )\r
79     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER',    'RGB8',   False, None, False ) )    \r
80     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER',    'RGBA8',  False, None, False ) )\r
81     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'SOLID',     'RGBA8',  False, None, False ) )\r
82     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'CHECKER',   'RGBA8',  False, None, False ) )\r
83     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'VGRADIENT', 'RGBA8',  False, None, False ) )\r
84     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'HGRADIENT', 'RGBA8',  False, None, False ) )\r
85     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'DGRADIENT', 'RGBA8',  False, None, False ) )\r
86     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'RANDOM',    'RGBA8',  False, None, False ) )\r
87     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'PERLIN1',   'RGBA8',  False, None, False ) )\r
88     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'PERLIN2',   'RGBA8',  False, None, False ) )\r
89     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'PERLIN3',   'RGBA8',  False, None, False ) )\r
90     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER',    'RGBA8',  False, None, True  ) )\r
91     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'RANDOM',    'RGBA8',  False, None, True  ) )\r
92 \r
93 for sz in [ res_vga, res_720p, res_fullhd ]:\r
94     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD, [ bg ],                                 False, False ) )\r
95     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD, [ bg, panels ],                         False, False ) )\r
96     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD, [ bg, panels, groups ],                 False, False ) )\r
97     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD, [ bg, panels, groups, icons ],          False, False ) )\r
98     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD, [ bg, panels, groups, icons, overlay ], False, False ) )\r
99 \r
100 for sz in [ res_720p, res_fullhd ]:\r
101     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD, [ bg, panels, groups, icons, overlay ], True,  False ) )\r
102     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD, [ bg, panels, groups, icons, overlay ], False, True  ) )\r
103 \r
104 overdraw = 4\r
105 for sz in [ res_vga, res_720p, res_fullhd ]:\r
106     suite.addBenchmark( opengles2.UiThroughputBenchmark( sz, common.UPLOAD, overdraw ) )\r
107 \r
108 # ----------------------------------------------------------------------\r
109 # Ui cases, some reaching 60 FPS or more with display sync off.\r
110 # ----------------------------------------------------------------------\r
111 for sz in [ res_vga, res_720p, res_fullhd ]:\r
112     suite.addBenchmark( opengles2.Clear( sz, 1 ) )\r
113     suite.addBenchmark( opengles2.Clear( sz, 2 ) )\r
114     \r
115 suite.addBenchmark( opengles2.TextureDataUploadBenchmark(  360,  640, 'FLOWER', 'RGBA8',       1, None, False ) )\r
116 suite.addBenchmark( opengles2.TextureDataUploadBenchmark(  480,  800, 'FLOWER', 'RGBA8',       1, None, False ) )\r
117 suite.addBenchmark( opengles2.TextureDataUploadBenchmark(  854,  480, 'FLOWER', 'RGBA8',       1, None, False ) )\r
118 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'RGBA8',       1, None, False ) )\r
119 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 2048, 'FLOWER', 'RGBA8',       1, None, False ) )\r
120 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 2048, 2048, 'FLOWER', 'RGBA8',       1, None, False ) )\r
121 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'ETC1_RGB8',   1, None, False ) )\r
122 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'ETC1_RGB8_A', 1, None, False ) )\r
123 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'PVRTC_RGB4',  1, None, False ) )\r
124 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'PVRTC_RGB2',  1, None, False ) )\r
125 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'PVRTC_RGBA4', 1, None, False ) )\r
126 suite.addBenchmark( opengles2.TextureDataUploadBenchmark( 1024, 1024, 'FLOWER', 'PVRTC_RGBA2', 1, None, False ) )\r
127 \r
128 for sz in [ res_vga, res_720p, res_fullhd ]:\r
129     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER', 'RGB565', 1, None,     False ) )\r
130     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER', 'RGB8',   1, None,     False ) )\r
131     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER', 'RGBA8',  1, None,     False ) )\r
132     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER', 'RGBA8',  1, 'rot90',  False ) )\r
133     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER', 'RGBA8',  1, 'rot180', False ) )\r
134     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER', 'RGBA8',  1, 'rot270', False ) )\r
135     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER', 'RGBA8',  1, 'hflip',  False ) )\r
136     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER', 'RGBA8',  1, 'vflip',  False ) )\r
137     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'FLOWER', 'RGBA8',  1, None,     True  ) )\r
138     suite.addBenchmark( opengles2.TextureDataUploadBenchmark( sz[ 0 ], sz[ 1 ], 'RANDOM', 'RGBA8',  1, None,     True  ) )\r
139     \r
140 for sz in [ res_vga, res_720p, res_fullhd ]:\r
141     suite.addBenchmark( opengles2.UiBenchmark( sz, common.DRAW,            [ bg ],                                 False, False ) )\r
142     suite.addBenchmark( opengles2.UiBenchmark( sz, common.DRAW,            [ bg, panels ],                         False, False ) )\r
143     suite.addBenchmark( opengles2.UiBenchmark( sz, common.DRAW,            [ bg, panels, groups ],                 False, False ) )\r
144     suite.addBenchmark( opengles2.UiBenchmark( sz, common.DRAW,            [ bg, panels, groups, icons ],          False, False ) )\r
145     suite.addBenchmark( opengles2.UiBenchmark( sz, common.DRAW,            [ bg, panels, groups, icons, overlay ], False, False ) )\r
146     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD_AND_DRAW, [ bg ],                                 False, False ) )\r
147     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD_AND_DRAW, [ bg, panels ],                         False, False ) )\r
148     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD_AND_DRAW, [ bg, panels, groups ],                 False, False ) )\r
149     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD_AND_DRAW, [ bg, panels, groups, icons ],          False, False ) )\r
150     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD_AND_DRAW, [ bg, panels, groups, icons, overlay ], False, False ) )\r
151 \r
152 for sz in [ res_vga, res_720p, res_fullhd ]:\r
153     suite.addBenchmark( opengles2.UiBenchmark( sz, common.DRAW,            [ bg, panels, groups, icons, overlay ], True,  False ) )\r
154     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD_AND_DRAW, [ bg, panels, groups, icons, overlay ], True,  False ) )\r
155     suite.addBenchmark( opengles2.UiBenchmark( sz, common.DRAW,            [ bg, panels, groups, icons, overlay ], False, True  ) )\r
156     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD_AND_DRAW, [ bg, panels, groups, icons, overlay ], False, True  ) )\r
157 \r
158 # ----------------------------------------------------------------------\r
159 # Pixel fill throughput.\r
160 # ----------------------------------------------------------------------\r
161 overdraw = 4\r
162 for sz in [ res_720p, res_fullhd ]:\r
163     suite.addBenchmark( opengles2.UiThroughputBenchmark( sz, common.DRAW,            overdraw ) )\r
164     suite.addBenchmark( opengles2.UiThroughputBenchmark( sz, common.UPLOAD_AND_DRAW, overdraw ) )                      \r
165 \r
166 overdraw = 102\r
167 for sz in [ res_720p, res_fullhd ]:\r
168     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'nearest', 1, overdraw, 'opaque'                    ) )\r
169     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'nearest', 1, overdraw, 'transparent'               ) )\r
170     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'linear',  1, overdraw, 'opaque'                    ) )\r
171     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'linear',  1, overdraw, 'transparent'               ) )\r
172     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'nearest', 5, overdraw, 'opaque'                    ) )\r
173     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'nearest', 5, overdraw, 'transparent'               ) )\r
174     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'linear',  5, overdraw, 'opaque'                    ) )\r
175     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'linear',  5, overdraw, 'transparent'               ) )\r
176     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'nearest', 9, overdraw, 'opaque'                    ) )\r
177     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'nearest', 9, overdraw, 'transparent'               ) )\r
178     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'linear',  9, overdraw, 'opaque'                    ) )\r
179     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'linear',  9, overdraw, 'transparent'               ) )\r
180     \r
181     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'nearest', 1, overdraw, 'transparent back-to-front' ) )\r
182     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'nearest', 1, overdraw, 'opaque front-to-back'      ) )\r
183     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'linear',  1, overdraw, 'transparent back-to-front' ) )\r
184     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'linear',  1, overdraw, 'opaque front-to-back'      ) )\r
185     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGBA8',  'nearest', 1, overdraw, 'transparent back-to-front' ) )\r
186     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGBA8',  'nearest', 1, overdraw, 'opaque front-to-back'      ) )\r
187     \r
188     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'nearest', 5, overdraw, 'transparent back-to-front' ) )\r
189     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'nearest', 5, overdraw, 'opaque front-to-back'      ) )\r
190     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'linear',  5, overdraw, 'transparent back-to-front' ) )\r
191     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'linear',  5, overdraw, 'opaque front-to-back'      ) )\r
192     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGBA8',  'nearest', 5, overdraw, 'transparent back-to-front' ) )\r
193     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGBA8',  'nearest', 5, overdraw, 'opaque front-to-back'      ) )\r
194     \r
195     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'nearest', 9, overdraw, 'transparent back-to-front' ) )\r
196     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'nearest', 9, overdraw, 'opaque front-to-back'      ) )\r
197     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'linear',  9, overdraw, 'transparent back-to-front' ) )\r
198     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGB565', 'linear',  9, overdraw, 'opaque front-to-back'      ) )\r
199     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGBA8',  'nearest', 9, overdraw, 'transparent back-to-front' ) )\r
200     suite.addBenchmark( opengles2.TexelFillrateBenchmark( sz, 'RGBA8',  'nearest', 9, overdraw, 'opaque front-to-back'      ) )\r
201 \r
202 overdraw = 32\r
203 for sz in [ res_720p, res_fullhd ]:\r
204     suite.addBenchmark( opengles2.MultitextureFillrateBenchmark( sz, 'RGB565', 'nearest', 1, overdraw ) )\r
205     suite.addBenchmark( opengles2.MultitextureFillrateBenchmark( sz, 'RGB565', 'linear',  1, overdraw ) )\r
206     suite.addBenchmark( opengles2.MultitextureFillrateBenchmark( sz, 'RGB565', 'nearest', 2, overdraw ) )\r
207     suite.addBenchmark( opengles2.MultitextureFillrateBenchmark( sz, 'RGB565', 'linear',  2, overdraw ) )\r
208     suite.addBenchmark( opengles2.MultitextureFillrateBenchmark( sz, 'RGB565', 'nearest', 4, overdraw ) )\r
209     suite.addBenchmark( opengles2.MultitextureFillrateBenchmark( sz, 'RGB565', 'linear',  4, overdraw ) )\r
210     suite.addBenchmark( opengles2.MultitextureFillrateBenchmark( sz, 'RGB565', 'nearest', 8, overdraw ) )\r
211     suite.addBenchmark( opengles2.MultitextureFillrateBenchmark( sz, 'RGB565', 'linear',  8, overdraw ) )\r
212 \r
213 overdraw = 4\r
214 for sz in [ res_720p, res_fullhd ]:\r
215     suite.addBenchmark( opengles2.DependentTexturingBenchmark( sz, 'RGB8', 'noise',  overdraw ) )\r
216     suite.addBenchmark( opengles2.DependentTexturingBenchmark( sz, 'RGB8', 'lookup', overdraw ) )\r
217     suite.addBenchmark( opengles2.DependentTexturingBenchmark( sz, 'RGB8', 'multi',  overdraw ) )\r
218 \r
219 # ----------------------------------------------------------------------\r
220 # Vertex throughput.\r
221 # ----------------------------------------------------------------------\r
222 parameters = ( ( res_vga, 48, 32, 256, ), ) # fboSize, gridx, gridy, overdraw\r
223 for p in parameters:\r
224     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'white', ),                                       'none',  'none' ) )\r
225     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'white', ),                                       'none',  'half' ) )\r
226     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'white', ),                                       'none', 'fully' ) )\r
227     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'white', ),                                 'downscaled',  'none' ) )\r
228     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'white', ),                                 'downscaled',  'half' ) )\r
229     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'white', ),                                 'downscaled', 'fully' ) )\r
230     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'smooth', ),                                      'none',  'none' ) )\r
231     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured', 'RGB565', ),                          'none',  'none' ) )\r
232     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured', 'RGB565', ),                          'none',  'half' ) )\r
233     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured', 'RGB565', ),                          'none', 'fully' ) )\r
234     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured', 'RGB565', ),                    'downscaled',  'none' ) )\r
235     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured', 'RGB565', ),                    'downscaled',  'half' ) )\r
236     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured', 'RGB565', ),                    'downscaled', 'fully' ) )\r
237     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'per-vertex light', ),                            'none',  'none' ) )\r
238     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'per-vertex light', ),                            'none',  'half' ) )\r
239     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'per-vertex light', ),                            'none', 'fully' ) )\r
240     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'per-vertex light', ),                      'downscaled',  'none' ) )\r
241     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'per-vertex light', ),                      'downscaled',  'half' ) )\r
242     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'per-vertex light', ),                      'downscaled', 'fully' ) )\r
243     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'per-fragment light', ),                          'none',  'none' ) )\r
244     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'per-fragment light', ),                          'none',  'half' ) )\r
245     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'per-fragment light', ),                          'none', 'fully' ) )\r
246     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured per-vertex light',   'RGB565', ),       'none',  'none' ) )\r
247     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured per-vertex light',   'RGB565', ),       'none',  'half' ) )\r
248     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured per-vertex light',   'RGB565', ),       'none', 'fully' ) )\r
249     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured per-vertex light',   'RGB565', ), 'downscaled',  'none' ) )\r
250     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured per-vertex light',   'RGB565', ), 'downscaled',  'half' ) )\r
251     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured per-vertex light',   'RGB565', ), 'downscaled', 'fully' ) )\r
252     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured per-fragment light', 'RGB565', ),       'none',  'none' ) )\r
253     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured per-fragment light', 'RGB565', ),       'none',  'half' ) )\r
254     suite.addBenchmark( opengles2.TrianglesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], ( 'textured per-fragment light', 'RGB565', ),       'none', 'fully' ) )\r
255 \r
256 # ----------------------------------------------------------------------\r
257 # Particle throughput.\r
258 # ----------------------------------------------------------------------   \r
259 parameters = ( ( res_720p, 48, 32, 512, ), ) # fboSize, gridx, gridy, overdraw   \r
260 for p in parameters:\r
261     suite.addBenchmark( opengles2.ParticlesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], 10, 'RGBA8', False ) )\r
262     suite.addBenchmark( opengles2.ParticlesBenchmark( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], 10, 'RGBA8', True  ) )\r
263     \r
264 # ----------------------------------------------------------------------\r
265 # Shader effects.\r
266 # ----------------------------------------------------------------------\r
267 for sz in [ res_720p, res_fullhd ]:\r
268     suite.addBenchmark( opengles2.ColorTransformationBenchmark( 'sepia', sz[ 0 ], sz[ 1 ], 'RGB8' ) )\r
269 \r
270 for sz in [ res_720p, res_fullhd ]:\r
271     suite.addBenchmark( opengles2.ColorTransformationBenchmark( 'bleach', sz[ 0 ], sz[ 1 ], 'RGB8' ) )\r
272 \r
273 for sz in [ res_720p, res_fullhd ]:\r
274     suite.addBenchmark( opengles2.ColorTransformationBenchmark( 'tint', sz[ 0 ], sz[ 1 ], 'RGB8' ) )\r
275 \r
276 for sz in [ res_720p, res_fullhd ]:\r
277     suite.addBenchmark( opengles2.ColorTransformationBenchmark( 'hsl', sz[ 0 ], sz[ 1 ], 'RGBA8' ) )\r
278 \r
279 for sz in [ res_720p, res_fullhd ]:\r
280     suite.addBenchmark( opengles2.CompositionMaskBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8' ) )\r
281 \r
282 for sz in [ res_720p, res_fullhd ]:\r
283     suite.addBenchmark( opengles2.BlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGBA8', 1, 'nearest' ) )\r
284     suite.addBenchmark( opengles2.BlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGBA8', 2, 'nearest' ) )\r
285     suite.addBenchmark( opengles2.BlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGBA8', 4, 'nearest' ) )\r
286     suite.addBenchmark( opengles2.BlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGBA8', 8, 'nearest' ) )\r
287     suite.addBenchmark( opengles2.BlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGBA8', 1, 'linear'  ) )\r
288     suite.addBenchmark( opengles2.BlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGBA8', 2, 'linear'  ) )\r
289     suite.addBenchmark( opengles2.BlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGBA8', 4, 'linear'  ) )\r
290     suite.addBenchmark( opengles2.BlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGBA8', 8, 'linear'  ) )\r
291 \r
292 for sz in [ res_720p, res_fullhd ]:\r
293     suite.addBenchmark( opengles2.MotionBlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 16, 16, 2, 'nearest' ) )\r
294     suite.addBenchmark( opengles2.MotionBlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 16, 16, 3, 'nearest' ) )\r
295     suite.addBenchmark( opengles2.MotionBlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 16, 16, 4, 'nearest' ) )\r
296     suite.addBenchmark( opengles2.MotionBlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 16, 16, 2, 'linear'  ) )\r
297     suite.addBenchmark( opengles2.MotionBlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 16, 16, 3, 'linear'  ) )\r
298     suite.addBenchmark( opengles2.MotionBlurBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 16, 16, 4, 'linear'  ) )\r
299 \r
300 for sz in [ res_720p, res_fullhd ]:\r
301     suite.addBenchmark( opengles2.DOFBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 1, 'nearest' ) )\r
302     suite.addBenchmark( opengles2.DOFBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 2, 'nearest' ) )\r
303     suite.addBenchmark( opengles2.DOFBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 4, 'nearest' ) )\r
304     suite.addBenchmark( opengles2.DOFBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 8, 'nearest' ) )\r
305     suite.addBenchmark( opengles2.DOFBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 1, 'linear'  ) )\r
306     suite.addBenchmark( opengles2.DOFBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 2, 'linear'  ) )\r
307     suite.addBenchmark( opengles2.DOFBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 4, 'linear'  ) )\r
308     suite.addBenchmark( opengles2.DOFBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 8, 'linear'  ) )\r
309 \r
310 for sz in [ res_720p, res_fullhd ]:\r
311     suite.addBenchmark( opengles2.GlowBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 1, 'nearest' ) )\r
312     suite.addBenchmark( opengles2.GlowBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 2, 'nearest' ) )\r
313     suite.addBenchmark( opengles2.GlowBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 4, 'nearest' ) )\r
314     suite.addBenchmark( opengles2.GlowBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 8, 'nearest' ) )\r
315     suite.addBenchmark( opengles2.GlowBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 1, 'linear'  ) )\r
316     suite.addBenchmark( opengles2.GlowBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 2, 'linear'  ) )\r
317     suite.addBenchmark( opengles2.GlowBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 4, 'linear'  ) )\r
318     suite.addBenchmark( opengles2.GlowBenchmark( sz[ 0 ], sz[ 1 ], 'RGB8', 8, 'linear'  ) )\r
319 \r
320 # ----------------------------------------------------------------------\r
321 # Shader throughput.\r
322 # ----------------------------------------------------------------------\r
323 for sz in [ ( 128, 128, ), ( 256, 256, ), res_vga ]:    \r
324     suite.addBenchmark( opengles2.PulsBenchmark( sz ) )\r
325 \r
326 for sz in [ ( 256, 256, ), res_vga ]:    \r
327     suite.addBenchmark( opengles2.MandelbrotBenchmark( sz, 64  ) )\r
328     suite.addBenchmark( opengles2.MandelbrotBenchmark( sz, 128 ) )\r
329     suite.addBenchmark( opengles2.MandelbrotBenchmark( sz, 256 ) )\r
330     suite.addBenchmark( opengles2.MandelbrotBenchmark( sz, 512 ) )\r
331 \r
332 #----------------------------------------------------------------------\r
333 # Memory benchmark\r
334 #----------------------------------------------------------------------    \r
335 blockCount = 16\r
336 blockSize  = 4 * 512 * 512     # 16 MB total   \r
337 suite.addBenchmark( cpumem.BlockAccessBenchmark(  cpumem.BLOCK_ACCESS_WRITE,   blockCount, blockSize, 1, 16 ) )\r
338 suite.addBenchmark( cpumem.BlockAccessBenchmark(  cpumem.BLOCK_ACCESS_COPY,    blockCount, blockSize, 1, 16 ) )\r
339 suite.addBenchmark( cpumem.SingleAccessBenchmark( cpumem.SINGLE_ACCESS_READ,   blockCount, blockSize, 4,  1, 16, False ) )\r
340 suite.addBenchmark( cpumem.SingleAccessBenchmark( cpumem.SINGLE_ACCESS_READ,   blockCount, blockSize, 4,  1, 16, True  ) )\r
341 suite.addBenchmark( cpumem.SingleAccessBenchmark( cpumem.SINGLE_ACCESS_WRITE,  blockCount, blockSize, 4,  1, 16, False ) )\r
342 suite.addBenchmark( cpumem.SingleAccessBenchmark( cpumem.SINGLE_ACCESS_WRITE,  blockCount, blockSize, 4,  1, 16, True  ) )  \r
343 suite.addBenchmark( cpumem.SingleAccessBenchmark( cpumem.SINGLE_ACCESS_COPY,   blockCount, blockSize, 4,  1, 16, False ) )\r
344 suite.addBenchmark( cpumem.SingleAccessBenchmark( cpumem.SINGLE_ACCESS_COPY,   blockCount, blockSize, 4,  1, 16, True  ) )\r
345 suite.addBenchmark( cpumem.SingleAccessBenchmark( cpumem.SINGLE_ACCESS_MODIFY, blockCount, blockSize, 4,  1, 16, False ) )\r
346 suite.addBenchmark( cpumem.SingleAccessBenchmark( cpumem.SINGLE_ACCESS_MODIFY, blockCount, blockSize, 4,  1, 16, True  ) )\r
347 suite.addBenchmark( cpumem.SingleAccessBenchmark( cpumem.SINGLE_ACCESS_BLEND,  blockCount, blockSize, 4,  1, 16, False ) )\r
348 suite.addBenchmark( cpumem.SingleAccessBenchmark( cpumem.SINGLE_ACCESS_BLEND,  blockCount, blockSize, 4,  1, 16, True  ) )\r
349 \r
350 #----------------------------------------------------------------------\r
351 # Diagnostics\r
352 # ----------------------------------------------------------------------\r
353 \r
354 # Draw some of the benchmarks to full screen to allow comparing performance to a\r
355 # version with matching FBO.\r
356 screenSizes = [ None, ( width, height, ), ]\r
357 for sz in screenSizes:\r
358     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD, [ bg, panels, groups, icons, overlay ], False, False ) )\r
359     suite.addBenchmark( opengles2.UiBenchmark( sz, common.DRAW, [ bg, panels, groups, icons, overlay ], False, False ) )\r
360     suite.addBenchmark( opengles2.UiBenchmark( sz, common.UPLOAD_AND_DRAW, [ bg, panels, groups, icons, overlay ], False, False ) )\r
361 \r
362 suite.addBenchmark( opengles2.EglInfo(), 'EGL' )           # REQUIRES EGL\r
363 suite.addBenchmark( opengles2.ResourceProfile(), 'EGL' )   # REQUIRES EGL, EGL_NOK_resource_profiling extension\r
364 suite.addBenchmark( opengles2.Info() )\r
365     \r
366 #----------------------------------------------------------------------\r
367 \r
368 command()\r