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

Unified Diff: content/renderer/transport_texture_host.h

Issue 7066035: Moved GPU related files in content/renderer into gpu subdirectory. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 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
« no previous file with comments | « content/renderer/renderer_webkitclient_impl.cc ('k') | content/renderer/transport_texture_host.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « content/renderer/renderer_webkitclient_impl.cc ('k') | content/renderer/transport_texture_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698