Bug 1322500 - Introducing ShareableCanvasLayer. r=sotaro

MozReview-Commit-ID: 1zVJ3HVQV9W
This commit is contained in:
Morris Tseng
2016-12-28 10:16:43 +08:00
parent 0d41f4a81f
commit 08d68942a0
8 changed files with 335 additions and 268 deletions

View File

@@ -22,6 +22,7 @@
#include "mozilla/layers/TextureClientOGL.h"
#include "nsDebug.h" // for printf_stderr, NS_ASSERTION
#include "nsXULAppAPI.h" // for XRE_GetProcessType, etc
#include "ShareableCanvasLayer.h"
#include "TextureClientSharedSurface.h"
using namespace mozilla::gfx;
@@ -90,7 +91,7 @@ CanvasClient2D::UpdateFromTexture(TextureClient* aTexture)
}
void
CanvasClient2D::Update(gfx::IntSize aSize, ClientCanvasLayer* aLayer)
CanvasClient2D::Update(gfx::IntSize aSize, ShareableCanvasLayer* aLayer)
{
mBufferProviderTexture = nullptr;
@@ -164,7 +165,7 @@ already_AddRefed<TextureClient>
CanvasClient2D::CreateTextureClientForCanvas(gfx::SurfaceFormat aFormat,
gfx::IntSize aSize,
TextureFlags aFlags,
ClientCanvasLayer* aLayer)
ShareableCanvasLayer* aLayer)
{
if (aLayer->IsGLLayer()) {
// We want a cairo backend here as we don't want to be copying into
@@ -376,10 +377,10 @@ CloneSurface(gl::SharedSurface* src, gl::SurfaceFactory* factory)
}
void
CanvasClientSharedSurface::Update(gfx::IntSize aSize, ClientCanvasLayer* aLayer)
CanvasClientSharedSurface::Update(gfx::IntSize aSize, ShareableCanvasLayer* aLayer)
{
Renderer renderer;
renderer.construct<ClientCanvasLayer*>(aLayer);
renderer.construct<ShareableCanvasLayer*>(aLayer);
UpdateRenderer(aSize, renderer);
}
@@ -395,10 +396,10 @@ void
CanvasClientSharedSurface::UpdateRenderer(gfx::IntSize aSize, Renderer& aRenderer)
{
GLContext* gl = nullptr;
ClientCanvasLayer* layer = nullptr;
ShareableCanvasLayer* layer = nullptr;
AsyncCanvasRenderer* asyncRenderer = nullptr;
if (aRenderer.constructed<ClientCanvasLayer*>()) {
layer = aRenderer.ref<ClientCanvasLayer*>();
if (aRenderer.constructed<ShareableCanvasLayer*>()) {
layer = aRenderer.ref<ShareableCanvasLayer*>();
gl = layer->mGLContext;
} else {
asyncRenderer = aRenderer.ref<AsyncCanvasRenderer*>();
@@ -447,7 +448,7 @@ CanvasClientSharedSurface::UpdateRenderer(gfx::IntSize aSize, Renderer& aRendere
CompositableForwarder* shadowForwarder = nullptr;
if (layer) {
flags |= layer->Flags();
shadowForwarder = layer->ClientManager()->AsShadowForwarder();
shadowForwarder = layer->GetForwarder();
} else {
MOZ_ASSERT(asyncRenderer);
flags |= mTextureFlags;