| Index: content/common/gpu/image_transport_surface_android.cc
|
| diff --git a/content/common/gpu/image_transport_surface_android.cc b/content/common/gpu/image_transport_surface_android.cc
|
| index 5ba2d17c2a89b18e0b7a9e30fb03cd65a0f0b483..0c64fa11414f8580ab32e5ef689e149b9d7d4d3f 100644
|
| --- a/content/common/gpu/image_transport_surface_android.cc
|
| +++ b/content/common/gpu/image_transport_surface_android.cc
|
| @@ -4,18 +4,106 @@
|
|
|
| #include "content/common/gpu/image_transport_surface.h"
|
|
|
| +#include "base/command_line.h"
|
| #include "base/logging.h"
|
| +#include "content/common/gpu/gpu_channel.h"
|
| +#include "content/common/gpu/gpu_channel_manager.h"
|
| #include "content/common/gpu/gpu_command_buffer_stub.h"
|
| #include "content/common/gpu/gpu_surface_lookup.h"
|
| +#include "content/common/gpu/image_transport_surface.h"
|
| +#include "content/public/common/content_switches.h"
|
| #include "ui/gl/gl_surface_egl.h"
|
|
|
| namespace content {
|
|
|
| +namespace {
|
| +
|
| +class ImageTransportSurfaceAndroid : public PassThroughImageTransportSurface {
|
| + public:
|
| + ImageTransportSurfaceAndroid(GpuChannelManager* manager,
|
| + GpuCommandBufferStub* stub,
|
| + gfx::GLSurface* surface,
|
| + uint32 parent_client_id);
|
| +
|
| + // gfx::GLSurface implementation.
|
| + virtual bool Initialize() OVERRIDE;
|
| + virtual bool SwapBuffers() OVERRIDE;
|
| + virtual std::string GetExtensions() OVERRIDE;
|
| + virtual void SetFrontbufferAllocation(bool allocated) OVERRIDE;
|
| +
|
| + protected:
|
| + virtual ~ImageTransportSurfaceAndroid();
|
| +
|
| + private:
|
| + uint32 parent_client_id_;
|
| + bool frontbuffer_suggested_allocation_;
|
| +};
|
| +
|
| +ImageTransportSurfaceAndroid::ImageTransportSurfaceAndroid(
|
| + GpuChannelManager* manager,
|
| + GpuCommandBufferStub* stub,
|
| + gfx::GLSurface* surface,
|
| + uint32 parent_client_id)
|
| + : PassThroughImageTransportSurface(manager, stub, surface, true),
|
| + parent_client_id_(parent_client_id),
|
| + frontbuffer_suggested_allocation_(true) {}
|
| +
|
| +ImageTransportSurfaceAndroid::~ImageTransportSurfaceAndroid() {}
|
| +
|
| +bool ImageTransportSurfaceAndroid::Initialize() {
|
| + if (!surface())
|
| + return false;
|
| +
|
| + if (!PassThroughImageTransportSurface::Initialize())
|
| + return false;
|
| +
|
| + GpuChannel* parent_channel =
|
| + GetHelper()->manager()->LookupChannel(parent_client_id_);
|
| + if (parent_channel) {
|
| + const CommandLine* command_line = CommandLine::ForCurrentProcess();
|
| + if (command_line->HasSwitch(switches::kUIPrioritizeInGpuProcess))
|
| + GetHelper()->SetPreemptByFlag(parent_channel->GetPreemptionFlag());
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| +std::string ImageTransportSurfaceAndroid::GetExtensions() {
|
| + std::string extensions = gfx::GLSurface::GetExtensions();
|
| + extensions += extensions.empty() ? "" : " ";
|
| + extensions += "GL_CHROMIUM_front_buffer_cached ";
|
| + return extensions;
|
| +}
|
| +
|
| +void ImageTransportSurfaceAndroid::SetFrontbufferAllocation(bool allocation) {
|
| + if (frontbuffer_suggested_allocation_ == allocation)
|
| + return;
|
| + frontbuffer_suggested_allocation_ = allocation;
|
| + // TODO(sievers): This races with CompositorFrame messages.
|
| + if (!allocation)
|
| + GetHelper()->SendAcceleratedSurfaceRelease();
|
| +}
|
| +
|
| +bool ImageTransportSurfaceAndroid::SwapBuffers() {
|
| + NOTREACHED();
|
| + return false;
|
| +}
|
| +
|
| +} // anonymous namespace
|
| +
|
| // static
|
| scoped_refptr<gfx::GLSurface> ImageTransportSurface::CreateNativeSurface(
|
| GpuChannelManager* manager,
|
| GpuCommandBufferStub* stub,
|
| const gfx::GLSurfaceHandle& handle) {
|
| + if (handle.transport_type == gfx::NATIVE_TRANSPORT) {
|
| + return scoped_refptr<gfx::GLSurface>(
|
| + new ImageTransportSurfaceAndroid(manager,
|
| + stub,
|
| + manager->GetDefaultOffscreenSurface(),
|
| + handle.parent_client_id));
|
| + }
|
| +
|
| DCHECK(GpuSurfaceLookup::GetInstance());
|
| DCHECK_EQ(handle.transport_type, gfx::NATIVE_DIRECT);
|
| ANativeWindow* window =
|
|
|