From 54947031f1b6094498f16b49009a5abceba3d401 Mon Sep 17 00:00:00 2001 From: "kbr@chromium.org" Date: Sat, 8 Dec 2012 01:44:01 +0000 Subject: Send notification from GPU process to browser process of offscreen context creation and destruction, and all context lost events. This improves the robustness of blocking of client 3D APIs such as WebGL when GPU resets occur. Note that this fix depends on the fix for https://bugs.webkit.org/show_bug.cgi?id=103793 . BUG=112339 TEST=test case from bug Review URL: https://chromiumcodereview.appspot.com/11434072 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171910 0039d316-1c4b-4281-b951-d872f2087c98 --- content/common/gpu/gpu_command_buffer_stub.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'content/common/gpu/gpu_command_buffer_stub.cc') diff --git a/content/common/gpu/gpu_command_buffer_stub.cc b/content/common/gpu/gpu_command_buffer_stub.cc index 61b1822..e2f1e15 100644 --- a/content/common/gpu/gpu_command_buffer_stub.cc +++ b/content/common/gpu/gpu_command_buffer_stub.cc @@ -301,6 +301,12 @@ bool GpuCommandBufferStub::MakeCurrent() { } void GpuCommandBufferStub::Destroy() { + if (handle_.is_null() && !active_url_.is_empty()) { + GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager(); + gpu_channel_manager->Send(new GpuHostMsg_DidDestroyOffscreenContext( + active_url_)); + } + GetMemoryManager()->RemoveClient(this); while (!sync_points_.empty()) @@ -507,6 +513,12 @@ void GpuCommandBufferStub::OnInitialize( GpuCommandBufferMsg_Initialize::WriteReplyParams(reply_message, true); Send(reply_message); + + if (handle_.is_null() && !active_url_.is_empty()) { + GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager(); + gpu_channel_manager->Send(new GpuHostMsg_DidCreateOffscreenContext( + active_url_)); + } } void GpuCommandBufferStub::OnSetGetBuffer( @@ -583,6 +595,13 @@ void GpuCommandBufferStub::OnParseError() { route_id_, state.context_lost_reason); msg->set_unblock(true); Send(msg); + + // Tell the browser about this context loss as well, so it can + // determine whether client APIs like WebGL need to be immediately + // blocked from automatically running. + GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager(); + gpu_channel_manager->Send(new GpuHostMsg_DidLoseContext( + handle_.is_null(), state.context_lost_reason, active_url_)); } void GpuCommandBufferStub::OnGetStateFast(IPC::Message* reply_message) { -- cgit v1.1