Index: content/renderer/transport_texture_host.h |
=================================================================== |
--- content/renderer/transport_texture_host.h (revision 86484) |
+++ content/renderer/transport_texture_host.h (working copy) |
@@ -1,197 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Transport texture is a mechanism to share a texture between renderer process |
-// and GPU process. This is useful when a texture is used in the renderer |
-// process but updated in the GPU process. |
-// |
-// BACKGROUND INFORMATION |
-// |
-// Renderer process uses command buffer to submit GLES2 commands to the GPU |
-// process for execution. When using a texture in the renderer process it is |
-// supposed to update the texture, for example by using glTexImage2D(). |
-// |
-// However for some cases the texture needs to be updated in the GPU process. |
-// Objects other than command buffer in the GPU process will then need to |
-// access the texture ID. |
-// |
-// This class provides the following functions that solve the problems: |
-// 1. Textures be requested in the GPU process. The request is submitted |
-// to renderer process and textures are created in the command buffer |
-// context and eventually in the system context. |
-// 2. Textures are then create and used in the renderer process. |
-// 3. The corresponding texture ID in the GPU process can be obtained. |
-// 4. When texture is updated in the GPU process, notification can be received |
-// in the renderer process. |
-// |
-// THREAD SEMANTICS |
-// |
-// TransportTextureHost *must* be created on the render thread. |
-// After that methods of this object call be called on any thread. |
-// |
-// GLES2 commands are executed on Render Thread. IPC messages are sent and |
-// received on IO thread. |
-// |
-// USAGE |
-// |
-// -------------------------- |
-// | In the renderer procss | |
-// -------------------------- |
-// |
-// class TextureUpdateHandler { |
-// public: |
-// void OnTextureUpdate(int texture_id) { |
-// // Do something with the texture. |
-// } |
-// } |
-// |
-// TransportTextureHost factory_host; |
-// TextureUpdateHandler handler; |
-// |
-// void MyObjectInitDone() { |
-// std::vector<int> textures; |
-// factory_host.GetTextures( |
-// NewCallback(&handler, &TextureUpdateHandler::OnTextureUpdate), |
-// &textures); |
-// } |
-// |
-// void InitDone() { |
-// InitMyObjectInGPUProcess(factory_host.GetPeerId(), |
-// NewRunnableFunction(&MyObjectInitDone)); |
-// } |
-// |
-// factory_host.Init(NewRunnableFunction(&InitDone)); |
-// |
-// ---------------------- |
-// | In the GPU process | |
-// ---------------------- |
-// |
-// // When the transport texture factory id is known. |
-// TransportTexture* factory = gpu_channel->GetTransportTexture(id); |
-// |
-// void TextureCreateDone(vector<int> textures) { |
-// // Send message to renderer saying init is done. |
-// SendInitDone(); |
-// |
-// UpdateTextureContent(textures[0]); |
-// factory->TextureUpdated(textures[0]); |
-// } |
-// |
-// // When init is requested from renderer. |
-// vector<int> textures; |
-// |
-// void OnInit() { |
-// factory->CreateTextures(3, 1024, 768, TransportTexture::RGB, &textures, |
-// NewRunnableFunction(&TextureCreateDone), |
-// textures); |
-// } |
- |
-#ifndef CONTENT_RENDERER_TRANSPORT_TEXTURE_HOST_H_ |
-#define CONTENT_RENDERER_TRANSPORT_TEXTURE_HOST_H_ |
- |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/callback_old.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/task.h" |
-#include "ipc/ipc_channel.h" |
- |
-class MessageLoop; |
-class RendererGLContext; |
-class TransportTextureService; |
- |
-class TransportTextureHost |
- : public base::RefCountedThreadSafe<TransportTextureHost>, |
- public IPC::Channel::Listener { |
- public: |
- typedef Callback1<int>::Type TextureUpdateCallback; |
- |
- // |io_message_loop| is where the IPC communication should happen. |
- // |render_message_loop| is where the GLES2 commands should be exeucted. |
- // |service| contains the route to this object. |
- // |sender| is used to send IPC messages to GPU process. |
- // |context| is the RendererGLContextt for generating textures. |
- // |context_route_id| is the route ID for the GpuChannelHost. |
- // |host_id| is the ID of this object in GpuChannelHost. |
- TransportTextureHost(MessageLoop* io_message_loop, |
- MessageLoop* render_message_loop, |
- TransportTextureService* service, |
- IPC::Message::Sender* sender, |
- RendererGLContext* context, |
- int32 context_route_id, |
- int32 host_id); |
- virtual ~TransportTextureHost(); |
- |
- // Initialize this object, this will cause a corresponding |
- // TransportTexture be created in the GPU process. |
- // |done_task| is called when initialization is completed. |
- void Init(Task* done_task); |
- |
- // Destroy resources acquired by this object and in the GPU process. |
- // |
- // WARNING |
- // |
- // Call this method only after textures are not used in both the renderer |
- // and GPU process. |
- void Destroy(); |
- |
- // Get the list of textures generated through this factory. |
- // A callback must be provided to listen to texture update events. The |
- // callback will be called on the IO thread. |
- // |
- // Note that this method doesn't generate any textures, it simply return |
- // the list of textures generated. |
- void GetTextures(TextureUpdateCallback* callback, |
- std::vector<int>* textures); |
- |
- // Return the peer ID of TransportTexture in the GPU process. |
- int GetPeerId(); |
- |
- // IPC::Channel::Listener. |
- virtual void OnChannelConnected(int32 peer_pid); |
- virtual void OnChannelError(); |
- virtual bool OnMessageReceived(const IPC::Message& message); |
- |
- private: |
- // Released all textures generated. |
- void ReleaseTexturesInternal(); |
- |
- // Send the texture IDs to the GPU process. This will copy the set of |
- // texture IDs. |
- void SendTexturesInternal(std::vector<int> textures); |
- |
- // Send the destroy message to the GPU process. |
- void SendDestroyInternal(); |
- |
- //////////////////////////////////////////////////////////////////////////// |
- // IPC Message Handlers |
- void OnTransportTextureCreated(int32 peer_id); |
- void OnCreateTextures(int32 n, uint32 width, uint32 height, int32 format); |
- void OnReleaseTextures(); |
- void OnTextureUpdated(int texture_id); |
- |
- MessageLoop* io_message_loop_; |
- MessageLoop* render_message_loop_; |
- scoped_refptr<TransportTextureService> service_; |
- |
- IPC::Message::Sender* sender_; |
- RendererGLContext* context_; |
- int32 context_route_id_; |
- int32 host_id_; |
- int32 peer_id_; |
- |
- scoped_ptr<Task> init_task_; |
- |
- // A list of textures generated. |
- std::vector<int> textures_; |
- |
- // Callback when a texture is updated. |
- scoped_ptr<TextureUpdateCallback> update_callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TransportTextureHost); |
-}; |
- |
-#endif // CONTENT_RENDERER_TRANSPORT_TEXTURE_HOST_H_ |