| Index: content/common/gpu/client/command_buffer_proxy_impl.cc
|
| diff --git a/content/common/gpu/client/command_buffer_proxy_impl.cc b/content/common/gpu/client/command_buffer_proxy_impl.cc
|
| index a8b4ba0fe0b34abb87d65a56fecf28e532600773..9176919e2e0ac86ca9071d314402df7b6fd3cf1d 100644
|
| --- a/content/common/gpu/client/command_buffer_proxy_impl.cc
|
| +++ b/content/common/gpu/client/command_buffer_proxy_impl.cc
|
| @@ -83,7 +83,10 @@ bool CommandBufferProxyImpl::OnMessageReceived(const IPC::Message& message) {
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
|
|
| - DCHECK(handled);
|
| + if (!handled) {
|
| + DLOG(ERROR) << "Gpu process sent invalid message.";
|
| + InvalidGpuMessage();
|
| + }
|
| return handled;
|
| }
|
|
|
| @@ -149,7 +152,11 @@ void CommandBufferProxyImpl::RemoveDeletionObserver(
|
|
|
| void CommandBufferProxyImpl::OnSignalAck(uint32_t id) {
|
| SignalTaskMap::iterator it = signal_tasks_.find(id);
|
| - DCHECK(it != signal_tasks_.end());
|
| + if (it == signal_tasks_.end()) {
|
| + DLOG(ERROR) << "Gpu process sent invalid SignalAck.";
|
| + InvalidGpuMessage();
|
| + return;
|
| + }
|
| base::Closure callback = it->second;
|
| signal_tasks_.erase(it);
|
| callback.Run();
|
| @@ -304,8 +311,11 @@ void CommandBufferProxyImpl::WaitForTokenInRange(int32_t start, int32_t end) {
|
| route_id_, start, end, &state)))
|
| OnUpdateState(state);
|
| }
|
| - DCHECK(InRange(start, end, last_state_.token) ||
|
| - last_state_.error != gpu::error::kNoError);
|
| + if (!InRange(start, end, last_state_.token) &&
|
| + last_state_.error == gpu::error::kNoError) {
|
| + DLOG(ERROR) << "GPU state invalid after WaitForTokenInRange.";
|
| + InvalidGpuMessage();
|
| + }
|
| }
|
|
|
| void CommandBufferProxyImpl::WaitForGetOffsetInRange(int32_t start,
|
| @@ -325,8 +335,11 @@ void CommandBufferProxyImpl::WaitForGetOffsetInRange(int32_t start,
|
| route_id_, start, end, &state)))
|
| OnUpdateState(state);
|
| }
|
| - DCHECK(InRange(start, end, last_state_.get_offset) ||
|
| - last_state_.error != gpu::error::kNoError);
|
| + if (!InRange(start, end, last_state_.get_offset) &&
|
| + last_state_.error == gpu::error::kNoError) {
|
| + DLOG(ERROR) << "GPU state invalid after WaitForGetOffsetInRange.";
|
| + InvalidGpuMessage();
|
| + }
|
| }
|
|
|
| void CommandBufferProxyImpl::SetGetBuffer(int32_t shm_id) {
|
| @@ -778,4 +791,9 @@ void CommandBufferProxyImpl::OnUpdateVSyncParameters(base::TimeTicks timebase,
|
| update_vsync_parameters_completion_callback_.Run(timebase, interval);
|
| }
|
|
|
| +void CommandBufferProxyImpl::InvalidGpuMessage() {
|
| + LOG(ERROR) << "Received invalid message or reply from the GPU process.";
|
| + OnDestroyed(gpu::error::kInvalidGpuMessage, gpu::error::kLostContext);
|
| +}
|
| +
|
| } // namespace content
|
|
|