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

Side by Side Diff: content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.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 "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" 5 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
6 6
7 #include "third_party/khronos/GLES2/gl2.h" 7 #include "third_party/khronos/GLES2/gl2.h"
8 #ifndef GL_GLEXT_PROTOTYPES 8 #ifndef GL_GLEXT_PROTOTYPES
9 #define GL_GLEXT_PROTOTYPES 1 9 #define GL_GLEXT_PROTOTYPES 1
10 #endif 10 #endif
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 WebGraphicsContext3DCommandBufferImpl::ShareGroup::~ShareGroup() { 223 WebGraphicsContext3DCommandBufferImpl::ShareGroup::~ShareGroup() {
224 DCHECK(contexts_.empty()); 224 DCHECK(contexts_.empty());
225 } 225 }
226 226
227 WebGraphicsContext3DCommandBufferImpl::WebGraphicsContext3DCommandBufferImpl( 227 WebGraphicsContext3DCommandBufferImpl::WebGraphicsContext3DCommandBufferImpl(
228 int surface_id, 228 int surface_id,
229 const GURL& active_url, 229 const GURL& active_url,
230 GpuChannelHost* host, 230 GpuChannelHost* host,
231 const Attributes& attributes, 231 const Attributes& attributes,
232 bool bind_generates_resources, 232 bool bind_generates_resources,
233 bool lose_context_when_out_of_memory,
233 const SharedMemoryLimits& limits, 234 const SharedMemoryLimits& limits,
234 WebGraphicsContext3DCommandBufferImpl* share_context) 235 WebGraphicsContext3DCommandBufferImpl* share_context)
235 : initialize_failed_(false), 236 : initialize_failed_(false),
236 visible_(false), 237 visible_(false),
237 host_(host), 238 host_(host),
238 surface_id_(surface_id), 239 surface_id_(surface_id),
239 active_url_(active_url), 240 active_url_(active_url),
240 context_lost_callback_(0), 241 context_lost_callback_(0),
241 context_lost_reason_(GL_NO_ERROR), 242 context_lost_reason_(GL_NO_ERROR),
242 error_message_callback_(0), 243 error_message_callback_(0),
243 attributes_(attributes), 244 attributes_(attributes),
244 gpu_preference_(attributes.preferDiscreteGPU ? gfx::PreferDiscreteGpu 245 gpu_preference_(attributes.preferDiscreteGPU ? gfx::PreferDiscreteGpu
245 : gfx::PreferIntegratedGpu), 246 : gfx::PreferIntegratedGpu),
246 weak_ptr_factory_(this), 247 weak_ptr_factory_(this),
247 initialized_(false), 248 initialized_(false),
248 gl_(NULL), 249 gl_(NULL),
249 bind_generates_resources_(bind_generates_resources), 250 bind_generates_resources_(bind_generates_resources),
251 lose_context_when_out_of_memory_(lose_context_when_out_of_memory),
250 mem_limits_(limits), 252 mem_limits_(limits),
251 flush_id_(0) { 253 flush_id_(0) {
252 if (share_context) { 254 if (share_context) {
253 DCHECK(!attributes_.shareResources); 255 DCHECK(!attributes_.shareResources);
254 share_group_ = share_context->share_group_; 256 share_group_ = share_context->share_group_;
255 } else { 257 } else {
256 share_group_ = attributes_.shareResources 258 share_group_ = attributes_.shareResources
257 ? GetDefaultShareGroupForHost(host) 259 ? GetDefaultShareGroupForHost(host)
258 : scoped_refptr<WebGraphicsContext3DCommandBufferImpl::ShareGroup>( 260 : scoped_refptr<WebGraphicsContext3DCommandBufferImpl::ShareGroup>(
259 new ShareGroup()); 261 new ShareGroup());
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 attribs.push_back(DEPTH_SIZE); 345 attribs.push_back(DEPTH_SIZE);
344 attribs.push_back(attributes_.depth ? 24 : 0); 346 attribs.push_back(attributes_.depth ? 24 : 0);
345 attribs.push_back(STENCIL_SIZE); 347 attribs.push_back(STENCIL_SIZE);
346 attribs.push_back(attributes_.stencil ? 8 : 0); 348 attribs.push_back(attributes_.stencil ? 8 : 0);
347 attribs.push_back(SAMPLES); 349 attribs.push_back(SAMPLES);
348 attribs.push_back(attributes_.antialias ? 4 : 0); 350 attribs.push_back(attributes_.antialias ? 4 : 0);
349 attribs.push_back(SAMPLE_BUFFERS); 351 attribs.push_back(SAMPLE_BUFFERS);
350 attribs.push_back(attributes_.antialias ? 1 : 0); 352 attribs.push_back(attributes_.antialias ? 1 : 0);
351 attribs.push_back(FAIL_IF_MAJOR_PERF_CAVEAT); 353 attribs.push_back(FAIL_IF_MAJOR_PERF_CAVEAT);
352 attribs.push_back(attributes_.failIfMajorPerformanceCaveat ? 1 : 0); 354 attribs.push_back(attributes_.failIfMajorPerformanceCaveat ? 1 : 0);
355 attribs.push_back(LOSE_CONTEXT_WHEN_OUT_OF_MEMORY);
356 attribs.push_back(lose_context_when_out_of_memory_ ? 1 : 0);
353 attribs.push_back(NONE); 357 attribs.push_back(NONE);
354 358
355 // Create a proxy to a command buffer in the GPU process. 359 // Create a proxy to a command buffer in the GPU process.
356 if (onscreen) { 360 if (onscreen) {
357 command_buffer_.reset(host_->CreateViewCommandBuffer( 361 command_buffer_.reset(host_->CreateViewCommandBuffer(
358 surface_id_, 362 surface_id_,
359 share_group_command_buffer, 363 share_group_command_buffer,
360 attribs, 364 attribs,
361 active_url_, 365 active_url_,
362 gpu_preference_)); 366 gpu_preference_));
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 421
418 if (attributes_.noAutomaticFlushes) 422 if (attributes_.noAutomaticFlushes)
419 gles2_helper_->SetAutomaticFlushes(false); 423 gles2_helper_->SetAutomaticFlushes(false);
420 // Create a transfer buffer used to copy resources between the renderer 424 // Create a transfer buffer used to copy resources between the renderer
421 // process and the GPU process. 425 // process and the GPU process.
422 transfer_buffer_ .reset(new gpu::TransferBuffer(gles2_helper_.get())); 426 transfer_buffer_ .reset(new gpu::TransferBuffer(gles2_helper_.get()));
423 427
424 DCHECK(host_.get()); 428 DCHECK(host_.get());
425 429
426 // Create the object exposing the OpenGL API. 430 // Create the object exposing the OpenGL API.
427 real_gl_.reset(new gpu::gles2::GLES2Implementation( 431 real_gl_.reset(
428 gles2_helper_.get(), 432 new gpu::gles2::GLES2Implementation(gles2_helper_.get(),
429 gles2_share_group, 433 gles2_share_group,
430 transfer_buffer_.get(), 434 transfer_buffer_.get(),
431 bind_generates_resources_, 435 bind_generates_resources_,
432 command_buffer_.get())); 436 lose_context_when_out_of_memory_,
437 command_buffer_.get()));
433 gl_ = real_gl_.get(); 438 gl_ = real_gl_.get();
434 439
435 if (!real_gl_->Initialize( 440 if (!real_gl_->Initialize(
436 mem_limits_.start_transfer_buffer_size, 441 mem_limits_.start_transfer_buffer_size,
437 mem_limits_.min_transfer_buffer_size, 442 mem_limits_.min_transfer_buffer_size,
438 mem_limits_.max_transfer_buffer_size, 443 mem_limits_.max_transfer_buffer_size,
439 mem_limits_.mapped_memory_reclaim_limit)) { 444 mem_limits_.mapped_memory_reclaim_limit)) {
440 LOG(ERROR) << "Failed to initialize GLES2Implementation."; 445 LOG(ERROR) << "Failed to initialize GLES2Implementation.";
441 return false; 446 return false;
442 } 447 }
(...skipping 741 matching lines...) Expand 10 before | Expand all | Expand 10 after
1184 return true; 1189 return true;
1185 gpu::CommandBuffer::State state = command_buffer_->GetLastState(); 1190 gpu::CommandBuffer::State state = command_buffer_->GetLastState();
1186 return state.error == gpu::error::kLostContext; 1191 return state.error == gpu::error::kLostContext;
1187 } 1192 }
1188 1193
1189 // static 1194 // static
1190 WebGraphicsContext3DCommandBufferImpl* 1195 WebGraphicsContext3DCommandBufferImpl*
1191 WebGraphicsContext3DCommandBufferImpl::CreateOffscreenContext( 1196 WebGraphicsContext3DCommandBufferImpl::CreateOffscreenContext(
1192 GpuChannelHost* host, 1197 GpuChannelHost* host,
1193 const WebGraphicsContext3D::Attributes& attributes, 1198 const WebGraphicsContext3D::Attributes& attributes,
1199 bool lose_context_when_out_of_memory,
1194 const GURL& active_url, 1200 const GURL& active_url,
1195 const SharedMemoryLimits& limits, 1201 const SharedMemoryLimits& limits,
1196 WebGraphicsContext3DCommandBufferImpl* share_context) { 1202 WebGraphicsContext3DCommandBufferImpl* share_context) {
1197 if (!host) 1203 if (!host)
1198 return NULL; 1204 return NULL;
1199 1205
1200 if (share_context && share_context->IsCommandBufferContextLost()) 1206 if (share_context && share_context->IsCommandBufferContextLost())
1201 return NULL; 1207 return NULL;
1202 1208
1203 return new WebGraphicsContext3DCommandBufferImpl(0, 1209 bool bind_generates_resources = false;
1204 active_url, 1210 return new WebGraphicsContext3DCommandBufferImpl(
1205 host, 1211 0,
1206 attributes, 1212 active_url,
1207 false, 1213 host,
1208 limits, 1214 attributes,
1209 share_context); 1215 bind_generates_resources,
1216 lose_context_when_out_of_memory,
1217 limits,
1218 share_context);
1210 } 1219 }
1211 1220
1212 DELEGATE_TO_GL_5(texImageIOSurface2DCHROMIUM, TexImageIOSurface2DCHROMIUM, 1221 DELEGATE_TO_GL_5(texImageIOSurface2DCHROMIUM, TexImageIOSurface2DCHROMIUM,
1213 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Duint, WGC3Duint) 1222 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Duint, WGC3Duint)
1214 1223
1215 DELEGATE_TO_GL_5(texStorage2DEXT, TexStorage2DEXT, 1224 DELEGATE_TO_GL_5(texStorage2DEXT, TexStorage2DEXT,
1216 WGC3Denum, WGC3Dint, WGC3Duint, WGC3Dint, WGC3Dint) 1225 WGC3Denum, WGC3Dint, WGC3Duint, WGC3Dint, WGC3Dint)
1217 1226
1218 WebGLId WebGraphicsContext3DCommandBufferImpl::createQueryEXT() { 1227 WebGLId WebGraphicsContext3DCommandBufferImpl::createQueryEXT() {
1219 GLuint o; 1228 GLuint o;
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
1391 1400
1392 void WebGraphicsContext3DCommandBufferImpl::OnErrorMessage( 1401 void WebGraphicsContext3DCommandBufferImpl::OnErrorMessage(
1393 const std::string& message, int id) { 1402 const std::string& message, int id) {
1394 if (error_message_callback_) { 1403 if (error_message_callback_) {
1395 blink::WebString str = blink::WebString::fromUTF8(message.c_str()); 1404 blink::WebString str = blink::WebString::fromUTF8(message.c_str());
1396 error_message_callback_->onErrorMessage(str, id); 1405 error_message_callback_->onErrorMessage(str, id);
1397 } 1406 }
1398 } 1407 }
1399 1408
1400 } // namespace content 1409 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h ('k') | content/renderer/render_thread_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698