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

Unified Diff: content/common/gpu/image_transport_surface_mac.cc

Issue 9958100: Unobfuscate RWHVMac accelerated compositing code path by separating it from plugin code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: public APIs of CompositingIOSurface set context current Created 8 years, 9 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
Index: content/common/gpu/image_transport_surface_mac.cc
diff --git a/content/common/gpu/image_transport_surface_mac.cc b/content/common/gpu/image_transport_surface_mac.cc
index 8cc2c85345ee197e4cc77bf837a465dafaae05ea..6dc3149d9a6da8062e5c2e3a0aaad064f03a78cc 100644
--- a/content/common/gpu/image_transport_surface_mac.cc
+++ b/content/common/gpu/image_transport_surface_mac.cc
@@ -71,57 +71,6 @@ class IOSurfaceImageTransportSurface : public gfx::NoOpGLSurfaceCGL,
DISALLOW_COPY_AND_ASSIGN(IOSurfaceImageTransportSurface);
};
-// We are backed by an offscreen surface for the purposes of creating
-// a context, but use FBOs to render to texture backed IOSurface
-class TransportDIBImageTransportSurface : public gfx::NoOpGLSurfaceCGL,
- public ImageTransportSurface {
- public:
- TransportDIBImageTransportSurface(GpuChannelManager* manager,
- GpuCommandBufferStub* stub,
- gfx::PluginWindowHandle handle);
-
- // GLSurface implementation
- virtual bool Initialize() OVERRIDE;
- virtual void Destroy() OVERRIDE;
- virtual bool IsOffscreen() OVERRIDE;
- virtual bool SwapBuffers() OVERRIDE;
- virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
- virtual std::string GetExtensions() OVERRIDE;
- virtual gfx::Size GetSize() OVERRIDE;
- virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE;
- virtual unsigned int GetBackingFrameBufferObject() OVERRIDE;
-
- protected:
- // ImageTransportSurface implementation
- virtual void OnBuffersSwappedACK() OVERRIDE;
- virtual void OnPostSubBufferACK() OVERRIDE;
- virtual void OnNewSurfaceACK(uint64 surface_handle,
- TransportDIB::Handle shm_handle) OVERRIDE;
- virtual void OnResizeViewACK() OVERRIDE;
- virtual void OnResize(gfx::Size size) OVERRIDE;
-
- private:
- virtual ~TransportDIBImageTransportSurface() OVERRIDE;
-
- uint32 fbo_id_;
- GLuint render_buffer_id_;
-
- scoped_ptr<TransportDIB> shared_mem_;
-
- gfx::Size size_;
-
- static uint32 next_handle_;
-
- // Whether or not we've successfully made the surface current once.
- bool made_current_;
-
- scoped_ptr<ImageTransportHelper> helper_;
-
- DISALLOW_COPY_AND_ASSIGN(TransportDIBImageTransportSurface);
-};
-
-uint32 TransportDIBImageTransportSurface::next_handle_ = 1;
-
void AddBooleanValue(CFMutableDictionaryRef dictionary,
const CFStringRef key,
bool value) {
@@ -260,8 +209,7 @@ void IOSurfaceImageTransportSurface::OnPostSubBufferACK() {
void IOSurfaceImageTransportSurface::OnNewSurfaceACK(
uint64 surface_handle,
TransportDIB::Handle /* shm_handle */) {
- DCHECK_EQ(io_surface_handle_, surface_handle);
- helper_->SetScheduled(true);
+ NOTREACHED();
}
void IOSurfaceImageTransportSurface::OnResizeViewACK() {
@@ -346,216 +294,6 @@ void IOSurfaceImageTransportSurface::OnResize(gfx::Size size) {
glBindTexture(target, previous_texture_id);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id);
-
- GpuHostMsg_AcceleratedSurfaceNew_Params params;
- params.width = size_.width();
- params.height = size_.height();
- params.surface_handle = io_surface_handle_;
- params.create_transport_dib = false;
- helper_->SendAcceleratedSurfaceNew(params);
-
- helper_->SetScheduled(false);
-}
-
-TransportDIBImageTransportSurface::TransportDIBImageTransportSurface(
- GpuChannelManager* manager,
- GpuCommandBufferStub* stub,
- gfx::PluginWindowHandle handle)
- : gfx::NoOpGLSurfaceCGL(gfx::Size(1, 1)),
- fbo_id_(0),
- render_buffer_id_(0),
- made_current_(false) {
- helper_.reset(new ImageTransportHelper(this, manager, stub, handle));
-
-}
-
-TransportDIBImageTransportSurface::~TransportDIBImageTransportSurface() {
- Destroy();
-}
-
-bool TransportDIBImageTransportSurface::Initialize() {
- if (!helper_->Initialize())
- return false;
- return NoOpGLSurfaceCGL::Initialize();
-}
-
-void TransportDIBImageTransportSurface::Destroy() {
- if (fbo_id_) {
- glDeleteFramebuffersEXT(1, &fbo_id_);
- fbo_id_ = 0;
- }
-
- if (render_buffer_id_) {
- glDeleteRenderbuffersEXT(1, &render_buffer_id_);
- render_buffer_id_ = 0;
- }
-
- helper_->Destroy();
- NoOpGLSurfaceCGL::Destroy();
-}
-
-bool TransportDIBImageTransportSurface::IsOffscreen() {
- return false;
-}
-
-bool TransportDIBImageTransportSurface::OnMakeCurrent(gfx::GLContext* context) {
- if (made_current_)
- return true;
-
- glGenFramebuffersEXT(1, &fbo_id_);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo_id_);
- OnResize(gfx::Size(1, 1));
-
- GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- if (status != GL_FRAMEBUFFER_COMPLETE) {
- DLOG(ERROR) << "Framebuffer incomplete.";
- return false;
- }
-
- made_current_ = true;
- return true;
-}
-
-unsigned int TransportDIBImageTransportSurface::GetBackingFrameBufferObject() {
- return fbo_id_;
-}
-
-bool TransportDIBImageTransportSurface::SwapBuffers() {
- DCHECK_NE(shared_mem_.get(), static_cast<void*>(NULL));
-
- GLint previous_fbo_id = 0;
- glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &previous_fbo_id);
-
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo_id_);
-
- GLint current_alignment = 0;
- glGetIntegerv(GL_PACK_ALIGNMENT, &current_alignment);
- glPixelStorei(GL_PACK_ALIGNMENT, 4);
- glReadPixels(0, 0,
- size_.width(), size_.height(),
- GL_BGRA, // This pixel format should have no conversion.
- GL_UNSIGNED_INT_8_8_8_8_REV,
- shared_mem_->memory());
- glPixelStorei(GL_PACK_ALIGNMENT, current_alignment);
-
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id);
-
- GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
- params.surface_handle = next_handle_;
- helper_->SendAcceleratedSurfaceBuffersSwapped(params);
-
- helper_->SetScheduled(false);
- return true;
-}
-
-bool TransportDIBImageTransportSurface::PostSubBuffer(
- int x, int y, int width, int height) {
- DCHECK_NE(shared_mem_.get(), static_cast<void*>(NULL));
-
- GLint previous_fbo_id = 0;
- glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &previous_fbo_id);
-
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo_id_);
-
- GLint current_alignment = 0, current_pack_row_length = 0;
- glGetIntegerv(GL_PACK_ALIGNMENT, &current_alignment);
- glGetIntegerv(GL_PACK_ROW_LENGTH, &current_pack_row_length);
-
- glPixelStorei(GL_PACK_ALIGNMENT, 4);
- glPixelStorei(GL_PACK_ROW_LENGTH, size_.width());
-
- unsigned char* buffer =
- static_cast<unsigned char*>(shared_mem_->memory());
- glReadPixels(x, y,
- width, height,
- GL_BGRA, // This pixel format should have no conversion.
- GL_UNSIGNED_INT_8_8_8_8_REV,
- &buffer[(x + y * size_.width()) * 4]);
-
- glPixelStorei(GL_PACK_ALIGNMENT, current_alignment);
- glPixelStorei(GL_PACK_ROW_LENGTH, current_pack_row_length);
-
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id);
-
- GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params;
- params.surface_handle = next_handle_;
- params.x = x;
- params.y = y;
- params.width = width;
- params.height = height;
- helper_->SendAcceleratedSurfacePostSubBuffer(params);
-
- helper_->SetScheduled(false);
- return true;
-}
-
-std::string TransportDIBImageTransportSurface::GetExtensions() {
- std::string extensions = gfx::GLSurface::GetExtensions();
- extensions += extensions.empty() ? "" : " ";
- extensions += "GL_CHROMIUM_front_buffer_cached ";
- extensions += "GL_CHROMIUM_post_sub_buffer";
- return extensions;
-}
-
-gfx::Size TransportDIBImageTransportSurface::GetSize() {
- return size_;
-}
-
-void TransportDIBImageTransportSurface::OnBuffersSwappedACK() {
- helper_->SetScheduled(true);
-}
-
-void TransportDIBImageTransportSurface::OnPostSubBufferACK() {
- helper_->SetScheduled(true);
-}
-
-void TransportDIBImageTransportSurface::OnNewSurfaceACK(
- uint64 surface_handle,
- TransportDIB::Handle shm_handle) {
- helper_->SetScheduled(true);
-
- shared_mem_.reset(TransportDIB::Map(shm_handle));
- DCHECK_NE(shared_mem_.get(), static_cast<void*>(NULL));
-}
-
-void TransportDIBImageTransportSurface::OnResizeViewACK() {
- NOTREACHED();
-}
-
-void TransportDIBImageTransportSurface::OnResize(gfx::Size size) {
- size_ = size;
-
- if (!render_buffer_id_)
- glGenRenderbuffersEXT(1, &render_buffer_id_);
-
- GLint previous_fbo_id = 0;
- glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &previous_fbo_id);
-
- GLint previous_renderbuffer_id = 0;
- glGetIntegerv(GL_RENDERBUFFER_BINDING_EXT, &previous_renderbuffer_id);
-
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo_id_);
- glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, render_buffer_id_);
-
- glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT,
- GL_RGBA,
- size_.width(), size_.height());
- glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_RENDERBUFFER_EXT,
- render_buffer_id_);
-
- glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, previous_renderbuffer_id);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id);
-
- GpuHostMsg_AcceleratedSurfaceNew_Params params;
- params.width = size_.width();
- params.height = size_.height();
- params.surface_handle = next_handle_++;
- params.create_transport_dib = true;
- helper_->SendAcceleratedSurfaceNew(params);
-
- helper_->SetScheduled(false);
}
} // namespace
@@ -572,8 +310,8 @@ scoped_refptr<gfx::GLSurface> ImageTransportSurface::CreateSurface(
case gfx::kGLImplementationDesktopGL:
case gfx::kGLImplementationAppleGL:
if (!io_surface_support) {
- surface = new TransportDIBImageTransportSurface(
- manager, stub, surface_handle.handle);
+ DLOG(WARNING) << "No IOSurface support";
+ return NULL;
} else {
surface = new IOSurfaceImageTransportSurface(
manager, stub, surface_handle.handle);

Powered by Google App Engine
This is Rietveld 408576698