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

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

Issue 11475017: Revert 171569 as it broke some browser_tests on win_aura. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years 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/image_transport_factory.cc
===================================================================
--- content/browser/renderer_host/image_transport_factory.cc (revision 171661)
+++ content/browser/renderer_host/image_transport_factory.cc (working copy)
@@ -10,7 +10,6 @@
#include "base/bind.h"
#include "base/command_line.h"
#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
#include "base/observer_list.h"
#include "base/threading/non_thread_safe.h"
#include "content/browser/gpu/browser_gpu_channel_host_factory.h"
@@ -28,8 +27,6 @@
#include "third_party/WebKit/Source/Platform/chromium/public/WebCompositorOutputSurface.h"
#include "third_party/WebKit/Source/Platform/chromium/public/WebCompositorOutputSurfaceClient.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebGraphicsContext3D.h"
-#include "third_party/khronos/GLES2/gl2.h"
-#include "third_party/khronos/GLES2/gl2ext.h"
#include "ui/compositor/compositor.h"
#include "ui/compositor/compositor_setup.h"
#include "ui/compositor/test_web_graphics_context_3d.h"
@@ -68,7 +65,7 @@
virtual scoped_refptr<ui::Texture> CreateTransportClient(
const gfx::Size& size,
float device_scale_factor,
- const std::string& mailbox_name) OVERRIDE {
+ uint64 transport_handle) OVERRIDE {
return NULL;
}
@@ -100,6 +97,40 @@
DISALLOW_COPY_AND_ASSIGN(DefaultTransportFactory);
};
+class ImageTransportClientTexture : public ui::Texture {
+ public:
+ ImageTransportClientTexture(
+ WebKit::WebGraphicsContext3D* host_context,
+ const gfx::Size& size,
+ float device_scale_factor,
+ uint64 surface_id)
+ : ui::Texture(true, size, device_scale_factor),
+ host_context_(host_context),
+ texture_id_(surface_id) {
+ }
+
+ // ui::Texture overrides:
+ virtual unsigned int PrepareTexture() OVERRIDE {
+ return texture_id_;
+ }
+
+ virtual WebKit::WebGraphicsContext3D* HostContext3D() OVERRIDE {
+ return host_context_;
+ }
+
+ protected:
+ virtual ~ImageTransportClientTexture() {}
+
+ private:
+ // A raw pointer. This |ImageTransportClientTexture| will be destroyed
+ // before the |host_context_| via
+ // |ImageTransportFactoryObserver::OnLostContext()| handlers.
+ WebKit::WebGraphicsContext3D* host_context_;
+ unsigned texture_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(ImageTransportClientTexture);
+};
+
class OwnedTexture : public ui::Texture, ImageTransportFactoryObserver {
public:
OwnedTexture(WebKit::WebGraphicsContext3D* host_context,
@@ -132,7 +163,7 @@
DeleteTexture();
}
- protected:
+ private:
void DeleteTexture() {
if (texture_id_) {
host_context_->deleteTexture(texture_id_);
@@ -149,53 +180,6 @@
DISALLOW_COPY_AND_ASSIGN(OwnedTexture);
};
-class ImageTransportClientTexture : public OwnedTexture {
- public:
- ImageTransportClientTexture(
- WebKit::WebGraphicsContext3D* host_context,
- const gfx::Size& size,
- float device_scale_factor,
- const std::string& mailbox_name)
- : OwnedTexture(host_context,
- size,
- device_scale_factor,
- host_context->createTexture()),
- mailbox_name_(mailbox_name) {
- DCHECK(mailbox_name.size() == GL_MAILBOX_SIZE_CHROMIUM);
- }
-
- virtual void Consume(const gfx::Size& new_size) OVERRIDE {
- if (!mailbox_name_.length())
- return;
-
- DCHECK(host_context_ && texture_id_);
- host_context_->bindTexture(GL_TEXTURE_2D, texture_id_);
- host_context_->consumeTextureCHROMIUM(
- GL_TEXTURE_2D,
- reinterpret_cast<const signed char*>(mailbox_name_.c_str()));
- size_ = new_size;
- host_context_->flush();
- }
-
- virtual void Produce() OVERRIDE {
- if (!mailbox_name_.length())
- return;
-
- DCHECK(host_context_ && texture_id_);
- host_context_->bindTexture(GL_TEXTURE_2D, texture_id_);
- host_context_->produceTextureCHROMIUM(
- GL_TEXTURE_2D,
- reinterpret_cast<const signed char*>(mailbox_name_.c_str()));
- }
-
- protected:
- virtual ~ImageTransportClientTexture() {}
-
- private:
- std::string mailbox_name_;
- DISALLOW_COPY_AND_ASSIGN(ImageTransportClientTexture);
-};
-
class GpuProcessTransportFactory;
class CompositorSwapClient
@@ -423,24 +407,41 @@
gfx::GLSurfaceHandle handle = gfx::GLSurfaceHandle(
gfx::kNullPluginWindow, true);
handle.parent_gpu_process_id = shared_context_->GetGPUProcessID();
+ handle.parent_client_id = shared_context_->GetChannelID();
+ handle.parent_context_id = shared_context_->GetContextID();
+ handle.parent_texture_id[0] = shared_context_->createTexture();
+ handle.parent_texture_id[1] = shared_context_->createTexture();
+ handle.sync_point = shared_context_->insertSyncPoint();
return handle;
}
virtual void DestroySharedSurfaceHandle(
gfx::GLSurfaceHandle surface) OVERRIDE {
+ if (!shared_context_.get())
+ return;
+ uint32 channel_id = shared_context_->GetChannelID();
+ uint32 context_id = shared_context_->GetContextID();
+ if (surface.parent_gpu_process_id != shared_context_->GetGPUProcessID() ||
+ surface.parent_client_id != channel_id ||
+ surface.parent_context_id != context_id)
+ return;
+
+ shared_context_->deleteTexture(surface.parent_texture_id[0]);
+ shared_context_->deleteTexture(surface.parent_texture_id[1]);
+ shared_context_->flush();
}
virtual scoped_refptr<ui::Texture> CreateTransportClient(
const gfx::Size& size,
float device_scale_factor,
- const std::string& mailbox_name) {
+ uint64 transport_handle) {
if (!shared_context_.get())
return NULL;
scoped_refptr<ImageTransportClientTexture> image(
new ImageTransportClientTexture(shared_context_.get(),
size, device_scale_factor,
- mailbox_name));
+ transport_handle));
return image;
}

Powered by Google App Engine
This is Rietveld 408576698