Chromium Code Reviews| Index: gpu/command_buffer/client/gles2_implementation.cc |
| diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc |
| index e0b0cb82f60b36b2a9e5f3f39217aaec0112f9d4..d5f21eaaf1a183405149ace660ef1e16e7e86cea 100644 |
| --- a/gpu/command_buffer/client/gles2_implementation.cc |
| +++ b/gpu/command_buffer/client/gles2_implementation.cc |
| @@ -82,11 +82,12 @@ GLES2Implementation::SingleThreadChecker::~SingleThreadChecker() { |
| } |
| GLES2Implementation::GLES2Implementation( |
| - GLES2CmdHelper* helper, |
| - ShareGroup* share_group, |
| - TransferBufferInterface* transfer_buffer, |
| - bool bind_generates_resource, |
| - GpuControl* gpu_control) |
| + GLES2CmdHelper* helper, |
| + ShareGroup* share_group, |
| + TransferBufferInterface* transfer_buffer, |
| + bool bind_generates_resource, |
| + bool lose_context_when_out_of_memory, |
| + GpuControl* gpu_control) |
| : helper_(helper), |
| transfer_buffer_(transfer_buffer), |
| angle_pack_reverse_row_order_status_(kUnknownExtensionStatus), |
| @@ -108,6 +109,7 @@ GLES2Implementation::GLES2Implementation( |
| bound_pixel_unpack_transfer_buffer_id_(0), |
| error_bits_(0), |
| debug_(false), |
| + lose_context_when_out_of_memory_(lose_context_when_out_of_memory), |
| use_count_(0), |
| error_message_callback_(NULL), |
| gpu_control_(gpu_control), |
| @@ -483,6 +485,11 @@ void GLES2Implementation::SetGLError( |
| error_message_callback_->OnErrorMessage(temp.c_str(), 0); |
| } |
| error_bits_ |= GLES2Util::GLErrorToErrorBit(error); |
| + |
| + if (error == GL_OUT_OF_MEMORY && lose_context_when_out_of_memory_) { |
| + helper_->LoseContextCHROMIUM(GL_UNKNOWN_CONTEXT_RESET_ARB, |
|
piman
2014/03/21 21:34:48
nit: we're the guilty one.
danakj
2014/03/21 21:36:02
Should I tell the others they're innocent also? I
danakj
2014/03/21 22:53:50
Done.
|
| + GL_UNKNOWN_CONTEXT_RESET_ARB); |
| + } |
| } |
| void GLES2Implementation::SetGLErrorInvalidEnum( |
| @@ -870,16 +877,6 @@ void GLES2Implementation::ShallowFinishCHROMIUM() { |
| helper_->CommandBufferHelper::Finish(); |
| } |
| -bool GLES2Implementation::MustBeContextLost() { |
| - bool context_lost = helper_->IsContextLost(); |
| - if (!context_lost) { |
| - WaitForCmd(); |
| - context_lost = helper_->IsContextLost(); |
| - } |
| - CHECK(context_lost); |
| - return context_lost; |
| -} |
| - |
| void GLES2Implementation::FinishHelper() { |
| GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFinish()"); |
| TRACE_EVENT0("gpu", "GLES2::Finish"); |
| @@ -3285,7 +3282,9 @@ void GLES2Implementation::BeginQueryEXT(GLenum target, GLuint id) { |
| if (!query) { |
| query = query_tracker_->CreateQuery(id, target); |
| if (!query) { |
| - MustBeContextLost(); |
| + SetGLError(GL_OUT_OF_MEMORY, |
| + "glBeginQueryEXT", |
| + "transfer buffer allocation failed"); |
| return; |
| } |
| } else if (query->target() != target) { |