Index: content/gpu/gpu_child_thread.cc |
diff --git a/content/gpu/gpu_child_thread.cc b/content/gpu/gpu_child_thread.cc |
index b9f7bc5442aabdda8398c56817ef52b8cde3f822..bcf5c03874a8c120a650f6cd54355ee0cf385cae 100644 |
--- a/content/gpu/gpu_child_thread.cc |
+++ b/content/gpu/gpu_child_thread.cc |
@@ -15,6 +15,8 @@ |
#include "content/child/thread_safe_sender.h" |
#include "content/common/gpu/gpu_memory_buffer_factory.h" |
#include "content/common/gpu/gpu_messages.h" |
+#include "content/gpu/chrome_gpu_memory_buffer_service_ipc_transport.h" |
+#include "content/gpu/gpu_memory_buffer_service.h" |
#include "content/gpu/gpu_process_control_impl.h" |
#include "content/gpu/gpu_watchdog_thread.h" |
#include "content/public/common/content_client.h" |
@@ -49,74 +51,14 @@ bool GpuProcessLogMessageHandler(int severity, |
return false; |
} |
-// Message filter used to to handle GpuMsg_CreateGpuMemoryBuffer messages on |
-// the IO thread. This allows the UI thread in the browser process to remain |
-// fast at all times. |
-class GpuMemoryBufferMessageFilter : public IPC::MessageFilter { |
- public: |
- explicit GpuMemoryBufferMessageFilter( |
- GpuMemoryBufferFactory* gpu_memory_buffer_factory) |
- : gpu_memory_buffer_factory_(gpu_memory_buffer_factory), |
- sender_(nullptr) {} |
- |
- // Overridden from IPC::MessageFilter: |
- void OnFilterAdded(IPC::Sender* sender) override { |
- DCHECK(!sender_); |
- sender_ = sender; |
- } |
- void OnFilterRemoved() override { |
- DCHECK(sender_); |
- sender_ = nullptr; |
- } |
- bool OnMessageReceived(const IPC::Message& message) override { |
- DCHECK(sender_); |
- bool handled = true; |
- IPC_BEGIN_MESSAGE_MAP(GpuMemoryBufferMessageFilter, message) |
- IPC_MESSAGE_HANDLER(GpuMsg_CreateGpuMemoryBuffer, OnCreateGpuMemoryBuffer) |
- IPC_MESSAGE_HANDLER(GpuMsg_CreateGpuMemoryBufferFromHandle, |
- OnCreateGpuMemoryBufferFromHandle) |
- IPC_MESSAGE_UNHANDLED(handled = false) |
- IPC_END_MESSAGE_MAP() |
- return handled; |
- } |
- |
- protected: |
- ~GpuMemoryBufferMessageFilter() override {} |
- |
- void OnCreateGpuMemoryBuffer( |
- const GpuMsg_CreateGpuMemoryBuffer_Params& params) { |
- TRACE_EVENT2("gpu", "GpuMemoryBufferMessageFilter::OnCreateGpuMemoryBuffer", |
- "id", params.id.id, "client_id", params.client_id); |
- |
- DCHECK(gpu_memory_buffer_factory_); |
- sender_->Send(new GpuHostMsg_GpuMemoryBufferCreated( |
- gpu_memory_buffer_factory_->CreateGpuMemoryBuffer( |
- params.id, params.size, params.format, params.usage, |
- params.client_id, params.surface_handle))); |
- } |
- |
- void OnCreateGpuMemoryBufferFromHandle( |
- const GpuMsg_CreateGpuMemoryBufferFromHandle_Params& params) { |
- TRACE_EVENT2( |
- "gpu", |
- "GpuMemoryBufferMessageFilter::OnCreateGpuMemoryBufferFromHandle", "id", |
- params.id.id, "client_id", params.client_id); |
- sender_->Send(new GpuHostMsg_GpuMemoryBufferCreated( |
- gpu_memory_buffer_factory_->CreateGpuMemoryBufferFromHandle( |
- params.handle, params.id, params.size, params.format, |
- params.client_id))); |
- } |
- |
- GpuMemoryBufferFactory* const gpu_memory_buffer_factory_; |
- IPC::Sender* sender_; |
-}; |
- |
ChildThreadImpl::Options GetOptions( |
GpuMemoryBufferFactory* gpu_memory_buffer_factory) { |
ChildThreadImpl::Options::Builder builder; |
builder.AddStartupFilter( |
- new GpuMemoryBufferMessageFilter(gpu_memory_buffer_factory)); |
+ static_cast<ChromeGpuMemoryBufferServiceIPCTransport*>( |
+ (new GpuMemoryBufferService(gpu_memory_buffer_factory))->transport()) |
+ ->filter()); |
#if defined(USE_OZONE) |
IPC::MessageFilter* message_filter = ui::OzonePlatform::GetInstance() |
@@ -156,11 +98,15 @@ GpuChildThread::GpuChildThread( |
const InProcessChildThreadParams& params, |
GpuMemoryBufferFactory* gpu_memory_buffer_factory, |
gpu::SyncPointManager* sync_point_manager) |
- : ChildThreadImpl(ChildThreadImpl::Options::Builder() |
- .InBrowserProcess(params) |
- .AddStartupFilter(new GpuMemoryBufferMessageFilter( |
- gpu_memory_buffer_factory)) |
- .Build()), |
+ : ChildThreadImpl( |
+ ChildThreadImpl::Options::Builder() |
+ .InBrowserProcess(params) |
+ .AddStartupFilter( |
+ static_cast<ChromeGpuMemoryBufferServiceIPCTransport*>( |
+ (new GpuMemoryBufferService(gpu_memory_buffer_factory)) |
+ ->transport()) |
+ ->filter()) |
+ .Build()), |
dead_on_arrival_(false), |
sync_point_manager_(sync_point_manager), |
in_browser_process_(true), |