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

Unified Diff: ui/gfx/compositor/compositor_cc.cc

Issue 8307001: Enable accelerated compositing of web pages when using webkit compositor (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: rebase Created 9 years, 2 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 | « ui/gfx/compositor/compositor_cc.h ('k') | ui/gfx/compositor/compositor_gl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/compositor/compositor_cc.cc
diff --git a/ui/gfx/compositor/compositor_cc.cc b/ui/gfx/compositor/compositor_cc.cc
index 1aaddab1d8f08deb661067cae3b8f0a9bf1c938b..d8b8e5a5f3701988d1669a26d4adf7b243c935b8 100644
--- a/ui/gfx/compositor/compositor_cc.cc
+++ b/ui/gfx/compositor/compositor_cc.cc
@@ -8,6 +8,9 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFloatPoint.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h"
#include "ui/gfx/compositor/layer.h"
+#include "ui/gfx/gl/gl_context.h"
+#include "ui/gfx/gl/gl_surface.h"
+#include "ui/gfx/gl/gl_implementation.h"
#include "webkit/glue/webthread_impl.h"
#include "webkit/gpu/webgraphicscontext3d_in_process_impl.h"
@@ -17,16 +20,91 @@ webkit_glue::WebThreadImpl* g_compositor_thread = NULL;
namespace ui {
-TextureCC::TextureCC() {
+SharedResourcesCC::SharedResourcesCC() : initialized_(false) {
+}
+
+
+SharedResourcesCC::~SharedResourcesCC() {
+}
+
+// static
+SharedResourcesCC* SharedResourcesCC::GetInstance() {
+ // We use LeakySingletonTraits so that we don't race with
+ // the tear down of the gl_bindings.
+ SharedResourcesCC* instance = Singleton<SharedResourcesCC,
+ LeakySingletonTraits<SharedResourcesCC> >::get();
+ if (instance->Initialize()) {
+ return instance;
+ } else {
+ instance->Destroy();
+ return NULL;
+ }
+}
+
+bool SharedResourcesCC::Initialize() {
+ if (initialized_)
+ return true;
+
+ {
+ // The following line of code exists soley to disable IO restrictions
+ // on this thread long enough to perform the GL bindings.
+ // TODO(wjmaclean) Remove this when GL initialisation cleaned up.
+ base::ThreadRestrictions::ScopedAllowIO allow_io;
+ if (!gfx::GLSurface::InitializeOneOff() ||
+ gfx::GetGLImplementation() == gfx::kGLImplementationNone) {
+ LOG(ERROR) << "Could not load the GL bindings";
+ return false;
+ }
+ }
+
+ surface_ = gfx::GLSurface::CreateOffscreenGLSurface(false, gfx::Size(1, 1));
+ if (!surface_.get()) {
+ LOG(ERROR) << "Unable to create offscreen GL surface.";
+ return false;
+ }
+
+ context_ = gfx::GLContext::CreateGLContext(
+ NULL, surface_.get(), gfx::PreferIntegratedGpu);
+ if (!context_.get()) {
+ LOG(ERROR) << "Unable to create GL context.";
+ return false;
+ }
+
+ initialized_ = true;
+ return true;
+}
+
+void SharedResourcesCC::Destroy() {
+ context_ = NULL;
+ surface_ = NULL;
+
+ initialized_ = false;
+}
+
+bool SharedResourcesCC::MakeSharedContextCurrent() {
+ DCHECK(initialized_);
+ return context_->MakeCurrent(surface_.get());
+}
+
+gfx::GLShareGroup* SharedResourcesCC::GetShareGroup() {
+ DCHECK(initialized_);
+ return context_->share_group();
+}
+
+TextureCC::TextureCC()
+ : texture_id_(0),
+ flipped_(false) {
}
void TextureCC::SetCanvas(const SkCanvas& canvas,
const gfx::Point& origin,
const gfx::Size& overall_size) {
+ NOTREACHED();
}
void TextureCC::Draw(const ui::TextureDrawParams& params,
const gfx::Rect& clip_bounds_in_texture) {
+ NOTREACHED();
}
CompositorCC::CompositorCC(CompositorDelegate* delegate,
@@ -57,7 +135,8 @@ void CompositorCC::TerminateThread() {
}
Texture* CompositorCC::CreateTexture() {
- return new TextureCC();
+ NOTREACHED();
+ return NULL;
}
void CompositorCC::Blur(const gfx::Rect& bounds) {
@@ -98,8 +177,10 @@ void CompositorCC::applyScrollDelta(const WebKit::WebSize&) {
}
WebKit::WebGraphicsContext3D* CompositorCC::createContext3D() {
+ gfx::GLShareGroup* share_group =
+ SharedResourcesCC::GetInstance()->GetShareGroup();
WebKit::WebGraphicsContext3D* context =
- new webkit::gpu::WebGraphicsContext3DInProcessImpl(widget_, NULL);
+ new webkit::gpu::WebGraphicsContext3DInProcessImpl(widget_, share_group);
WebKit::WebGraphicsContext3D::Attributes attrs;
context->initialize(attrs, 0, true);
return context;
« no previous file with comments | « ui/gfx/compositor/compositor_cc.h ('k') | ui/gfx/compositor/compositor_gl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698