diff options
Diffstat (limited to 'chrome/browser/gpu_process_host.h')
-rw-r--r-- | chrome/browser/gpu_process_host.h | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/chrome/browser/gpu_process_host.h b/chrome/browser/gpu_process_host.h index d107b88..f64cdd8 100644 --- a/chrome/browser/gpu_process_host.h +++ b/chrome/browser/gpu_process_host.h @@ -13,9 +13,11 @@ #include "chrome/browser/child_process_launcher.h" #include "chrome/common/gpu_native_window_handle.h" #include "chrome/common/message_router.h" +#include "ipc/ipc_channel_handle.h" #include "ipc/ipc_channel_proxy.h" class ChildProcessLauncher; +class CommandBufferProxy; class GpuProcessHost : public IPC::Channel::Sender, public IPC::Channel::Listener, @@ -45,16 +47,51 @@ class GpuProcessHost : public IPC::Channel::Sender, void AddRoute(int32 routing_id, IPC::Channel::Listener* listener); void RemoveRoute(int32 routing_id); + // Tells the GPU process to create a new channel for communication with a + // renderer. Will asynchronously send message to object with given routing id + // on completion. + void EstablishGpuChannel(int renderer_id, int routing_id); + private: friend struct DefaultSingletonTraits<GpuProcessHost>; + // Used to queue pending channel requests. + struct ChannelRequest { + ChannelRequest(int renderer_id, + int routing_id) : + renderer_id(renderer_id), + routing_id(routing_id) {} + // Used to identify the renderer. The ID is used instead of a pointer to + // the RenderProcessHost in case it is destroyed while the request is + // pending. + // TODO(apatrick): investigate whether these IDs are used for future + // render processes. + int renderer_id; + + // Routing ID of object to receive reply message. + int routing_id; + }; + GpuProcessHost(); virtual ~GpuProcessHost(); + void OnControlMessageReceived(const IPC::Message& message); + + // Message handlers. + void OnChannelEstablished(const IPC::ChannelHandle& channel_handle); + + void ReplyToRenderer(int renderer_id, + int routing_id, + const IPC::ChannelHandle& channel); + + // These are the channel requests that we have already sent to + // the GPU process, but haven't heard back about yet. + std::queue<ChannelRequest> sent_requests_; + scoped_ptr<ChildProcessLauncher> child_process_; // A proxy for our IPC::Channel that lives on the IO thread (see - // browser_process.h). This will be NULL if the class failed to initialize. + // browser_process.h). This will be NULL if the class failed to connect. scoped_ptr<IPC::ChannelProxy> channel_; int last_routing_id_; |