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

Unified Diff: content/common/gpu/client/command_buffer_proxy_impl.cc

Issue 1581273002: Harden CommandBufferProxyImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/common/gpu/client/command_buffer_proxy_impl.h ('k') | gpu/command_buffer/common/constants.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « content/common/gpu/client/command_buffer_proxy_impl.h ('k') | gpu/command_buffer/common/constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698