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

Side by Side Diff: gpu/command_buffer/build_gles2_cmd_buffer.py

Issue 245923008: Optimize GLES2DecoderImpl::ApplyDirtyState. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase on refactored gles2_cmd_decoder_unittest.cc Created 6 years, 7 months 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
« no previous file with comments | « no previous file | gpu/command_buffer/service/context_state.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """code generator for GLES2 command buffers.""" 6 """code generator for GLES2 command buffers."""
7 7
8 import itertools 8 import itertools
9 import os 9 import os
10 import os.path 10 import os.path
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 71
72 # Capabilites selected with glEnable 72 # Capabilites selected with glEnable
73 _CAPABILITY_FLAGS = [ 73 _CAPABILITY_FLAGS = [
74 {'name': 'blend'}, 74 {'name': 'blend'},
75 {'name': 'cull_face'}, 75 {'name': 'cull_face'},
76 {'name': 'depth_test', 'state_flag': 'framebuffer_state_.clear_state_dirty'}, 76 {'name': 'depth_test', 'state_flag': 'framebuffer_state_.clear_state_dirty'},
77 {'name': 'dither', 'default': True}, 77 {'name': 'dither', 'default': True},
78 {'name': 'polygon_offset_fill'}, 78 {'name': 'polygon_offset_fill'},
79 {'name': 'sample_alpha_to_coverage'}, 79 {'name': 'sample_alpha_to_coverage'},
80 {'name': 'sample_coverage'}, 80 {'name': 'sample_coverage'},
81 {'name': 'scissor_test', 81 {'name': 'scissor_test'},
82 'state_flag': 'framebuffer_state_.clear_state_dirty'},
83 {'name': 'stencil_test', 82 {'name': 'stencil_test',
84 'state_flag': 'framebuffer_state_.clear_state_dirty'}, 83 'state_flag': 'framebuffer_state_.clear_state_dirty'},
85 ] 84 ]
86 85
87 _STATES = { 86 _STATES = {
88 'ClearColor': { 87 'ClearColor': {
89 'type': 'Normal', 88 'type': 'Normal',
90 'func': 'ClearColor', 89 'func': 'ClearColor',
91 'enum': 'GL_COLOR_CLEAR_VALUE', 90 'enum': 'GL_COLOR_CLEAR_VALUE',
92 'states': [ 91 'states': [
93 {'name': 'color_clear_red', 'type': 'GLfloat', 'default': '0.0f'}, 92 {'name': 'color_clear_red', 'type': 'GLfloat', 'default': '0.0f'},
94 {'name': 'color_clear_green', 'type': 'GLfloat', 'default': '0.0f'}, 93 {'name': 'color_clear_green', 'type': 'GLfloat', 'default': '0.0f'},
95 {'name': 'color_clear_blue', 'type': 'GLfloat', 'default': '0.0f'}, 94 {'name': 'color_clear_blue', 'type': 'GLfloat', 'default': '0.0f'},
96 {'name': 'color_clear_alpha', 'type': 'GLfloat', 'default': '0.0f'}, 95 {'name': 'color_clear_alpha', 'type': 'GLfloat', 'default': '0.0f'},
97 ], 96 ],
98 }, 97 },
99 'ClearDepthf': { 98 'ClearDepthf': {
100 'type': 'Normal', 99 'type': 'Normal',
101 'func': 'ClearDepth', 100 'func': 'ClearDepth',
102 'enum': 'GL_DEPTH_CLEAR_VALUE', 101 'enum': 'GL_DEPTH_CLEAR_VALUE',
103 'states': [ 102 'states': [
104 {'name': 'depth_clear', 'type': 'GLclampf', 'default': '1.0f'}, 103 {'name': 'depth_clear', 'type': 'GLclampf', 'default': '1.0f'},
105 ], 104 ],
106 }, 105 },
107 'ColorMask': { 106 'ColorMask': {
108 'type': 'Normal', 107 'type': 'Normal',
109 'func': 'ColorMask', 108 'func': 'ColorMask',
110 'enum': 'GL_COLOR_WRITEMASK', 109 'enum': 'GL_COLOR_WRITEMASK',
111 'states': [ 110 'states': [
112 {'name': 'color_mask_red', 'type': 'GLboolean', 'default': 'true'}, 111 {
113 {'name': 'color_mask_green', 'type': 'GLboolean', 'default': 'true'}, 112 'name': 'color_mask_red',
114 {'name': 'color_mask_blue', 'type': 'GLboolean', 'default': 'true'}, 113 'type': 'GLboolean',
115 {'name': 'color_mask_alpha', 'type': 'GLboolean', 'default': 'true'}, 114 'default': 'true',
115 'cached': True
116 },
117 {
118 'name': 'color_mask_green',
119 'type': 'GLboolean',
120 'default': 'true',
121 'cached': True
122 },
123 {
124 'name': 'color_mask_blue',
125 'type': 'GLboolean',
126 'default': 'true',
127 'cached': True
128 },
129 {
130 'name': 'color_mask_alpha',
131 'type': 'GLboolean',
132 'default': 'true',
133 'cached': True
134 },
116 ], 135 ],
117 'state_flag': 'framebuffer_state_.clear_state_dirty', 136 'state_flag': 'framebuffer_state_.clear_state_dirty',
118 }, 137 },
119 'ClearStencil': { 138 'ClearStencil': {
120 'type': 'Normal', 139 'type': 'Normal',
121 'func': 'ClearStencil', 140 'func': 'ClearStencil',
122 'enum': 'GL_STENCIL_CLEAR_VALUE', 141 'enum': 'GL_STENCIL_CLEAR_VALUE',
123 'states': [ 142 'states': [
124 {'name': 'stencil_clear', 'type': 'GLint', 'default': '0'}, 143 {'name': 'stencil_clear', 'type': 'GLint', 'default': '0'},
125 ], 144 ],
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 'StencilMask': { 274 'StencilMask': {
256 'type': 'FrontBack', 275 'type': 'FrontBack',
257 'func': 'StencilMaskSeparate', 276 'func': 'StencilMaskSeparate',
258 'state_flag': 'framebuffer_state_.clear_state_dirty', 277 'state_flag': 'framebuffer_state_.clear_state_dirty',
259 'states': [ 278 'states': [
260 { 279 {
261 'name': 'stencil_front_writemask', 280 'name': 'stencil_front_writemask',
262 'type': 'GLuint', 281 'type': 'GLuint',
263 'enum': 'GL_STENCIL_WRITEMASK', 282 'enum': 'GL_STENCIL_WRITEMASK',
264 'default': '0xFFFFFFFFU', 283 'default': '0xFFFFFFFFU',
284 'cached': True,
265 }, 285 },
266 { 286 {
267 'name': 'stencil_back_writemask', 287 'name': 'stencil_back_writemask',
268 'type': 'GLuint', 288 'type': 'GLuint',
269 'enum': 'GL_STENCIL_BACK_WRITEMASK', 289 'enum': 'GL_STENCIL_BACK_WRITEMASK',
270 'default': '0xFFFFFFFFU', 290 'default': '0xFFFFFFFFU',
291 'cached': True,
271 }, 292 },
272 ], 293 ],
273 }, 294 },
274 'StencilOp': { 295 'StencilOp': {
275 'type': 'FrontBack', 296 'type': 'FrontBack',
276 'func': 'StencilOpSeparate', 297 'func': 'StencilOpSeparate',
277 'states': [ 298 'states': [
278 { 299 {
279 'name': 'stencil_front_fail_op', 300 'name': 'stencil_front_fail_op',
280 'type': 'GLenum', 301 'type': 'GLenum',
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 'type': 'GLfloat', 425 'type': 'GLfloat',
405 'default': '1.0f', 426 'default': '1.0f',
406 'range_checks': [{'check': "<= 0.0f", 'test_value': "0.0f"}], 427 'range_checks': [{'check': "<= 0.0f", 'test_value': "0.0f"}],
407 }], 428 }],
408 }, 429 },
409 'DepthMask': { 430 'DepthMask': {
410 'type': 'Normal', 431 'type': 'Normal',
411 'func': 'DepthMask', 432 'func': 'DepthMask',
412 'enum': 'GL_DEPTH_WRITEMASK', 433 'enum': 'GL_DEPTH_WRITEMASK',
413 'states': [ 434 'states': [
414 {'name': 'depth_mask', 'type': 'GLboolean', 'default': 'true'}, 435 {
436 'name': 'depth_mask',
437 'type': 'GLboolean',
438 'default': 'true',
439 'cached': True
440 },
415 ], 441 ],
416 'state_flag': 'framebuffer_state_.clear_state_dirty', 442 'state_flag': 'framebuffer_state_.clear_state_dirty',
417 }, 443 },
418 'Scissor': { 444 'Scissor': {
419 'type': 'Normal', 445 'type': 'Normal',
420 'func': 'Scissor', 446 'func': 'Scissor',
421 'enum': 'GL_SCISSOR_BOX', 447 'enum': 'GL_SCISSOR_BOX',
422 'states': [ 448 'states': [
423 # NOTE: These defaults reset at GLES2DecoderImpl::Initialization. 449 # NOTE: These defaults reset at GLES2DecoderImpl::Initialization.
424 { 450 {
(...skipping 2164 matching lines...) Expand 10 before | Expand all | Expand 10 after
2589 the lower-case identifier. 2615 the lower-case identifier.
2590 """ 2616 """
2591 return '_'.join(words) 2617 return '_'.join(words)
2592 2618
2593 2619
2594 def ToUnderscore(input_string): 2620 def ToUnderscore(input_string):
2595 """converts CamelCase to camel_case.""" 2621 """converts CamelCase to camel_case."""
2596 words = SplitWords(input_string) 2622 words = SplitWords(input_string)
2597 return Lower(words) 2623 return Lower(words)
2598 2624
2625 def CachedStateName(item):
2626 if item.get('cached', False):
2627 return 'cached_' + item['name']
2628 return item['name']
2629
2599 2630
2600 class CWriter(object): 2631 class CWriter(object):
2601 """Writes to a file formatting it for Google's style guidelines.""" 2632 """Writes to a file formatting it for Google's style guidelines."""
2602 2633
2603 def __init__(self, filename): 2634 def __init__(self, filename):
2604 self.filename = filename 2635 self.filename = filename
2605 self.file_num = 0 2636 self.file_num = 0
2606 self.content = [] 2637 self.content = []
2607 2638
2608 def SetFileNum(self, num): 2639 def SetFileNum(self, num):
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
2946 'all_but_last_args': ", ".join(arg_strings[:-1]), 2977 'all_but_last_args': ", ".join(arg_strings[:-1]),
2947 'gl_args': ", ".join(gl_arg_strings), 2978 'gl_args': ", ".join(gl_arg_strings),
2948 'parse_result': parse_result, 2979 'parse_result': parse_result,
2949 'gl_error_test': gl_error_test, 2980 'gl_error_test': gl_error_test,
2950 } 2981 }
2951 vars.update(extra) 2982 vars.update(extra)
2952 file.Write(test % vars) 2983 file.Write(test % vars)
2953 2984
2954 def WriteServiceUnitTest(self, func, file): 2985 def WriteServiceUnitTest(self, func, file):
2955 """Writes the service unit test for a command.""" 2986 """Writes the service unit test for a command."""
2956 valid_test = """ 2987
2957 TEST_F(%(test_name)s, %(name)sValidArgs) { 2988 if func.name == 'Enable':
2989 valid_test = """
2990 TEST_P(%(test_name)s, %(name)sValidArgs) {
2991 SetupExpectationsForEnableDisable(%(gl_args)s, true);
2992 SpecializedSetup<cmds::%(name)s, 0>(true);
2993 cmds::%(name)s cmd;
2994 cmd.Init(%(args)s);
2995 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2996 EXPECT_EQ(GL_NO_ERROR, GetGLError());
2997 }
2998 """
2999 elif func.name == 'Disable':
3000 valid_test = """
3001 TEST_P(%(test_name)s, %(name)sValidArgs) {
3002 SetupExpectationsForEnableDisable(%(gl_args)s, false);
3003 SpecializedSetup<cmds::%(name)s, 0>(true);
3004 cmds::%(name)s cmd;
3005 cmd.Init(%(args)s);
3006 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3007 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3008 }
3009 """
3010 else:
3011 valid_test = """
3012 TEST_P(%(test_name)s, %(name)sValidArgs) {
2958 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); 3013 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
2959 SpecializedSetup<cmds::%(name)s, 0>(true); 3014 SpecializedSetup<cmds::%(name)s, 0>(true);
2960 cmds::%(name)s cmd; 3015 cmds::%(name)s cmd;
2961 cmd.Init(%(args)s); 3016 cmd.Init(%(args)s);
2962 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3017 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2963 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3018 EXPECT_EQ(GL_NO_ERROR, GetGLError());
2964 } 3019 }
2965 """ 3020 """
2966 self.WriteValidUnitTest(func, file, valid_test) 3021 self.WriteValidUnitTest(func, file, valid_test)
2967 3022
2968 invalid_test = """ 3023 invalid_test = """
2969 TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { 3024 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
2970 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); 3025 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
2971 SpecializedSetup<cmds::%(name)s, 0>(false); 3026 SpecializedSetup<cmds::%(name)s, 0>(false);
2972 cmds::%(name)s cmd; 3027 cmds::%(name)s cmd;
2973 cmd.Init(%(args)s); 3028 cmd.Init(%(args)s);
2974 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s 3029 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s
2975 } 3030 }
2976 """ 3031 """
2977 self.WriteInvalidUnitTest(func, file, invalid_test) 3032 self.WriteInvalidUnitTest(func, file, invalid_test)
2978 3033
2979 def WriteImmediateServiceUnitTest(self, func, file): 3034 def WriteImmediateServiceUnitTest(self, func, file):
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
3231 file.Write(" }\n") 3286 file.Write(" }\n")
3232 code = [] 3287 code = []
3233 for ndx,item in enumerate(states): 3288 for ndx,item in enumerate(states):
3234 code.append("state_.%s != %s" % (item['name'], args[ndx].name)) 3289 code.append("state_.%s != %s" % (item['name'], args[ndx].name))
3235 file.Write(" if (%s) {\n" % " ||\n ".join(code)) 3290 file.Write(" if (%s) {\n" % " ||\n ".join(code))
3236 for ndx,item in enumerate(states): 3291 for ndx,item in enumerate(states):
3237 file.Write(" state_.%s = %s;\n" % (item['name'], args[ndx].name)) 3292 file.Write(" state_.%s = %s;\n" % (item['name'], args[ndx].name))
3238 if 'state_flag' in state: 3293 if 'state_flag' in state:
3239 file.Write(" %s = true;\n" % state['state_flag']) 3294 file.Write(" %s = true;\n" % state['state_flag'])
3240 if not func.GetInfo("no_gl"): 3295 if not func.GetInfo("no_gl"):
3296 for ndx,item in enumerate(states):
3297 if item.get('cached', False):
3298 file.Write(" state_.%s = %s;\n" %
3299 (CachedStateName(item), args[ndx].name))
3241 file.Write(" %s(%s);\n" % 3300 file.Write(" %s(%s);\n" %
3242 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) 3301 (func.GetGLFunctionName(), func.MakeOriginalArgString("")))
3243 file.Write(" }\n") 3302 file.Write(" }\n")
3244 3303
3245 def WriteServiceUnitTest(self, func, file): 3304 def WriteServiceUnitTest(self, func, file):
3246 """Overrriden from TypeHandler.""" 3305 """Overrriden from TypeHandler."""
3247 TypeHandler.WriteServiceUnitTest(self, func, file) 3306 TypeHandler.WriteServiceUnitTest(self, func, file)
3248 state_name = func.GetInfo('state') 3307 state_name = func.GetInfo('state')
3249 state = _STATES[state_name] 3308 state = _STATES[state_name]
3250 states = state['states'] 3309 states = state['states']
3251 for ndx,item in enumerate(states): 3310 for ndx,item in enumerate(states):
3252 if 'range_checks' in item: 3311 if 'range_checks' in item:
3253 for check_ndx, range_check in enumerate(item['range_checks']): 3312 for check_ndx, range_check in enumerate(item['range_checks']):
3254 valid_test = """ 3313 valid_test = """
3255 TEST_F(%(test_name)s, %(name)sInvalidValue%(ndx)d_%(check_ndx)d) { 3314 TEST_P(%(test_name)s, %(name)sInvalidValue%(ndx)d_%(check_ndx)d) {
3256 SpecializedSetup<cmds::%(name)s, 0>(false); 3315 SpecializedSetup<cmds::%(name)s, 0>(false);
3257 cmds::%(name)s cmd; 3316 cmds::%(name)s cmd;
3258 cmd.Init(%(args)s); 3317 cmd.Init(%(args)s);
3259 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3318 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3260 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 3319 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
3261 } 3320 }
3262 """ 3321 """
3263 name = func.name 3322 name = func.name
3264 arg_strings = [] 3323 arg_strings = []
3265 for count, arg in enumerate(func.GetOriginalArgs()): 3324 for count, arg in enumerate(func.GetOriginalArgs()):
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
3717 """Handler for glBind___ type functions.""" 3776 """Handler for glBind___ type functions."""
3718 3777
3719 def __init__(self): 3778 def __init__(self):
3720 TypeHandler.__init__(self) 3779 TypeHandler.__init__(self)
3721 3780
3722 def WriteServiceUnitTest(self, func, file): 3781 def WriteServiceUnitTest(self, func, file):
3723 """Overrriden from TypeHandler.""" 3782 """Overrriden from TypeHandler."""
3724 3783
3725 if len(func.GetOriginalArgs()) == 1: 3784 if len(func.GetOriginalArgs()) == 1:
3726 valid_test = """ 3785 valid_test = """
3727 TEST_F(%(test_name)s, %(name)sValidArgs) { 3786 TEST_P(%(test_name)s, %(name)sValidArgs) {
3728 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); 3787 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
3729 SpecializedSetup<cmds::%(name)s, 0>(true); 3788 SpecializedSetup<cmds::%(name)s, 0>(true);
3730 cmds::%(name)s cmd; 3789 cmds::%(name)s cmd;
3731 cmd.Init(%(args)s); 3790 cmd.Init(%(args)s);
3732 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3791 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3733 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3792 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3734 } 3793 }
3735 """ 3794 """
3736 if func.GetInfo("gen_func"): 3795 if func.GetInfo("gen_func"):
3737 valid_test += """ 3796 valid_test += """
3738 TEST_F(%(test_name)s, %(name)sValidArgsNewId) { 3797 TEST_P(%(test_name)s, %(name)sValidArgsNewId) {
3739 EXPECT_CALL(*gl_, %(gl_func_name)s(kNewServiceId)); 3798 EXPECT_CALL(*gl_, %(gl_func_name)s(kNewServiceId));
3740 EXPECT_CALL(*gl_, %(gl_gen_func_name)s(1, _)) 3799 EXPECT_CALL(*gl_, %(gl_gen_func_name)s(1, _))
3741 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); 3800 .WillOnce(SetArgumentPointee<1>(kNewServiceId));
3742 SpecializedSetup<cmds::%(name)s, 0>(true); 3801 SpecializedSetup<cmds::%(name)s, 0>(true);
3743 cmds::%(name)s cmd; 3802 cmds::%(name)s cmd;
3744 cmd.Init(kNewClientId); 3803 cmd.Init(kNewClientId);
3745 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3804 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3746 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3805 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3747 EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL); 3806 EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL);
3748 } 3807 }
3749 """ 3808 """
3750 self.WriteValidUnitTest(func, file, valid_test, { 3809 self.WriteValidUnitTest(func, file, valid_test, {
3751 'resource_type': func.GetOriginalArgs()[0].resource_type, 3810 'resource_type': func.GetOriginalArgs()[0].resource_type,
3752 'gl_gen_func_name': func.GetInfo("gen_func"), 3811 'gl_gen_func_name': func.GetInfo("gen_func"),
3753 }) 3812 })
3754 else: 3813 else:
3755 valid_test = """ 3814 valid_test = """
3756 TEST_F(%(test_name)s, %(name)sValidArgs) { 3815 TEST_P(%(test_name)s, %(name)sValidArgs) {
3757 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); 3816 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
3758 SpecializedSetup<cmds::%(name)s, 0>(true); 3817 SpecializedSetup<cmds::%(name)s, 0>(true);
3759 cmds::%(name)s cmd; 3818 cmds::%(name)s cmd;
3760 cmd.Init(%(args)s); 3819 cmd.Init(%(args)s);
3761 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3820 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3762 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3821 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3763 } 3822 }
3764 """ 3823 """
3765 if func.GetInfo("gen_func"): 3824 if func.GetInfo("gen_func"):
3766 valid_test += """ 3825 valid_test += """
3767 TEST_F(%(test_name)s, %(name)sValidArgsNewId) { 3826 TEST_P(%(test_name)s, %(name)sValidArgsNewId) {
3768 EXPECT_CALL(*gl_, %(gl_func_name)s(%(first_gl_arg)s, kNewServiceId)); 3827 EXPECT_CALL(*gl_, %(gl_func_name)s(%(first_gl_arg)s, kNewServiceId));
3769 EXPECT_CALL(*gl_, %(gl_gen_func_name)s(1, _)) 3828 EXPECT_CALL(*gl_, %(gl_gen_func_name)s(1, _))
3770 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); 3829 .WillOnce(SetArgumentPointee<1>(kNewServiceId));
3771 SpecializedSetup<cmds::%(name)s, 0>(true); 3830 SpecializedSetup<cmds::%(name)s, 0>(true);
3772 cmds::%(name)s cmd; 3831 cmds::%(name)s cmd;
3773 cmd.Init(%(first_arg)s, kNewClientId); 3832 cmd.Init(%(first_arg)s, kNewClientId);
3774 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3833 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3775 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3834 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3776 EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL); 3835 EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL);
3777 } 3836 }
3778 """ 3837 """
3779 self.WriteValidUnitTest(func, file, valid_test, { 3838 self.WriteValidUnitTest(func, file, valid_test, {
3780 'first_arg': func.GetOriginalArgs()[0].GetValidArg(func, 0, 0), 3839 'first_arg': func.GetOriginalArgs()[0].GetValidArg(func, 0, 0),
3781 'first_gl_arg': func.GetOriginalArgs()[0].GetValidGLArg(func, 0, 0), 3840 'first_gl_arg': func.GetOriginalArgs()[0].GetValidGLArg(func, 0, 0),
3782 'resource_type': func.GetOriginalArgs()[1].resource_type, 3841 'resource_type': func.GetOriginalArgs()[1].resource_type,
3783 'gl_gen_func_name': func.GetInfo("gen_func"), 3842 'gl_gen_func_name': func.GetInfo("gen_func"),
3784 }) 3843 })
3785 3844
3786 invalid_test = """ 3845 invalid_test = """
3787 TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { 3846 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
3788 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); 3847 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
3789 SpecializedSetup<cmds::%(name)s, 0>(false); 3848 SpecializedSetup<cmds::%(name)s, 0>(false);
3790 cmds::%(name)s cmd; 3849 cmds::%(name)s cmd;
3791 cmd.Init(%(args)s); 3850 cmd.Init(%(args)s);
3792 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s 3851 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s
3793 } 3852 }
3794 """ 3853 """
3795 self.WriteInvalidUnitTest(func, file, invalid_test) 3854 self.WriteInvalidUnitTest(func, file, invalid_test)
3796 3855
3797 def WriteGLES2Implementation(self, func, file): 3856 def WriteGLES2Implementation(self, func, file):
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
3964 } 4023 }
3965 """ 4024 """
3966 file.Write(code % { 4025 file.Write(code % {
3967 'name': func.name, 4026 'name': func.name,
3968 'types': func.GetInfo('resource_types'), 4027 'types': func.GetInfo('resource_types'),
3969 }) 4028 })
3970 4029
3971 def WriteServiceUnitTest(self, func, file): 4030 def WriteServiceUnitTest(self, func, file):
3972 """Overrriden from TypeHandler.""" 4031 """Overrriden from TypeHandler."""
3973 valid_test = """ 4032 valid_test = """
3974 TEST_F(%(test_name)s, %(name)sValidArgs) { 4033 TEST_P(%(test_name)s, %(name)sValidArgs) {
3975 EXPECT_CALL(*gl_, %(gl_func_name)s(1, _)) 4034 EXPECT_CALL(*gl_, %(gl_func_name)s(1, _))
3976 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); 4035 .WillOnce(SetArgumentPointee<1>(kNewServiceId));
3977 GetSharedMemoryAs<GLuint*>()[0] = kNewClientId; 4036 GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
3978 SpecializedSetup<cmds::%(name)s, 0>(true); 4037 SpecializedSetup<cmds::%(name)s, 0>(true);
3979 cmds::%(name)s cmd; 4038 cmds::%(name)s cmd;
3980 cmd.Init(%(args)s); 4039 cmd.Init(%(args)s);
3981 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4040 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3982 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4041 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3983 EXPECT_TRUE(Get%(resource_name)s(kNewClientId) != NULL); 4042 EXPECT_TRUE(Get%(resource_name)s(kNewClientId) != NULL);
3984 } 4043 }
3985 """ 4044 """
3986 self.WriteValidUnitTest(func, file, valid_test, { 4045 self.WriteValidUnitTest(func, file, valid_test, {
3987 'resource_name': func.GetInfo('resource_type'), 4046 'resource_name': func.GetInfo('resource_type'),
3988 }) 4047 })
3989 invalid_test = """ 4048 invalid_test = """
3990 TEST_F(%(test_name)s, %(name)sInvalidArgs) { 4049 TEST_P(%(test_name)s, %(name)sInvalidArgs) {
3991 EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0); 4050 EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0);
3992 GetSharedMemoryAs<GLuint*>()[0] = client_%(resource_name)s_id_; 4051 GetSharedMemoryAs<GLuint*>()[0] = client_%(resource_name)s_id_;
3993 SpecializedSetup<cmds::%(name)s, 0>(false); 4052 SpecializedSetup<cmds::%(name)s, 0>(false);
3994 cmds::%(name)s cmd; 4053 cmds::%(name)s cmd;
3995 cmd.Init(%(args)s); 4054 cmd.Init(%(args)s);
3996 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd)); 4055 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
3997 } 4056 }
3998 """ 4057 """
3999 self.WriteValidUnitTest(func, file, invalid_test, { 4058 self.WriteValidUnitTest(func, file, invalid_test, {
4000 'resource_name': func.GetInfo('resource_type').lower(), 4059 'resource_name': func.GetInfo('resource_type').lower(),
4001 }) 4060 })
4002 4061
4003 def WriteImmediateServiceUnitTest(self, func, file): 4062 def WriteImmediateServiceUnitTest(self, func, file):
4004 """Overrriden from TypeHandler.""" 4063 """Overrriden from TypeHandler."""
4005 valid_test = """ 4064 valid_test = """
4006 TEST_F(%(test_name)s, %(name)sValidArgs) { 4065 TEST_P(%(test_name)s, %(name)sValidArgs) {
4007 EXPECT_CALL(*gl_, %(gl_func_name)s(1, _)) 4066 EXPECT_CALL(*gl_, %(gl_func_name)s(1, _))
4008 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); 4067 .WillOnce(SetArgumentPointee<1>(kNewServiceId));
4009 cmds::%(name)s* cmd = GetImmediateAs<cmds::%(name)s>(); 4068 cmds::%(name)s* cmd = GetImmediateAs<cmds::%(name)s>();
4010 GLuint temp = kNewClientId; 4069 GLuint temp = kNewClientId;
4011 SpecializedSetup<cmds::%(name)s, 0>(true); 4070 SpecializedSetup<cmds::%(name)s, 0>(true);
4012 cmd->Init(1, &temp); 4071 cmd->Init(1, &temp);
4013 EXPECT_EQ(error::kNoError, 4072 EXPECT_EQ(error::kNoError,
4014 ExecuteImmediateCmd(*cmd, sizeof(temp))); 4073 ExecuteImmediateCmd(*cmd, sizeof(temp)));
4015 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4074 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4016 EXPECT_TRUE(Get%(resource_name)s(kNewClientId) != NULL); 4075 EXPECT_TRUE(Get%(resource_name)s(kNewClientId) != NULL);
4017 } 4076 }
4018 """ 4077 """
4019 self.WriteValidUnitTest(func, file, valid_test, { 4078 self.WriteValidUnitTest(func, file, valid_test, {
4020 'resource_name': func.GetInfo('resource_type'), 4079 'resource_name': func.GetInfo('resource_type'),
4021 }) 4080 })
4022 invalid_test = """ 4081 invalid_test = """
4023 TEST_F(%(test_name)s, %(name)sInvalidArgs) { 4082 TEST_P(%(test_name)s, %(name)sInvalidArgs) {
4024 EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0); 4083 EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0);
4025 cmds::%(name)s* cmd = GetImmediateAs<cmds::%(name)s>(); 4084 cmds::%(name)s* cmd = GetImmediateAs<cmds::%(name)s>();
4026 SpecializedSetup<cmds::%(name)s, 0>(false); 4085 SpecializedSetup<cmds::%(name)s, 0>(false);
4027 cmd->Init(1, &client_%(resource_name)s_id_); 4086 cmd->Init(1, &client_%(resource_name)s_id_);
4028 EXPECT_EQ(error::kInvalidArguments, 4087 EXPECT_EQ(error::kInvalidArguments,
4029 ExecuteImmediateCmd(*cmd, sizeof(&client_%(resource_name)s_id_))); 4088 ExecuteImmediateCmd(*cmd, sizeof(&client_%(resource_name)s_id_)));
4030 } 4089 }
4031 """ 4090 """
4032 self.WriteValidUnitTest(func, file, invalid_test, { 4091 self.WriteValidUnitTest(func, file, invalid_test, {
4033 'resource_name': func.GetInfo('resource_type').lower(), 4092 'resource_name': func.GetInfo('resource_type').lower(),
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
4130 def __init__(self): 4189 def __init__(self):
4131 TypeHandler.__init__(self) 4190 TypeHandler.__init__(self)
4132 4191
4133 def InitFunction(self, func): 4192 def InitFunction(self, func):
4134 """Overrriden from TypeHandler.""" 4193 """Overrriden from TypeHandler."""
4135 func.AddCmdArg(Argument("client_id", 'uint32')) 4194 func.AddCmdArg(Argument("client_id", 'uint32'))
4136 4195
4137 def WriteServiceUnitTest(self, func, file): 4196 def WriteServiceUnitTest(self, func, file):
4138 """Overrriden from TypeHandler.""" 4197 """Overrriden from TypeHandler."""
4139 valid_test = """ 4198 valid_test = """
4140 TEST_F(%(test_name)s, %(name)sValidArgs) { 4199 TEST_P(%(test_name)s, %(name)sValidArgs) {
4141 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)) 4200 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s))
4142 .WillOnce(Return(kNewServiceId)); 4201 .WillOnce(Return(kNewServiceId));
4143 SpecializedSetup<cmds::%(name)s, 0>(true); 4202 SpecializedSetup<cmds::%(name)s, 0>(true);
4144 cmds::%(name)s cmd; 4203 cmds::%(name)s cmd;
4145 cmd.Init(%(args)s%(comma)skNewClientId); 4204 cmd.Init(%(args)s%(comma)skNewClientId);
4146 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4205 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4147 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4206 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4148 EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL); 4207 EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL);
4149 } 4208 }
4150 """ 4209 """
4151 comma = "" 4210 comma = ""
4152 if len(func.GetOriginalArgs()): 4211 if len(func.GetOriginalArgs()):
4153 comma =", " 4212 comma =", "
4154 self.WriteValidUnitTest(func, file, valid_test, { 4213 self.WriteValidUnitTest(func, file, valid_test, {
4155 'comma': comma, 4214 'comma': comma,
4156 'resource_type': func.name[6:], 4215 'resource_type': func.name[6:],
4157 }) 4216 })
4158 invalid_test = """ 4217 invalid_test = """
4159 TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { 4218 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
4160 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); 4219 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
4161 SpecializedSetup<cmds::%(name)s, 0>(false); 4220 SpecializedSetup<cmds::%(name)s, 0>(false);
4162 cmds::%(name)s cmd; 4221 cmds::%(name)s cmd;
4163 cmd.Init(%(args)s%(comma)skNewClientId); 4222 cmd.Init(%(args)s%(comma)skNewClientId);
4164 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));%(gl_error_test)s 4223 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));%(gl_error_test)s
4165 } 4224 }
4166 """ 4225 """
4167 self.WriteInvalidUnitTest(func, file, invalid_test, { 4226 self.WriteInvalidUnitTest(func, file, invalid_test, {
4168 'comma': comma, 4227 'comma': comma,
4169 }) 4228 })
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
4261 } 4320 }
4262 """ 4321 """
4263 file.Write(code % { 4322 file.Write(code % {
4264 'name': func.name, 4323 'name': func.name,
4265 'types': func.GetInfo('resource_types'), 4324 'types': func.GetInfo('resource_types'),
4266 }) 4325 })
4267 4326
4268 def WriteServiceUnitTest(self, func, file): 4327 def WriteServiceUnitTest(self, func, file):
4269 """Overrriden from TypeHandler.""" 4328 """Overrriden from TypeHandler."""
4270 valid_test = """ 4329 valid_test = """
4271 TEST_F(%(test_name)s, %(name)sValidArgs) { 4330 TEST_P(%(test_name)s, %(name)sValidArgs) {
4272 EXPECT_CALL( 4331 EXPECT_CALL(
4273 *gl_, 4332 *gl_,
4274 %(gl_func_name)s(1, Pointee(kService%(upper_resource_name)sId))) 4333 %(gl_func_name)s(1, Pointee(kService%(upper_resource_name)sId)))
4275 .Times(1); 4334 .Times(1);
4276 GetSharedMemoryAs<GLuint*>()[0] = client_%(resource_name)s_id_; 4335 GetSharedMemoryAs<GLuint*>()[0] = client_%(resource_name)s_id_;
4277 SpecializedSetup<cmds::%(name)s, 0>(true); 4336 SpecializedSetup<cmds::%(name)s, 0>(true);
4278 cmds::%(name)s cmd; 4337 cmds::%(name)s cmd;
4279 cmd.Init(%(args)s); 4338 cmd.Init(%(args)s);
4280 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4339 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4281 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4340 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4282 EXPECT_TRUE( 4341 EXPECT_TRUE(
4283 Get%(upper_resource_name)s(client_%(resource_name)s_id_) == NULL); 4342 Get%(upper_resource_name)s(client_%(resource_name)s_id_) == NULL);
4284 } 4343 }
4285 """ 4344 """
4286 self.WriteValidUnitTest(func, file, valid_test, { 4345 self.WriteValidUnitTest(func, file, valid_test, {
4287 'resource_name': func.GetInfo('resource_type').lower(), 4346 'resource_name': func.GetInfo('resource_type').lower(),
4288 'upper_resource_name': func.GetInfo('resource_type'), 4347 'upper_resource_name': func.GetInfo('resource_type'),
4289 }) 4348 })
4290 invalid_test = """ 4349 invalid_test = """
4291 TEST_F(%(test_name)s, %(name)sInvalidArgs) { 4350 TEST_P(%(test_name)s, %(name)sInvalidArgs) {
4292 GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId; 4351 GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
4293 SpecializedSetup<cmds::%(name)s, 0>(false); 4352 SpecializedSetup<cmds::%(name)s, 0>(false);
4294 cmds::%(name)s cmd; 4353 cmds::%(name)s cmd;
4295 cmd.Init(%(args)s); 4354 cmd.Init(%(args)s);
4296 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4355 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4297 } 4356 }
4298 """ 4357 """
4299 self.WriteValidUnitTest(func, file, invalid_test) 4358 self.WriteValidUnitTest(func, file, invalid_test)
4300 4359
4301 def WriteImmediateServiceUnitTest(self, func, file): 4360 def WriteImmediateServiceUnitTest(self, func, file):
4302 """Overrriden from TypeHandler.""" 4361 """Overrriden from TypeHandler."""
4303 valid_test = """ 4362 valid_test = """
4304 TEST_F(%(test_name)s, %(name)sValidArgs) { 4363 TEST_P(%(test_name)s, %(name)sValidArgs) {
4305 EXPECT_CALL( 4364 EXPECT_CALL(
4306 *gl_, 4365 *gl_,
4307 %(gl_func_name)s(1, Pointee(kService%(upper_resource_name)sId))) 4366 %(gl_func_name)s(1, Pointee(kService%(upper_resource_name)sId)))
4308 .Times(1); 4367 .Times(1);
4309 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); 4368 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
4310 SpecializedSetup<cmds::%(name)s, 0>(true); 4369 SpecializedSetup<cmds::%(name)s, 0>(true);
4311 cmd.Init(1, &client_%(resource_name)s_id_); 4370 cmd.Init(1, &client_%(resource_name)s_id_);
4312 EXPECT_EQ(error::kNoError, 4371 EXPECT_EQ(error::kNoError,
4313 ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); 4372 ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_)));
4314 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4373 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4315 EXPECT_TRUE( 4374 EXPECT_TRUE(
4316 Get%(upper_resource_name)s(client_%(resource_name)s_id_) == NULL); 4375 Get%(upper_resource_name)s(client_%(resource_name)s_id_) == NULL);
4317 } 4376 }
4318 """ 4377 """
4319 self.WriteValidUnitTest(func, file, valid_test, { 4378 self.WriteValidUnitTest(func, file, valid_test, {
4320 'resource_name': func.GetInfo('resource_type').lower(), 4379 'resource_name': func.GetInfo('resource_type').lower(),
4321 'upper_resource_name': func.GetInfo('resource_type'), 4380 'upper_resource_name': func.GetInfo('resource_type'),
4322 }) 4381 })
4323 invalid_test = """ 4382 invalid_test = """
4324 TEST_F(%(test_name)s, %(name)sInvalidArgs) { 4383 TEST_P(%(test_name)s, %(name)sInvalidArgs) {
4325 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); 4384 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
4326 SpecializedSetup<cmds::%(name)s, 0>(false); 4385 SpecializedSetup<cmds::%(name)s, 0>(false);
4327 GLuint temp = kInvalidClientId; 4386 GLuint temp = kInvalidClientId;
4328 cmd.Init(1, &temp); 4387 cmd.Init(1, &temp);
4329 EXPECT_EQ(error::kNoError, 4388 EXPECT_EQ(error::kNoError,
4330 ExecuteImmediateCmd(cmd, sizeof(temp))); 4389 ExecuteImmediateCmd(cmd, sizeof(temp)));
4331 } 4390 }
4332 """ 4391 """
4333 self.WriteValidUnitTest(func, file, invalid_test) 4392 self.WriteValidUnitTest(func, file, invalid_test)
4334 4393
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
4610 gl_arg_strings[0] = '123' 4669 gl_arg_strings[0] = '123'
4611 file.Write(code % { 4670 file.Write(code % {
4612 'name': func.name, 4671 'name': func.name,
4613 'args': ", ".join(gl_arg_strings), 4672 'args': ", ".join(gl_arg_strings),
4614 'cmd_args': ", ".join(cmd_arg_strings), 4673 'cmd_args': ", ".join(cmd_arg_strings),
4615 }) 4674 })
4616 4675
4617 def WriteServiceUnitTest(self, func, file): 4676 def WriteServiceUnitTest(self, func, file):
4618 """Overrriden from TypeHandler.""" 4677 """Overrriden from TypeHandler."""
4619 valid_test = """ 4678 valid_test = """
4620 TEST_F(%(test_name)s, %(name)sValidArgs) { 4679 TEST_P(%(test_name)s, %(name)sValidArgs) {
4621 EXPECT_CALL(*gl_, GetError()) 4680 EXPECT_CALL(*gl_, GetError())
4622 .WillOnce(Return(GL_NO_ERROR)) 4681 .WillOnce(Return(GL_NO_ERROR))
4623 .WillOnce(Return(GL_NO_ERROR)) 4682 .WillOnce(Return(GL_NO_ERROR))
4624 .RetiresOnSaturation(); 4683 .RetiresOnSaturation();
4625 SpecializedSetup<cmds::%(name)s, 0>(true); 4684 SpecializedSetup<cmds::%(name)s, 0>(true);
4626 typedef cmds::%(name)s::Result Result; 4685 typedef cmds::%(name)s::Result Result;
4627 Result* result = static_cast<Result*>(shared_memory_address_); 4686 Result* result = static_cast<Result*>(shared_memory_address_);
4628 EXPECT_CALL(*gl_, %(gl_func_name)s(%(local_gl_args)s)); 4687 EXPECT_CALL(*gl_, %(gl_func_name)s(%(local_gl_args)s));
4629 result->size = 0; 4688 result->size = 0;
4630 cmds::%(name)s cmd; 4689 cmds::%(name)s cmd;
(...skipping 16 matching lines...) Expand all
4647 gl_arg_strings.append("_") 4706 gl_arg_strings.append("_")
4648 else: 4707 else:
4649 gl_arg_strings.append("result->GetData()") 4708 gl_arg_strings.append("result->GetData()")
4650 4709
4651 self.WriteValidUnitTest(func, file, valid_test, { 4710 self.WriteValidUnitTest(func, file, valid_test, {
4652 'local_gl_args': ", ".join(gl_arg_strings), 4711 'local_gl_args': ", ".join(gl_arg_strings),
4653 'valid_pname': valid_pname, 4712 'valid_pname': valid_pname,
4654 }) 4713 })
4655 4714
4656 invalid_test = """ 4715 invalid_test = """
4657 TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { 4716 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
4658 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); 4717 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
4659 SpecializedSetup<cmds::%(name)s, 0>(false); 4718 SpecializedSetup<cmds::%(name)s, 0>(false);
4660 cmds::%(name)s::Result* result = 4719 cmds::%(name)s::Result* result =
4661 static_cast<cmds::%(name)s::Result*>(shared_memory_address_); 4720 static_cast<cmds::%(name)s::Result*>(shared_memory_address_);
4662 result->size = 0; 4721 result->size = 0;
4663 cmds::%(name)s cmd; 4722 cmds::%(name)s cmd;
4664 cmd.Init(%(args)s); 4723 cmd.Init(%(args)s);
4665 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd)); 4724 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));
4666 EXPECT_EQ(0u, result->size);%(gl_error_test)s 4725 EXPECT_EQ(0u, result->size);%(gl_error_test)s
4667 } 4726 }
(...skipping 11 matching lines...) Expand all
4679 """Writes the service unit test for a command.""" 4738 """Writes the service unit test for a command."""
4680 expected_call = "EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));" 4739 expected_call = "EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));"
4681 if func.GetInfo("first_element_only"): 4740 if func.GetInfo("first_element_only"):
4682 gl_arg_strings = [] 4741 gl_arg_strings = []
4683 for count, arg in enumerate(func.GetOriginalArgs()): 4742 for count, arg in enumerate(func.GetOriginalArgs()):
4684 gl_arg_strings.append(arg.GetValidGLArg(func, count, 0)) 4743 gl_arg_strings.append(arg.GetValidGLArg(func, count, 0))
4685 gl_arg_strings[-1] = "*" + gl_arg_strings[-1] 4744 gl_arg_strings[-1] = "*" + gl_arg_strings[-1]
4686 expected_call = ("EXPECT_CALL(*gl_, %%(gl_func_name)s(%s));" % 4745 expected_call = ("EXPECT_CALL(*gl_, %%(gl_func_name)s(%s));" %
4687 ", ".join(gl_arg_strings)) 4746 ", ".join(gl_arg_strings))
4688 valid_test = """ 4747 valid_test = """
4689 TEST_F(%(test_name)s, %(name)sValidArgs) { 4748 TEST_P(%(test_name)s, %(name)sValidArgs) {
4690 SpecializedSetup<cmds::%(name)s, 0>(true); 4749 SpecializedSetup<cmds::%(name)s, 0>(true);
4691 cmds::%(name)s cmd; 4750 cmds::%(name)s cmd;
4692 cmd.Init(%(args)s); 4751 cmd.Init(%(args)s);
4693 GetSharedMemoryAs<%(data_type)s*>()[0] = %(data_value)s; 4752 GetSharedMemoryAs<%(data_type)s*>()[0] = %(data_value)s;
4694 %(expected_call)s 4753 %(expected_call)s
4695 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4754 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4696 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4755 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4697 } 4756 }
4698 """ 4757 """
4699 extra = { 4758 extra = {
4700 'data_type': func.GetInfo('data_type'), 4759 'data_type': func.GetInfo('data_type'),
4701 'data_value': func.GetInfo('data_value') or '0', 4760 'data_value': func.GetInfo('data_value') or '0',
4702 'expected_call': expected_call, 4761 'expected_call': expected_call,
4703 } 4762 }
4704 self.WriteValidUnitTest(func, file, valid_test, extra) 4763 self.WriteValidUnitTest(func, file, valid_test, extra)
4705 4764
4706 invalid_test = """ 4765 invalid_test = """
4707 TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { 4766 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
4708 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); 4767 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
4709 SpecializedSetup<cmds::%(name)s, 0>(false); 4768 SpecializedSetup<cmds::%(name)s, 0>(false);
4710 cmds::%(name)s cmd; 4769 cmds::%(name)s cmd;
4711 cmd.Init(%(args)s); 4770 cmd.Init(%(args)s);
4712 GetSharedMemoryAs<%(data_type)s*>()[0] = %(data_value)s; 4771 GetSharedMemoryAs<%(data_type)s*>()[0] = %(data_value)s;
4713 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s 4772 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s
4714 } 4773 }
4715 """ 4774 """
4716 self.WriteInvalidUnitTest(func, file, invalid_test, extra) 4775 self.WriteInvalidUnitTest(func, file, invalid_test, extra)
4717 4776
4718 def WriteImmediateServiceUnitTest(self, func, file): 4777 def WriteImmediateServiceUnitTest(self, func, file):
4719 """Writes the service unit test for a command.""" 4778 """Writes the service unit test for a command."""
4720 valid_test = """ 4779 valid_test = """
4721 TEST_F(%(test_name)s, %(name)sValidArgs) { 4780 TEST_P(%(test_name)s, %(name)sValidArgs) {
4722 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); 4781 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
4723 SpecializedSetup<cmds::%(name)s, 0>(true); 4782 SpecializedSetup<cmds::%(name)s, 0>(true);
4724 %(data_type)s temp[%(data_count)s] = { %(data_value)s, }; 4783 %(data_type)s temp[%(data_count)s] = { %(data_value)s, };
4725 cmd.Init(%(gl_args)s, &temp[0]); 4784 cmd.Init(%(gl_args)s, &temp[0]);
4726 EXPECT_CALL( 4785 EXPECT_CALL(
4727 *gl_, 4786 *gl_,
4728 %(gl_func_name)s(%(gl_args)s, %(data_ref)sreinterpret_cast< 4787 %(gl_func_name)s(%(gl_args)s, %(data_ref)sreinterpret_cast<
4729 %(data_type)s*>(ImmediateDataAddress(&cmd)))); 4788 %(data_type)s*>(ImmediateDataAddress(&cmd))));
4730 EXPECT_EQ(error::kNoError, 4789 EXPECT_EQ(error::kNoError,
4731 ExecuteImmediateCmd(cmd, sizeof(temp))); 4790 ExecuteImmediateCmd(cmd, sizeof(temp)));
4732 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4791 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4733 } 4792 }
4734 """ 4793 """
4735 gl_arg_strings = [] 4794 gl_arg_strings = []
4736 gl_any_strings = [] 4795 gl_any_strings = []
4737 for count, arg in enumerate(func.GetOriginalArgs()[0:-1]): 4796 for count, arg in enumerate(func.GetOriginalArgs()[0:-1]):
4738 gl_arg_strings.append(arg.GetValidGLArg(func, count, 0)) 4797 gl_arg_strings.append(arg.GetValidGLArg(func, count, 0))
4739 gl_any_strings.append("_") 4798 gl_any_strings.append("_")
4740 extra = { 4799 extra = {
4741 'data_ref': ("*" if func.GetInfo('first_element_only') else ""), 4800 'data_ref': ("*" if func.GetInfo('first_element_only') else ""),
4742 'data_type': func.GetInfo('data_type'), 4801 'data_type': func.GetInfo('data_type'),
4743 'data_count': func.GetInfo('count'), 4802 'data_count': func.GetInfo('count'),
4744 'data_value': func.GetInfo('data_value') or '0', 4803 'data_value': func.GetInfo('data_value') or '0',
4745 'gl_args': ", ".join(gl_arg_strings), 4804 'gl_args': ", ".join(gl_arg_strings),
4746 'gl_any_args': ", ".join(gl_any_strings), 4805 'gl_any_args': ", ".join(gl_any_strings),
4747 } 4806 }
4748 self.WriteValidUnitTest(func, file, valid_test, extra) 4807 self.WriteValidUnitTest(func, file, valid_test, extra)
4749 4808
4750 invalid_test = """ 4809 invalid_test = """
4751 TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { 4810 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
4752 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); 4811 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
4753 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_any_args)s, _)).Times(0); 4812 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_any_args)s, _)).Times(0);
4754 SpecializedSetup<cmds::%(name)s, 0>(false); 4813 SpecializedSetup<cmds::%(name)s, 0>(false);
4755 %(data_type)s temp[%(data_count)s] = { %(data_value)s, }; 4814 %(data_type)s temp[%(data_count)s] = { %(data_value)s, };
4756 cmd.Init(%(all_but_last_args)s, &temp[0]); 4815 cmd.Init(%(all_but_last_args)s, &temp[0]);
4757 EXPECT_EQ(error::%(parse_result)s, 4816 EXPECT_EQ(error::%(parse_result)s,
4758 ExecuteImmediateCmd(cmd, sizeof(temp)));%(gl_error_test)s 4817 ExecuteImmediateCmd(cmd, sizeof(temp)));%(gl_error_test)s
4759 } 4818 }
4760 """ 4819 """
4761 self.WriteInvalidUnitTest(func, file, invalid_test, extra) 4820 self.WriteInvalidUnitTest(func, file, invalid_test, extra)
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
4942 """Handler for PUTn 'glUniform__v' type functions.""" 5001 """Handler for PUTn 'glUniform__v' type functions."""
4943 5002
4944 def __init__(self): 5003 def __init__(self):
4945 TypeHandler.__init__(self) 5004 TypeHandler.__init__(self)
4946 5005
4947 def WriteServiceUnitTest(self, func, file): 5006 def WriteServiceUnitTest(self, func, file):
4948 """Overridden from TypeHandler.""" 5007 """Overridden from TypeHandler."""
4949 TypeHandler.WriteServiceUnitTest(self, func, file) 5008 TypeHandler.WriteServiceUnitTest(self, func, file)
4950 5009
4951 valid_test = """ 5010 valid_test = """
4952 TEST_F(%(test_name)s, %(name)sValidArgsCountTooLarge) { 5011 TEST_P(%(test_name)s, %(name)sValidArgsCountTooLarge) {
4953 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); 5012 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
4954 SpecializedSetup<cmds::%(name)s, 0>(true); 5013 SpecializedSetup<cmds::%(name)s, 0>(true);
4955 cmds::%(name)s cmd; 5014 cmds::%(name)s cmd;
4956 cmd.Init(%(args)s); 5015 cmd.Init(%(args)s);
4957 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5016 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4958 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5017 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4959 } 5018 }
4960 """ 5019 """
4961 gl_arg_strings = [] 5020 gl_arg_strings = []
4962 arg_strings = [] 5021 arg_strings = []
(...skipping 14 matching lines...) Expand all
4977 arg_strings.append(arg.GetValidArg(func, count, 0)) 5036 arg_strings.append(arg.GetValidArg(func, count, 0))
4978 extra = { 5037 extra = {
4979 'gl_args': ", ".join(gl_arg_strings), 5038 'gl_args': ", ".join(gl_arg_strings),
4980 'args': ", ".join(arg_strings), 5039 'args': ", ".join(arg_strings),
4981 } 5040 }
4982 self.WriteValidUnitTest(func, file, valid_test, extra) 5041 self.WriteValidUnitTest(func, file, valid_test, extra)
4983 5042
4984 def WriteImmediateServiceUnitTest(self, func, file): 5043 def WriteImmediateServiceUnitTest(self, func, file):
4985 """Overridden from TypeHandler.""" 5044 """Overridden from TypeHandler."""
4986 valid_test = """ 5045 valid_test = """
4987 TEST_F(%(test_name)s, %(name)sValidArgs) { 5046 TEST_P(%(test_name)s, %(name)sValidArgs) {
4988 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); 5047 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
4989 EXPECT_CALL( 5048 EXPECT_CALL(
4990 *gl_, 5049 *gl_,
4991 %(gl_func_name)s(%(gl_args)s, 5050 %(gl_func_name)s(%(gl_args)s,
4992 reinterpret_cast<%(data_type)s*>(ImmediateDataAddress(&cmd)))); 5051 reinterpret_cast<%(data_type)s*>(ImmediateDataAddress(&cmd))));
4993 SpecializedSetup<cmds::%(name)s, 0>(true); 5052 SpecializedSetup<cmds::%(name)s, 0>(true);
4994 %(data_type)s temp[%(data_count)s * 2] = { 0, }; 5053 %(data_type)s temp[%(data_count)s * 2] = { 0, };
4995 cmd.Init(%(args)s, &temp[0]); 5054 cmd.Init(%(args)s, &temp[0]);
4996 EXPECT_EQ(error::kNoError, 5055 EXPECT_EQ(error::kNoError,
4997 ExecuteImmediateCmd(cmd, sizeof(temp))); 5056 ExecuteImmediateCmd(cmd, sizeof(temp)));
(...skipping 10 matching lines...) Expand all
5008 extra = { 5067 extra = {
5009 'data_type': func.GetInfo('data_type'), 5068 'data_type': func.GetInfo('data_type'),
5010 'data_count': func.GetInfo('count'), 5069 'data_count': func.GetInfo('count'),
5011 'args': ", ".join(arg_strings), 5070 'args': ", ".join(arg_strings),
5012 'gl_args': ", ".join(gl_arg_strings), 5071 'gl_args': ", ".join(gl_arg_strings),
5013 'gl_any_args': ", ".join(gl_any_strings), 5072 'gl_any_args': ", ".join(gl_any_strings),
5014 } 5073 }
5015 self.WriteValidUnitTest(func, file, valid_test, extra) 5074 self.WriteValidUnitTest(func, file, valid_test, extra)
5016 5075
5017 invalid_test = """ 5076 invalid_test = """
5018 TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { 5077 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
5019 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); 5078 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
5020 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_any_args)s, _)).Times(0); 5079 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_any_args)s, _)).Times(0);
5021 SpecializedSetup<cmds::%(name)s, 0>(false); 5080 SpecializedSetup<cmds::%(name)s, 0>(false);
5022 %(data_type)s temp[%(data_count)s * 2] = { 0, }; 5081 %(data_type)s temp[%(data_count)s * 2] = { 0, };
5023 cmd.Init(%(all_but_last_args)s, &temp[0]); 5082 cmd.Init(%(all_but_last_args)s, &temp[0]);
5024 EXPECT_EQ(error::%(parse_result)s, 5083 EXPECT_EQ(error::%(parse_result)s,
5025 ExecuteImmediateCmd(cmd, sizeof(temp)));%(gl_error_test)s 5084 ExecuteImmediateCmd(cmd, sizeof(temp)));%(gl_error_test)s
5026 } 5085 }
5027 """ 5086 """
5028 self.WriteInvalidUnitTest(func, file, invalid_test, extra) 5087 self.WriteInvalidUnitTest(func, file, invalid_test, extra)
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
5238 'count': func.GetInfo('count'), 5297 'count': func.GetInfo('count'),
5239 'type': func.GetInfo('data_type'), 5298 'type': func.GetInfo('data_type'),
5240 'location': args[0].name, 5299 'location': args[0].name,
5241 'args': func.MakeOriginalArgString(""), 5300 'args': func.MakeOriginalArgString(""),
5242 'values': values, 5301 'values': values,
5243 }) 5302 })
5244 5303
5245 def WriteServiceUnitTest(self, func, file): 5304 def WriteServiceUnitTest(self, func, file):
5246 """Overrriden from TypeHandler.""" 5305 """Overrriden from TypeHandler."""
5247 valid_test = """ 5306 valid_test = """
5248 TEST_F(%(test_name)s, %(name)sValidArgs) { 5307 TEST_P(%(test_name)s, %(name)sValidArgs) {
5249 EXPECT_CALL(*gl_, %(name)sv(%(local_args)s)); 5308 EXPECT_CALL(*gl_, %(name)sv(%(local_args)s));
5250 SpecializedSetup<cmds::%(name)s, 0>(true); 5309 SpecializedSetup<cmds::%(name)s, 0>(true);
5251 cmds::%(name)s cmd; 5310 cmds::%(name)s cmd;
5252 cmd.Init(%(args)s); 5311 cmd.Init(%(args)s);
5253 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5312 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5254 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5313 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5255 } 5314 }
5256 """ 5315 """
5257 args = func.GetOriginalArgs() 5316 args = func.GetOriginalArgs()
5258 local_args = "%s, 1, _" % args[0].GetValidGLArg(func, 0, 0) 5317 local_args = "%s, 1, _" % args[0].GetValidGLArg(func, 0, 0)
5259 self.WriteValidUnitTest(func, file, valid_test, { 5318 self.WriteValidUnitTest(func, file, valid_test, {
5260 'name': func.name, 5319 'name': func.name,
5261 'count': func.GetInfo('count'), 5320 'count': func.GetInfo('count'),
5262 'local_args': local_args, 5321 'local_args': local_args,
5263 }) 5322 })
5264 5323
5265 invalid_test = """ 5324 invalid_test = """
5266 TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { 5325 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
5267 EXPECT_CALL(*gl_, %(name)sv(_, _, _).Times(0); 5326 EXPECT_CALL(*gl_, %(name)sv(_, _, _).Times(0);
5268 SpecializedSetup<cmds::%(name)s, 0>(false); 5327 SpecializedSetup<cmds::%(name)s, 0>(false);
5269 cmds::%(name)s cmd; 5328 cmds::%(name)s cmd;
5270 cmd.Init(%(args)s); 5329 cmd.Init(%(args)s);
5271 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s 5330 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s
5272 } 5331 }
5273 """ 5332 """
5274 self.WriteInvalidUnitTest(func, file, invalid_test, { 5333 self.WriteInvalidUnitTest(func, file, invalid_test, {
5275 'name': func.GetInfo('name'), 5334 'name': func.GetInfo('name'),
5276 'count': func.GetInfo('count'), 5335 'count': func.GetInfo('count'),
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
5447 def InitFunction(self, func): 5506 def InitFunction(self, func):
5448 """Overrriden from TypeHandler.""" 5507 """Overrriden from TypeHandler."""
5449 func.AddCmdArg(Argument("result_shm_id", 'uint32')) 5508 func.AddCmdArg(Argument("result_shm_id", 'uint32'))
5450 func.AddCmdArg(Argument("result_shm_offset", 'uint32')) 5509 func.AddCmdArg(Argument("result_shm_offset", 'uint32'))
5451 if func.GetInfo('result') == None: 5510 if func.GetInfo('result') == None:
5452 func.AddInfo('result', ['uint32']) 5511 func.AddInfo('result', ['uint32'])
5453 5512
5454 def WriteServiceUnitTest(self, func, file): 5513 def WriteServiceUnitTest(self, func, file):
5455 """Overrriden from TypeHandler.""" 5514 """Overrriden from TypeHandler."""
5456 valid_test = """ 5515 valid_test = """
5457 TEST_F(%(test_name)s, %(name)sValidArgs) { 5516 TEST_P(%(test_name)s, %(name)sValidArgs) {
5458 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); 5517 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
5459 SpecializedSetup<cmds::%(name)s, 0>(true); 5518 SpecializedSetup<cmds::%(name)s, 0>(true);
5460 cmds::%(name)s cmd; 5519 cmds::%(name)s cmd;
5461 cmd.Init(%(args)s%(comma)sshared_memory_id_, shared_memory_offset_); 5520 cmd.Init(%(args)s%(comma)sshared_memory_id_, shared_memory_offset_);
5462 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5521 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5463 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5522 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5464 } 5523 }
5465 """ 5524 """
5466 comma = "" 5525 comma = ""
5467 if len(func.GetOriginalArgs()): 5526 if len(func.GetOriginalArgs()):
5468 comma =", " 5527 comma =", "
5469 self.WriteValidUnitTest(func, file, valid_test, { 5528 self.WriteValidUnitTest(func, file, valid_test, {
5470 'comma': comma, 5529 'comma': comma,
5471 }) 5530 })
5472 5531
5473 invalid_test = """ 5532 invalid_test = """
5474 TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { 5533 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
5475 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); 5534 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
5476 SpecializedSetup<cmds::%(name)s, 0>(false); 5535 SpecializedSetup<cmds::%(name)s, 0>(false);
5477 cmds::%(name)s cmd; 5536 cmds::%(name)s cmd;
5478 cmd.Init(%(args)s%(comma)sshared_memory_id_, shared_memory_offset_); 5537 cmd.Init(%(args)s%(comma)sshared_memory_id_, shared_memory_offset_);
5479 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s 5538 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s
5480 } 5539 }
5481 """ 5540 """
5482 self.WriteInvalidUnitTest(func, file, invalid_test, { 5541 self.WriteInvalidUnitTest(func, file, invalid_test, {
5483 'comma': comma, 5542 'comma': comma,
5484 }) 5543 })
5485 5544
5486 invalid_test = """ 5545 invalid_test = """
5487 TEST_F(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) { 5546 TEST_P(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) {
5488 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); 5547 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
5489 SpecializedSetup<cmds::%(name)s, 0>(false); 5548 SpecializedSetup<cmds::%(name)s, 0>(false);
5490 cmds::%(name)s cmd; 5549 cmds::%(name)s cmd;
5491 cmd.Init(%(args)s%(comma)skInvalidSharedMemoryId, shared_memory_offset_); 5550 cmd.Init(%(args)s%(comma)skInvalidSharedMemoryId, shared_memory_offset_);
5492 EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); 5551 EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
5493 cmd.Init(%(args)s%(comma)sshared_memory_id_, kInvalidSharedMemoryOffset); 5552 cmd.Init(%(args)s%(comma)sshared_memory_id_, kInvalidSharedMemoryOffset);
5494 EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); 5553 EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
5495 } 5554 }
5496 """ 5555 """
5497 self.WriteValidUnitTest(func, file, invalid_test, { 5556 self.WriteValidUnitTest(func, file, invalid_test, {
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
5646 'arg2': args[2].name, 5705 'arg2': args[2].name,
5647 'arg3': args[3].name, 5706 'arg3': args[3].name,
5648 } 5707 }
5649 file.Write(code_1 % str_args) 5708 file.Write(code_1 % str_args)
5650 func.WriteDestinationInitalizationValidation(file) 5709 func.WriteDestinationInitalizationValidation(file)
5651 file.Write(code_2 % str_args) 5710 file.Write(code_2 % str_args)
5652 5711
5653 def WriteServiceUnitTest(self, func, file): 5712 def WriteServiceUnitTest(self, func, file):
5654 """Overrriden from TypeHandler.""" 5713 """Overrriden from TypeHandler."""
5655 valid_test = """ 5714 valid_test = """
5656 TEST_F(%(test_name)s, %(name)sValidArgs) { 5715 TEST_P(%(test_name)s, %(name)sValidArgs) {
5657 const char* kInfo = "hello"; 5716 const char* kInfo = "hello";
5658 const uint32 kBucketId = 123; 5717 const uint32 kBucketId = 123;
5659 SpecializedSetup<cmds::%(name)s, 0>(true); 5718 SpecializedSetup<cmds::%(name)s, 0>(true);
5660 %(expect_len_code)s 5719 %(expect_len_code)s
5661 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)) 5720 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s))
5662 .WillOnce(DoAll(SetArgumentPointee<2>(strlen(kInfo)), 5721 .WillOnce(DoAll(SetArgumentPointee<2>(strlen(kInfo)),
5663 SetArrayArgument<3>(kInfo, kInfo + strlen(kInfo) + 1))); 5722 SetArrayArgument<3>(kInfo, kInfo + strlen(kInfo) + 1)));
5664 cmds::%(name)s cmd; 5723 cmds::%(name)s cmd;
5665 cmd.Init(%(args)s); 5724 cmd.Init(%(args)s);
5666 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5725 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
(...skipping 19 matching lines...) Expand all
5686 'expect_len_code': '', 5745 'expect_len_code': '',
5687 } 5746 }
5688 if get_len_func and get_len_func[0:2] == 'gl': 5747 if get_len_func and get_len_func[0:2] == 'gl':
5689 sub['expect_len_code'] = ( 5748 sub['expect_len_code'] = (
5690 " EXPECT_CALL(*gl_, %s(%s, %s, _))\n" 5749 " EXPECT_CALL(*gl_, %s(%s, %s, _))\n"
5691 " .WillOnce(SetArgumentPointee<2>(strlen(kInfo) + 1));") % ( 5750 " .WillOnce(SetArgumentPointee<2>(strlen(kInfo) + 1));") % (
5692 get_len_func[2:], id_name, get_len_enum) 5751 get_len_func[2:], id_name, get_len_enum)
5693 self.WriteValidUnitTest(func, file, valid_test, sub) 5752 self.WriteValidUnitTest(func, file, valid_test, sub)
5694 5753
5695 invalid_test = """ 5754 invalid_test = """
5696 TEST_F(%(test_name)s, %(name)sInvalidArgs) { 5755 TEST_P(%(test_name)s, %(name)sInvalidArgs) {
5697 const uint32 kBucketId = 123; 5756 const uint32 kBucketId = 123;
5698 EXPECT_CALL(*gl_, %(gl_func_name)s(_, _, _, _)) 5757 EXPECT_CALL(*gl_, %(gl_func_name)s(_, _, _, _))
5699 .Times(0); 5758 .Times(0);
5700 cmds::%(name)s cmd; 5759 cmds::%(name)s cmd;
5701 cmd.Init(kInvalidClientId, kBucketId); 5760 cmd.Init(kInvalidClientId, kBucketId);
5702 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5761 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5703 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 5762 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
5704 } 5763 }
5705 """ 5764 """
5706 self.WriteValidUnitTest(func, file, invalid_test) 5765 self.WriteValidUnitTest(func, file, invalid_test)
(...skipping 1365 matching lines...) Expand 10 before | Expand all | Expand 10 after
7072 7131
7073 def WriteServiceContextStateHeader(self, filename): 7132 def WriteServiceContextStateHeader(self, filename):
7074 """Writes the service context state header.""" 7133 """Writes the service context state header."""
7075 file = CHeaderWriter( 7134 file = CHeaderWriter(
7076 filename, 7135 filename,
7077 "// It is included by context_state.h\n") 7136 "// It is included by context_state.h\n")
7078 file.Write("struct EnableFlags {\n") 7137 file.Write("struct EnableFlags {\n")
7079 file.Write(" EnableFlags();\n") 7138 file.Write(" EnableFlags();\n")
7080 for capability in _CAPABILITY_FLAGS: 7139 for capability in _CAPABILITY_FLAGS:
7081 file.Write(" bool %s;\n" % capability['name']) 7140 file.Write(" bool %s;\n" % capability['name'])
7141 file.Write(" bool cached_%s;\n" % capability['name'])
7082 file.Write("};\n\n") 7142 file.Write("};\n\n")
7083 7143
7084 for state_name in sorted(_STATES.keys()): 7144 for state_name in sorted(_STATES.keys()):
7085 state = _STATES[state_name] 7145 state = _STATES[state_name]
7086 for item in state['states']: 7146 for item in state['states']:
7087 file.Write("%s %s;\n" % (item['type'], item['name'])) 7147 file.Write("%s %s;\n" % (item['type'], item['name']))
7148 if item.get('cached', False):
7149 file.Write("%s cached_%s;\n" % (item['type'], item['name']))
7088 file.Write("\n") 7150 file.Write("\n")
7089 7151
7152 file.Write("""
7153 inline void SetDeviceCapabilityState(GLenum cap, bool enable) {
7154 switch (cap) {
7155 """)
7156 for capability in _CAPABILITY_FLAGS:
7157 file.Write("""\
7158 case GL_%s:
7159 """ % capability['name'].upper())
7160 file.Write("""\
7161 if (enable_flags.cached_%(name)s == enable &&
7162 !ignore_cached_state)
7163 return;
7164 enable_flags.cached_%(name)s = enable;
7165 break;
7166 """ % capability)
7167
7168 file.Write("""\
7169 default:
7170 NOTREACHED();
7171 return;
7172 }
7173 if (enable)
7174 glEnable(cap);
7175 else
7176 glDisable(cap);
7177 }
7178 """)
7179
7090 file.Close() 7180 file.Close()
7091 7181
7092 def WriteClientContextStateHeader(self, filename): 7182 def WriteClientContextStateHeader(self, filename):
7093 """Writes the client context state header.""" 7183 """Writes the client context state header."""
7094 file = CHeaderWriter( 7184 file = CHeaderWriter(
7095 filename, 7185 filename,
7096 "// It is included by client_context_state.h\n") 7186 "// It is included by client_context_state.h\n")
7097 file.Write("struct EnableFlags {\n") 7187 file.Write("struct EnableFlags {\n")
7098 file.Write(" EnableFlags();\n") 7188 file.Write(" EnableFlags();\n")
7099 for capability in _CAPABILITY_FLAGS: 7189 for capability in _CAPABILITY_FLAGS:
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
7148 def WriteServiceContextStateImpl(self, filename): 7238 def WriteServiceContextStateImpl(self, filename):
7149 """Writes the context state service implementation.""" 7239 """Writes the context state service implementation."""
7150 file = CHeaderWriter( 7240 file = CHeaderWriter(
7151 filename, 7241 filename,
7152 "// It is included by context_state.cc\n") 7242 "// It is included by context_state.cc\n")
7153 code = [] 7243 code = []
7154 for capability in _CAPABILITY_FLAGS: 7244 for capability in _CAPABILITY_FLAGS:
7155 code.append("%s(%s)" % 7245 code.append("%s(%s)" %
7156 (capability['name'], 7246 (capability['name'],
7157 ('false', 'true')['default' in capability])) 7247 ('false', 'true')['default' in capability]))
7248 code.append("cached_%s(%s)" %
7249 (capability['name'],
7250 ('false', 'true')['default' in capability]))
7158 file.Write("ContextState::EnableFlags::EnableFlags()\n : %s {\n}\n" % 7251 file.Write("ContextState::EnableFlags::EnableFlags()\n : %s {\n}\n" %
7159 ",\n ".join(code)) 7252 ",\n ".join(code))
7160 file.Write("\n") 7253 file.Write("\n")
7161 7254
7162 file.Write("void ContextState::Initialize() {\n") 7255 file.Write("void ContextState::Initialize() {\n")
7163 for state_name in sorted(_STATES.keys()): 7256 for state_name in sorted(_STATES.keys()):
7164 state = _STATES[state_name] 7257 state = _STATES[state_name]
7165 for item in state['states']: 7258 for item in state['states']:
7166 file.Write(" %s = %s;\n" % (item['name'], item['default'])) 7259 file.Write(" %s = %s;\n" % (item['name'], item['default']))
7260 if item.get('cached', False):
7261 file.Write(" cached_%s = %s;\n" % (item['name'], item['default']))
7167 file.Write("}\n") 7262 file.Write("}\n")
7168 7263
7169 file.Write(""" 7264 file.Write("""
7170 void ContextState::InitCapabilities(const ContextState* prev_state) const { 7265 void ContextState::InitCapabilities(const ContextState* prev_state) const {
7171 """) 7266 """)
7172 def WriteCapabilities(test_prev): 7267 def WriteCapabilities(test_prev):
7173 for capability in _CAPABILITY_FLAGS: 7268 for capability in _CAPABILITY_FLAGS:
7174 capability_name = capability['name'] 7269 capability_name = capability['name']
7175 if test_prev: 7270 if test_prev:
7176 file.Write(" if (prev_state->enable_flags.%s != enable_flags.%s)\n" % 7271 file.Write(""" if (prev_state->enable_flags.cached_%s !=
7272 enable_flags.cached_%s)\n""" %
7177 (capability_name, capability_name)) 7273 (capability_name, capability_name))
7178 file.Write(" EnableDisable(GL_%s, enable_flags.%s);\n" % 7274 file.Write(" EnableDisable(GL_%s, enable_flags.cached_%s);\n" %
7179 (capability_name.upper(), capability_name)) 7275 (capability_name.upper(), capability_name))
7180 7276
7181 file.Write(" if (prev_state) {") 7277 file.Write(" if (prev_state) {")
7182 WriteCapabilities(True) 7278 WriteCapabilities(True)
7183 file.Write(" } else {") 7279 file.Write(" } else {")
7184 WriteCapabilities(False) 7280 WriteCapabilities(False)
7185 file.Write(" }") 7281 file.Write(" }")
7186 7282
7187 file.Write("""} 7283 file.Write("""}
7188 7284
7189 void ContextState::InitState(const ContextState *prev_state) const { 7285 void ContextState::InitState(const ContextState *prev_state) const {
7190 """) 7286 """)
7191 7287
7192 def WriteStates(test_prev): 7288 def WriteStates(test_prev):
7193 # We need to sort the keys so the expectations match 7289 # We need to sort the keys so the expectations match
7194 for state_name in sorted(_STATES.keys()): 7290 for state_name in sorted(_STATES.keys()):
7195 state = _STATES[state_name] 7291 state = _STATES[state_name]
7196 if state['type'] == 'FrontBack': 7292 if state['type'] == 'FrontBack':
7197 num_states = len(state['states']) 7293 num_states = len(state['states'])
7198 for ndx, group in enumerate(Grouper(num_states / 2, state['states'])): 7294 for ndx, group in enumerate(Grouper(num_states / 2, state['states'])):
7199 if test_prev: 7295 if test_prev:
7200 file.Write(" if (") 7296 file.Write(" if (")
7201 args = [] 7297 args = []
7202 for place, item in enumerate(group): 7298 for place, item in enumerate(group):
7203 item_name = item['name'] 7299 item_name = CachedStateName(item)
7204 args.append('%s' % item_name) 7300 args.append('%s' % item_name)
7205 if test_prev: 7301 if test_prev:
7206 if place > 0: 7302 if place > 0:
7207 file.Write(' ||\n') 7303 file.Write(' ||\n')
7208 file.Write("(%s != prev_state->%s)" % (item_name, item_name)) 7304 file.Write("(%s != prev_state->%s)" % (item_name, item_name))
7209 if test_prev: 7305 if test_prev:
7210 file.Write(")\n") 7306 file.Write(")\n")
7211 file.Write( 7307 file.Write(
7212 " gl%s(%s, %s);\n" % 7308 " gl%s(%s, %s);\n" %
7213 (state['func'], ('GL_FRONT', 'GL_BACK')[ndx], ", ".join(args))) 7309 (state['func'], ('GL_FRONT', 'GL_BACK')[ndx], ", ".join(args)))
7214 elif state['type'] == 'NamedParameter': 7310 elif state['type'] == 'NamedParameter':
7215 for item in state['states']: 7311 for item in state['states']:
7312 item_name = CachedStateName(item)
7313
7216 if 'extension_flag' in item: 7314 if 'extension_flag' in item:
7217 file.Write(" if (feature_info_->feature_flags().%s)\n " % 7315 file.Write(" if (feature_info_->feature_flags().%s)\n " %
7218 item['extension_flag']) 7316 item['extension_flag'])
7219 if test_prev: 7317 if test_prev:
7220 file.Write(" if (prev_state->%s != %s)\n" % 7318 file.Write(" if (prev_state->%s != %s)\n" %
7221 (item['name'], item['name'])) 7319 (item_name, item_name))
7222 file.Write(" gl%s(%s, %s);\n" % 7320 file.Write(" gl%s(%s, %s);\n" %
7223 (state['func'], item['enum'], item['name'])) 7321 (state['func'], item['enum'], item_name))
7224 else: 7322 else:
7225 if test_prev: 7323 if test_prev:
7226 file.Write(" if (") 7324 file.Write(" if (")
7227 args = [] 7325 args = []
7228 for place, item in enumerate(state['states']): 7326 for place, item in enumerate(state['states']):
7229 item_name = item['name'] 7327 item_name = CachedStateName(item)
7230 args.append('%s' % item_name) 7328 args.append('%s' % item_name)
7231 if test_prev: 7329 if test_prev:
7232 if place > 0: 7330 if place > 0:
7233 file.Write(' ||\n') 7331 file.Write(' ||\n')
7234 file.Write("(%s != prev_state->%s)" % 7332 file.Write("(%s != prev_state->%s)" %
7235 (item_name, item_name)) 7333 (item_name, item_name))
7236 if test_prev: 7334 if test_prev:
7237 file.Write(" )\n") 7335 file.Write(" )\n")
7238 file.Write(" gl%s(%s);\n" % (state['func'], ", ".join(args))) 7336 file.Write(" gl%s(%s);\n" % (state['func'], ", ".join(args)))
7239 7337
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
7322 #if gen_cmd == True or gen_cmd == None: 7420 #if gen_cmd == True or gen_cmd == None:
7323 func.WriteServiceImplementation(file) 7421 func.WriteServiceImplementation(file)
7324 7422
7325 file.Write(""" 7423 file.Write("""
7326 bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) { 7424 bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) {
7327 switch (cap) { 7425 switch (cap) {
7328 """) 7426 """)
7329 for capability in _CAPABILITY_FLAGS: 7427 for capability in _CAPABILITY_FLAGS:
7330 file.Write(" case GL_%s:\n" % capability['name'].upper()) 7428 file.Write(" case GL_%s:\n" % capability['name'].upper())
7331 if 'state_flag' in capability: 7429 if 'state_flag' in capability:
7332 file.Write(""" if (state_.enable_flags.%(name)s != enabled) { 7430
7333 state_.enable_flags.%(name)s = enabled; 7431 file.Write("""\
7334 %(state_flag)s = true; 7432 state_.enable_flags.%(name)s = enabled;
7335 } 7433 if (state_.enable_flags.cached_%(name)s != enabled
7336 return false; 7434 || state_.ignore_cached_state) {
7337 """ % capability) 7435 %(state_flag)s = true;
7436 }
7437 return false;
7438 """ % capability)
7338 else: 7439 else:
7339 file.Write(""" state_.enable_flags.%(name)s = enabled; 7440 file.Write("""\
7340 return true; 7441 state_.enable_flags.%(name)s = enabled;
7341 """ % capability) 7442 if (state_.enable_flags.cached_%(name)s != enabled
7443 || state_.ignore_cached_state) {
7444 state_.enable_flags.cached_%(name)s = enabled;
7445 return true;
7446 }
7447 return false;
7448 """ % capability)
7342 file.Write(""" default: 7449 file.Write(""" default:
7343 NOTREACHED(); 7450 NOTREACHED();
7344 return false; 7451 return false;
7345 } 7452 }
7346 } 7453 }
7347 """) 7454 """)
7348 file.Close() 7455 file.Close()
7349 7456
7350 def WriteServiceUnitTests(self, filename): 7457 def WriteServiceUnitTests(self, filename):
7351 """Writes the service decorder unit tests.""" 7458 """Writes the service decorder unit tests."""
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
7956 "ppapi/shared_impl/ppb_opengles2_shared.cc"]) 8063 "ppapi/shared_impl/ppb_opengles2_shared.cc"])
7957 8064
7958 if gen.errors > 0: 8065 if gen.errors > 0:
7959 print "%d errors" % gen.errors 8066 print "%d errors" % gen.errors
7960 return 1 8067 return 1
7961 return 0 8068 return 0
7962 8069
7963 8070
7964 if __name__ == '__main__': 8071 if __name__ == '__main__':
7965 sys.exit(main(sys.argv[1:])) 8072 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « no previous file | gpu/command_buffer/service/context_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698