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

Unified Diff: ui/compositor/compositor.cc

Issue 12212007: cc: Route offscreen context creation for compositor to the browser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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: ui/compositor/compositor.cc
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index 9e7c4d54496ee96db23b3253c0519a9e2c6d90a8..bfb0cdd2e89c5f732082ee5338a13ae3bed8f49e 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -19,7 +19,10 @@
#include "cc/layer_tree_host.h"
#include "cc/output_surface.h"
#include "cc/thread_impl.h"
+#include "skia/ext/refptr.h"
#include "third_party/skia/include/core/SkBitmap.h"
+#include "third_party/skia/include/gpu/GrContext.h"
+#include "third_party/skia/include/gpu/gl/GrGLInterface.h"
#include "ui/compositor/compositor_observer.h"
#include "ui/compositor/compositor_switches.h"
#include "ui/compositor/dip_util.h"
@@ -163,6 +166,55 @@ WebKit::WebGraphicsContext3D* DefaultContextFactory::CreateOffscreenContext() {
return CreateContextCommon(NULL, true);
}
+WebKit::WebGraphicsContext3D* DefaultContextFactory::
+ CreateOrGetOffscreenSkiaContextForMainThread() {
+ CreateOrGetOffscreenContextCommon(
+ &offscreen_skia_context_main_thread_,
+ &offscreen_skia_gr_context_main_thread_);
+ return offscreen_skia_context_main_thread_.get();
+}
+
+WebKit::WebGraphicsContext3D* DefaultContextFactory::
+ CreateOrGetOffscreenSkiaContextForCompositorThread() {
+ CreateOrGetOffscreenContextCommon(
+ &offscreen_skia_context_compositor_thread_,
+ &offscreen_skia_gr_context_compositor_thread_);
+ return offscreen_skia_context_compositor_thread_.get();
+}
+
+GrContext* DefaultContextFactory::
+ CreateOrGetOffscreenSkiaGrContextForMainThread() {
+ CreateOrGetOffscreenSkiaContextForMainThread();
+ if (!offscreen_skia_context_main_thread_)
+ return NULL;
+
+ if (!offscreen_skia_gr_context_main_thread_) {
+ skia::RefPtr<GrGLInterface> interface = skia::AdoptRef(
+ offscreen_skia_context_main_thread_->createGrGLInterface());
+ offscreen_skia_gr_context_main_thread_ = skia::AdoptRef(GrContext::Create(
+ kOpenGL_Shaders_GrEngine,
+ reinterpret_cast<GrPlatform3DContext>(interface.get())));
+ }
+ return offscreen_skia_gr_context_main_thread_.get();
+}
+
+GrContext* DefaultContextFactory::
+ CreateOrGetOffscreenSkiaGrContextForCompositorThread() {
+ CreateOrGetOffscreenSkiaContextForCompositorThread();
+ if (!offscreen_skia_context_compositor_thread_)
+ return NULL;
+
+ if (!offscreen_skia_gr_context_compositor_thread_) {
+ skia::RefPtr<GrGLInterface> interface = skia::AdoptRef(
+ offscreen_skia_context_compositor_thread_->createGrGLInterface());
+ offscreen_skia_gr_context_compositor_thread_ =
+ skia::AdoptRef(GrContext::Create(
+ kOpenGL_Shaders_GrEngine,
+ reinterpret_cast<GrPlatform3DContext>(interface.get())));
+ }
+ return offscreen_skia_gr_context_compositor_thread_.get();
+}
+
void DefaultContextFactory::RemoveCompositor(Compositor* compositor) {
}
@@ -195,6 +247,23 @@ WebKit::WebGraphicsContext3D* DefaultContextFactory::CreateContextCommon(
return context;
}
+void DefaultContextFactory::CreateOrGetOffscreenContextCommon(
+ scoped_ptr<WebKit::WebGraphicsContext3D>* context3d,
+ skia::RefPtr<GrContext>* gr_context) {
+ if ((*context3d)) {
+ if (!(*context3d)->makeContextCurrent() ||
+ (*context3d)->getGraphicsResetStatusARB()) {
+ if ((*gr_context))
+ (*gr_context)->contextDestroyed();
+ gr_context->clear();
+ context3d->reset();
+ }
+ }
+
+ if (!(*context3d))
+ (*context3d) = make_scoped_ptr(CreateOffscreenContext());
+}
+
Texture::Texture(bool flipped, const gfx::Size& size, float device_scale_factor)
: size_(size),
flipped_(flipped),
@@ -521,6 +590,28 @@ scoped_ptr<cc::OutputSurface> Compositor::createOutputSurface() {
void Compositor::didRecreateOutputSurface(bool success) {
}
+WebKit::WebGraphicsContext3D*
+ Compositor::createOrGetOffscreenContext3dForMainThread() {
+ return ContextFactory::GetInstance()->
+ CreateOrGetOffscreenSkiaContextForMainThread();
+}
+
+WebKit::WebGraphicsContext3D*
+ Compositor::createOrGetOffscreenContext3dForCompositorThread() {
+ return ContextFactory::GetInstance()->
+ CreateOrGetOffscreenSkiaContextForCompositorThread();
+}
+
+GrContext* Compositor::createOrGetOffscreenGrContextForMainThread() {
+ return ContextFactory::GetInstance()->
+ CreateOrGetOffscreenSkiaGrContextForMainThread();
+}
+
+GrContext* Compositor::createOrGetOffscreenGrContextForCompositorThread() {
+ return ContextFactory::GetInstance()->
+ CreateOrGetOffscreenSkiaGrContextForCompositorThread();
+}
+
scoped_ptr<cc::InputHandler> Compositor::createInputHandler() {
return scoped_ptr<cc::InputHandler>();
}

Powered by Google App Engine
This is Rietveld 408576698