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

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc

Issue 199443004: gpu: Raise GL_OUT_OF_MEMORY when BeginQueryEXT fails to allocate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: checkmem: benchmark Created 6 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/string_split.h" 12 #include "base/strings/string_split.h"
13 #include "gpu/command_buffer/common/gles2_cmd_format.h" 13 #include "gpu/command_buffer/common/gles2_cmd_format.h"
14 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 14 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
15 #include "gpu/command_buffer/service/cmd_buffer_engine.h" 15 #include "gpu/command_buffer/service/cmd_buffer_engine.h"
16 #include "gpu/command_buffer/service/context_group.h" 16 #include "gpu/command_buffer/service/context_group.h"
17 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
18 #include "gpu/command_buffer/service/logger.h" 17 #include "gpu/command_buffer/service/logger.h"
19 #include "gpu/command_buffer/service/program_manager.h" 18 #include "gpu/command_buffer/service/program_manager.h"
20 #include "gpu/command_buffer/service/test_helper.h" 19 #include "gpu/command_buffer/service/test_helper.h"
21 #include "gpu/command_buffer/service/vertex_attrib_manager.h" 20 #include "gpu/command_buffer/service/vertex_attrib_manager.h"
22 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
23 #include "ui/gl/gl_implementation.h" 22 #include "ui/gl/gl_implementation.h"
24 #include "ui/gl/gl_mock.h" 23 #include "ui/gl/gl_mock.h"
25 #include "ui/gl/gl_surface.h" 24 #include "ui/gl/gl_surface.h"
26 25
27 using ::gfx::MockGLInterface; 26 using ::gfx::MockGLInterface;
(...skipping 26 matching lines...) Expand all
54 client_vertex_shader_id_(121), 53 client_vertex_shader_id_(121),
55 client_fragment_shader_id_(122), 54 client_fragment_shader_id_(122),
56 client_query_id_(123), 55 client_query_id_(123),
57 client_vertexarray_id_(124) { 56 client_vertexarray_id_(124) {
58 memset(immediate_buffer_, 0xEE, sizeof(immediate_buffer_)); 57 memset(immediate_buffer_, 0xEE, sizeof(immediate_buffer_));
59 } 58 }
60 59
61 GLES2DecoderTestBase::~GLES2DecoderTestBase() {} 60 GLES2DecoderTestBase::~GLES2DecoderTestBase() {}
62 61
63 void GLES2DecoderTestBase::SetUp() { 62 void GLES2DecoderTestBase::SetUp() {
64 InitDecoder( 63 InitState init;
65 "", // extensions 64 init.gl_version = "3.0";
66 "3.0", // gl version 65 init.has_alpha = true;
67 true, // has alpha 66 init.has_depth = true;
68 true, // has depth 67 init.request_alpha = true;
69 false, // has stencil 68 init.request_depth = true;
70 true, // request alpha 69 init.bind_generates_resource = true;
71 true, // request depth 70 InitDecoder(init);
72 false, // request stencil
73 true); // bind generates resource
74 } 71 }
75 72
76 void GLES2DecoderTestBase::AddExpectationsForVertexAttribManager() { 73 void GLES2DecoderTestBase::AddExpectationsForVertexAttribManager() {
77 for (GLint ii = 0; ii < kNumVertexAttribs; ++ii) { 74 for (GLint ii = 0; ii < kNumVertexAttribs; ++ii) {
78 EXPECT_CALL(*gl_, VertexAttrib4f(ii, 0.0f, 0.0f, 0.0f, 1.0f)) 75 EXPECT_CALL(*gl_, VertexAttrib4f(ii, 0.0f, 0.0f, 0.0f, 1.0f))
79 .Times(1) 76 .Times(1)
80 .RetiresOnSaturation(); 77 .RetiresOnSaturation();
81 } 78 }
82 } 79 }
83 80
84 void GLES2DecoderTestBase::InitDecoder( 81 GLES2DecoderTestBase::InitState::InitState()
85 const char* extensions, 82 : has_alpha(false),
86 const char* gl_version, 83 has_depth(false),
87 bool has_alpha, 84 has_stencil(false),
88 bool has_depth, 85 request_alpha(false),
89 bool has_stencil, 86 request_depth(false),
90 bool request_alpha, 87 request_stencil(false),
91 bool request_depth, 88 bind_generates_resource(false),
92 bool request_stencil, 89 lose_context_when_out_of_memory(false) {}
93 bool bind_generates_resource) { 90
94 InitDecoderWithCommandLine(extensions, 91 void GLES2DecoderTestBase::InitDecoder(const InitState& init) {
95 gl_version, 92 InitDecoderWithCommandLine(init, NULL);
96 has_alpha,
97 has_depth,
98 has_stencil,
99 request_alpha,
100 request_depth,
101 request_stencil,
102 bind_generates_resource,
103 NULL);
104 } 93 }
105 94
106 void GLES2DecoderTestBase::InitDecoderWithCommandLine( 95 void GLES2DecoderTestBase::InitDecoderWithCommandLine(
107 const char* extensions, 96 const InitState& init,
108 const char* gl_version,
109 bool has_alpha,
110 bool has_depth,
111 bool has_stencil,
112 bool request_alpha,
113 bool request_depth,
114 bool request_stencil,
115 bool bind_generates_resource,
116 const base::CommandLine* command_line) { 97 const base::CommandLine* command_line) {
117 Framebuffer::ClearFramebufferCompleteComboMap(); 98 Framebuffer::ClearFramebufferCompleteComboMap();
118 99
119 gfx::SetGLGetProcAddressProc(gfx::MockGLInterface::GetGLProcAddress); 100 gfx::SetGLGetProcAddressProc(gfx::MockGLInterface::GetGLProcAddress);
120 gfx::GLSurface::InitializeOneOffWithMockBindingsForTests(); 101 gfx::GLSurface::InitializeOneOffWithMockBindingsForTests();
121 102
122 gl_.reset(new StrictMock<MockGLInterface>()); 103 gl_.reset(new StrictMock<MockGLInterface>());
123 ::gfx::MockGLInterface::SetGLInterface(gl_.get()); 104 ::gfx::MockGLInterface::SetGLInterface(gl_.get());
124 105
125 // Only create stream texture manager if extension is requested. 106 // Only create stream texture manager if extension is requested.
126 std::vector<std::string> list; 107 std::vector<std::string> list;
127 base::SplitString(std::string(extensions), ' ', &list); 108 base::SplitString(init.extensions, ' ', &list);
128 scoped_refptr<FeatureInfo> feature_info; 109 scoped_refptr<FeatureInfo> feature_info;
129 if (command_line) 110 if (command_line)
130 feature_info = new FeatureInfo(*command_line); 111 feature_info = new FeatureInfo(*command_line);
131 group_ = scoped_refptr<ContextGroup>(new ContextGroup( 112 group_ = scoped_refptr<ContextGroup>(
132 NULL, 113 new ContextGroup(NULL,
133 NULL, 114 NULL,
134 memory_tracker_, 115 memory_tracker_,
135 feature_info.get(), 116 feature_info.get(),
136 bind_generates_resource)); 117 init.bind_generates_resource));
137 118
138 InSequence sequence; 119 InSequence sequence;
139 120
140 surface_ = new gfx::GLSurfaceStub; 121 surface_ = new gfx::GLSurfaceStub;
141 surface_->SetSize(gfx::Size(kBackBufferWidth, kBackBufferHeight)); 122 surface_->SetSize(gfx::Size(kBackBufferWidth, kBackBufferHeight));
142 123
143 // Context needs to be created before initializing ContextGroup, which will 124 // Context needs to be created before initializing ContextGroup, which will
144 // in turn initialize FeatureInfo, which needs a context to determine 125 // in turn initialize FeatureInfo, which needs a context to determine
145 // extension support. 126 // extension support.
146 context_ = new gfx::GLContextStubWithExtensions; 127 context_ = new gfx::GLContextStubWithExtensions;
147 context_->AddExtensionsString(extensions); 128 context_->AddExtensionsString(init.extensions.c_str());
148 context_->SetGLVersionString(gl_version); 129 context_->SetGLVersionString(init.gl_version.c_str());
149 130
150 context_->MakeCurrent(surface_.get()); 131 context_->MakeCurrent(surface_.get());
151 gfx::GLSurface::InitializeDynamicMockBindingsForTests(context_); 132 gfx::GLSurface::InitializeDynamicMockBindingsForTests(context_);
152 133
153 TestHelper::SetupContextGroupInitExpectations(gl_.get(), 134 TestHelper::SetupContextGroupInitExpectations(gl_.get(),
154 DisallowedFeatures(), extensions, gl_version); 135 DisallowedFeatures(),
136 init.extensions.c_str(),
137 init.gl_version.c_str());
155 138
156 // We initialize the ContextGroup with a MockGLES2Decoder so that 139 // We initialize the ContextGroup with a MockGLES2Decoder so that
157 // we can use the ContextGroup to figure out how the real GLES2Decoder 140 // we can use the ContextGroup to figure out how the real GLES2Decoder
158 // will initialize itself. 141 // will initialize itself.
159 mock_decoder_.reset(new MockGLES2Decoder()); 142 mock_decoder_.reset(new MockGLES2Decoder());
160 EXPECT_TRUE( 143 EXPECT_TRUE(
161 group_->Initialize(mock_decoder_.get(), DisallowedFeatures())); 144 group_->Initialize(mock_decoder_.get(), DisallowedFeatures()));
162 145
163 if (group_->feature_info()->workarounds().init_vertex_attributes) 146 if (group_->feature_info()->workarounds().init_vertex_attributes)
164 AddExpectationsForVertexAttribManager(); 147 AddExpectationsForVertexAttribManager();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 .RetiresOnSaturation(); 204 .RetiresOnSaturation();
222 } 205 }
223 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)) 206 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
224 .Times(1) 207 .Times(1)
225 .RetiresOnSaturation(); 208 .RetiresOnSaturation();
226 209
227 EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, 0)) 210 EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, 0))
228 .Times(1) 211 .Times(1)
229 .RetiresOnSaturation(); 212 .RetiresOnSaturation();
230 EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _)) 213 EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
231 .WillOnce(SetArgumentPointee<1>(has_alpha ? 8 : 0)) 214 .WillOnce(SetArgumentPointee<1>(init.has_alpha ? 8 : 0))
232 .RetiresOnSaturation(); 215 .RetiresOnSaturation();
233 EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _)) 216 EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
234 .WillOnce(SetArgumentPointee<1>(has_depth ? 24 : 0)) 217 .WillOnce(SetArgumentPointee<1>(init.has_depth ? 24 : 0))
235 .RetiresOnSaturation(); 218 .RetiresOnSaturation();
236 EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _)) 219 EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
237 .WillOnce(SetArgumentPointee<1>(has_stencil ? 8 : 0)) 220 .WillOnce(SetArgumentPointee<1>(init.has_stencil ? 8 : 0))
238 .RetiresOnSaturation(); 221 .RetiresOnSaturation();
239 222
240 EXPECT_CALL(*gl_, Enable(GL_VERTEX_PROGRAM_POINT_SIZE)) 223 EXPECT_CALL(*gl_, Enable(GL_VERTEX_PROGRAM_POINT_SIZE))
241 .Times(1) 224 .Times(1)
242 .RetiresOnSaturation(); 225 .RetiresOnSaturation();
243 226
244 EXPECT_CALL(*gl_, Enable(GL_POINT_SPRITE)) 227 EXPECT_CALL(*gl_, Enable(GL_POINT_SPRITE))
245 .Times(1) 228 .Times(1)
246 .RetiresOnSaturation(); 229 .RetiresOnSaturation();
247 230
248 static GLint max_viewport_dims[] = { 231 static GLint max_viewport_dims[] = {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 268
286 engine_.reset(new StrictMock<MockCommandBufferEngine>()); 269 engine_.reset(new StrictMock<MockCommandBufferEngine>());
287 scoped_refptr<gpu::Buffer> buffer = 270 scoped_refptr<gpu::Buffer> buffer =
288 engine_->GetSharedMemoryBuffer(kSharedMemoryId); 271 engine_->GetSharedMemoryBuffer(kSharedMemoryId);
289 shared_memory_offset_ = kSharedMemoryOffset; 272 shared_memory_offset_ = kSharedMemoryOffset;
290 shared_memory_address_ = 273 shared_memory_address_ =
291 reinterpret_cast<int8*>(buffer->memory()) + shared_memory_offset_; 274 reinterpret_cast<int8*>(buffer->memory()) + shared_memory_offset_;
292 shared_memory_id_ = kSharedMemoryId; 275 shared_memory_id_ = kSharedMemoryId;
293 shared_memory_base_ = buffer->memory(); 276 shared_memory_base_ = buffer->memory();
294 277
295 int32 attributes[] = { 278 static const int32 kLoseContextWhenOutOfMemory = 0x10003;
296 EGL_ALPHA_SIZE, request_alpha ? 8 : 0, 279
297 EGL_DEPTH_SIZE, request_depth ? 24 : 0, 280 int32 attributes[] = {EGL_ALPHA_SIZE,
298 EGL_STENCIL_SIZE, request_stencil ? 8 : 0, 281 init.request_alpha ? 8 : 0,
299 }; 282 EGL_DEPTH_SIZE,
283 init.request_depth ? 24 : 0,
284 EGL_STENCIL_SIZE,
285 init.request_stencil ? 8 : 0,
286 kLoseContextWhenOutOfMemory,
287 init.lose_context_when_out_of_memory ? 1 : 0, };
300 std::vector<int32> attribs(attributes, attributes + arraysize(attributes)); 288 std::vector<int32> attribs(attributes, attributes + arraysize(attributes));
301 289
302 decoder_.reset(GLES2Decoder::Create(group_.get())); 290 decoder_.reset(GLES2Decoder::Create(group_.get()));
303 decoder_->GetLogger()->set_log_synthesized_gl_errors(false); 291 decoder_->GetLogger()->set_log_synthesized_gl_errors(false);
304 decoder_->Initialize(surface_, 292 decoder_->Initialize(surface_,
305 context_, 293 context_,
306 false, 294 false,
307 surface_->GetSize(), 295 surface_->GetSize(),
308 DisallowedFeatures(), 296 DisallowedFeatures(),
309 attribs); 297 attribs);
(...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1464 SetupDefaultProgram(); 1452 SetupDefaultProgram();
1465 } 1453 }
1466 1454
1467 // Include the auto-generated part of this file. We split this because it means 1455 // Include the auto-generated part of this file. We split this because it means
1468 // we can easily edit the non-auto generated parts right here in this file 1456 // we can easily edit the non-auto generated parts right here in this file
1469 // instead of having to edit some template or the code generator. 1457 // instead of having to edit some template or the code generator.
1470 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h" 1458 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h"
1471 1459
1472 } // namespace gles2 1460 } // namespace gles2
1473 } // namespace gpu 1461 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h ('k') | gpu/command_buffer/tests/gl_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698