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

Unified Diff: content/browser/renderer_host/render_message_filter.cc

Issue 1799713002: gpu_host_messages.h => content/gpu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed an unnecessary include Created 4 years, 9 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
Index: content/browser/renderer_host/render_message_filter.cc
diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc
index d3e33aee5e29571df3b43fce1947650ee32c8ca2..9035c9f733aa3f9391589f4675c34e8811d0571b 100644
--- a/content/browser/renderer_host/render_message_filter.cc
+++ b/content/browser/renderer_host/render_message_filter.cc
@@ -25,6 +25,8 @@
#include "content/browser/dom_storage/session_storage_namespace_impl.h"
#include "content/browser/download/download_stats.h"
#include "content/browser/gpu/browser_gpu_memory_buffer_manager.h"
+#include "content/browser/gpu/gpu_data_manager_impl.h"
+#include "content/browser/gpu/gpu_process_host.h"
#include "content/browser/loader/resource_dispatcher_host_impl.h"
#include "content/browser/media/media_internals.h"
#include "content/browser/renderer_host/pepper/pepper_security_helper.h"
@@ -134,9 +136,11 @@ RenderMessageFilter::RenderMessageFilter(
resource_context_(browser_context->GetResourceContext()),
render_widget_helper_(render_widget_helper),
dom_storage_context_(dom_storage_context),
+ gpu_process_id_(0),
render_process_id_(render_process_id),
audio_manager_(audio_manager),
- media_internals_(media_internals) {
+ media_internals_(media_internals),
+ weak_ptr_factory_(this) {
DCHECK(request_context_.get());
if (render_widget_helper)
@@ -185,6 +189,10 @@ bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER_DELAY_REPLY(
ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer,
OnAllocateGpuMemoryBuffer)
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(ChildProcessHostMsg_EstablishGpuChannel,
+ OnEstablishGpuChannel)
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(ChildProcessHostMsg_HasGpuProcess,
+ OnHasGpuProcess)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_DeletedGpuMemoryBuffer,
OnDeletedGpuMemoryBuffer)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_AllocatedSharedBitmap,
@@ -652,6 +660,74 @@ void RenderMessageFilter::GpuMemoryBufferAllocated(
Send(reply);
}
+void RenderMessageFilter::OnEstablishGpuChannel(
+ CauseForGpuLaunch cause_for_gpu_launch,
+ IPC::Message* reply_ptr) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ scoped_ptr<IPC::Message> reply(reply_ptr);
+
+#if defined(OS_WIN) && defined(ARCH_CPU_X86_64)
+ // TODO(jbauman): Remove this when we know why renderer processes are
+ // hanging on x86-64. https://crbug.com/577127
+ if (!GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor()) {
+ reply->set_reply_error();
+ Send(reply.release());
+ return;
+ }
+#endif
+
+ GpuProcessHost* host = GpuProcessHost::FromID(gpu_process_id_);
+ if (!host) {
+ host = GpuProcessHost::Get(GpuProcessHost::GPU_PROCESS_KIND_SANDBOXED,
+ cause_for_gpu_launch);
+ if (!host) {
+ reply->set_reply_error();
+ Send(reply.release());
+ return;
+ }
+
+ gpu_process_id_ = host->host_id();
+ }
+
+ bool preempts = false;
+ bool allow_view_command_buffers = false;
+ bool allow_real_time_streams = false;
+ host->EstablishGpuChannel(
+ render_process_id_,
+ ChildProcessHostImpl::ChildProcessUniqueIdToTracingProcessId(
+ render_process_id_),
+ preempts, allow_view_command_buffers, allow_real_time_streams,
+ base::Bind(&RenderMessageFilter::EstablishChannelCallback,
+ weak_ptr_factory_.GetWeakPtr(), base::Passed(&reply)));
+}
+
+void RenderMessageFilter::OnHasGpuProcess(IPC::Message* reply_ptr) {
+ scoped_ptr<IPC::Message> reply(reply_ptr);
+ GpuProcessHost::GetProcessHandles(
+ base::Bind(&RenderMessageFilter::GetGpuProcessHandlesCallback,
+ weak_ptr_factory_.GetWeakPtr(), base::Passed(&reply)));
+}
+
+void RenderMessageFilter::EstablishChannelCallback(
+ scoped_ptr<IPC::Message> reply,
+ const IPC::ChannelHandle& channel,
+ const gpu::GPUInfo& gpu_info) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ ChildProcessHostMsg_EstablishGpuChannel::WriteReplyParams(
+ reply.get(), render_process_id_, channel, gpu_info);
+ Send(reply.release());
+}
+
+void RenderMessageFilter::GetGpuProcessHandlesCallback(
+ scoped_ptr<IPC::Message> reply,
+ const std::list<base::ProcessHandle>& handles) {
+ bool has_gpu_process = handles.size() > 0;
+ ChildProcessHostMsg_HasGpuProcess::WriteReplyParams(reply.get(),
+ has_gpu_process);
+ Send(reply.release());
+}
+
void RenderMessageFilter::OnDeletedGpuMemoryBuffer(
gfx::GpuMemoryBufferId id,
const gpu::SyncToken& sync_token) {

Powered by Google App Engine
This is Rietveld 408576698