| Index: cc/resource_update_controller.cc
|
| diff --git a/cc/resource_update_controller.cc b/cc/resource_update_controller.cc
|
| index d60b5bbed1ef361dd03c64fa06e53eb7be0f5a61..aaea39e789983f8184ab0823af46b0b17216e711 100644
|
| --- a/cc/resource_update_controller.cc
|
| +++ b/cc/resource_update_controller.cc
|
| @@ -7,18 +7,17 @@
|
| #include <limits>
|
|
|
| #include "base/debug/trace_event.h"
|
| +#include "cc/ganesh_resource_provider.h"
|
| #include "cc/prioritized_resource.h"
|
| #include "cc/resource_provider.h"
|
| #include "cc/texture_copier.h"
|
| #include "cc/thread.h"
|
| #include "skia/ext/refptr.h"
|
| #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3D.h"
|
| -#include "third_party/WebKit/Source/Platform/chromium/public/WebSharedGraphicsContext3D.h"
|
| #include "third_party/khronos/GLES2/gl2.h"
|
| #include "third_party/skia/include/gpu/SkGpuDevice.h"
|
|
|
| using WebKit::WebGraphicsContext3D;
|
| -using WebKit::WebSharedGraphicsContext3D;
|
|
|
| namespace {
|
|
|
| @@ -67,9 +66,8 @@ size_t ResourceUpdateController::maxFullUpdatesPerTick(
|
| return texturesPerTick ? texturesPerTick : 1;
|
| }
|
|
|
| -ResourceUpdateController::ResourceUpdateController(ResourceUpdateControllerClient* client, Thread* thread, scoped_ptr<ResourceUpdateQueue> queue, ResourceProvider* resourceProvider, bool hasImplThread)
|
| +ResourceUpdateController::ResourceUpdateController(ResourceUpdateControllerClient* client, Thread* thread, scoped_ptr<ResourceUpdateQueue> queue, ResourceProvider* resourceProvider)
|
| : m_client(client)
|
| - , m_hasImplThread(hasImplThread)
|
| , m_queue(queue.Pass())
|
| , m_resourceProvider(resourceProvider)
|
| , m_textureUpdatesPerTick(maxFullUpdatesPerTick(resourceProvider))
|
| @@ -130,27 +128,25 @@ void ResourceUpdateController::updateTexture(ResourceUpdate update)
|
| DCHECK(m_resourceProvider->resourceType(texture->resourceId()) ==
|
| ResourceProvider::GLTexture);
|
|
|
| - WebGraphicsContext3D* paintContext = m_hasImplThread ?
|
| - WebSharedGraphicsContext3D::compositorThreadContext() :
|
| - WebSharedGraphicsContext3D::mainThreadContext();
|
| - GrContext* paintGrContext = m_hasImplThread ?
|
| - WebSharedGraphicsContext3D::compositorThreadGrContext() :
|
| - WebSharedGraphicsContext3D::mainThreadGrContext();
|
| + if (!m_resourceProvider->ganeshResourceProvider()->has_contexts())
|
| + return;
|
| +
|
| + ResourceProvider::ScopedWriteLockGL lock(
|
| + m_resourceProvider, texture->resourceId());
|
|
|
| // Flush the context in which the backing texture is created so that it
|
| // is available in other shared contexts. It is important to do here
|
| // because the backing texture is created in one context while it is
|
| // being written to in another.
|
| - ResourceProvider::ScopedWriteLockGL lock(
|
| - m_resourceProvider, texture->resourceId());
|
| - m_resourceProvider->flush();
|
| + GaneshResourceProvider::ScopedContextsFlushed offscreenContexts(
|
| + m_resourceProvider, m_resourceProvider->ganeshResourceProvider());
|
|
|
| // Make sure ganesh uses the correct GL context.
|
| - paintContext->makeContextCurrent();
|
| + offscreenContexts.context3d()->makeContextCurrent();
|
|
|
| // Create an accelerated canvas to draw on.
|
| skia::RefPtr<SkCanvas> canvas = createAcceleratedCanvas(
|
| - paintGrContext, texture->size(), lock.textureId());
|
| + offscreenContexts.gr_context(), texture->size(), lock.textureId());
|
|
|
| // The compositor expects the textures to be upside-down so it can flip
|
| // the final composited image. Ganesh renders the image upright so we
|
| @@ -168,14 +164,6 @@ void ResourceUpdateController::updateTexture(ResourceUpdate update)
|
| pictureRect.x() - sourceRect.x() + destOffset.x(),
|
| pictureRect.y() - sourceRect.y() + destOffset.y());
|
| canvas->drawPicture(*update.picture);
|
| -
|
| - // Flush ganesh context so that all the rendered stuff appears on the
|
| - // texture.
|
| - paintGrContext->flush();
|
| -
|
| - // Flush the GL context so rendering results from this context are
|
| - // visible in the compositor's context.
|
| - paintContext->flush();
|
| }
|
|
|
| if (update.bitmap) {
|
|
|