diff --git a/dom/ipc/TabChild.cpp b/dom/ipc/TabChild.cpp index 263270a069b3..b3492d1a0bd5 100644 --- a/dom/ipc/TabChild.cpp +++ b/dom/ipc/TabChild.cpp @@ -2833,8 +2833,32 @@ TabChild::InitRenderingState(const TextureFactoryIdentifier& aTextureFactoryIden MOZ_ASSERT(!mPuppetWidget->HasLayerManager()); bool success = false; - if (mLayersConnected) { - success = CreateRemoteLayerManager(compositorChild); + if (mLayersConnected && gfxVars::UseWebRender()) { + success = mPuppetWidget->CreateRemoteLayerManager([&] (LayerManager* aLayerManager) -> bool { + MOZ_ASSERT(aLayerManager->AsWebRenderLayerManager()); + return aLayerManager->AsWebRenderLayerManager()->Initialize(compositorChild, + wr::AsPipelineId(mLayersId), + &mTextureFactoryIdentifier); + }); + } else if (mLayersConnected) { + nsTArray ignored; + PLayerTransactionChild* shadowManager = compositorChild->SendPLayerTransactionConstructor(ignored, LayersId()); + if (shadowManager && + shadowManager->SendGetTextureFactoryIdentifier(&mTextureFactoryIdentifier) && + mTextureFactoryIdentifier.mParentBackend != LayersBackend::LAYERS_NONE) + { + success = true; + } + if (!success) { + NS_WARNING("failed to allocate layer transaction"); + } else { + success = mPuppetWidget->CreateRemoteLayerManager([&] (LayerManager* aLayerManager) -> bool { + ShadowLayerForwarder* lf = aLayerManager->AsShadowForwarder(); + lf->SetShadowManager(shadowManager); + lf->IdentifyTextureHost(mTextureFactoryIdentifier); + return true; + }); + } } if (success) { @@ -2858,42 +2882,6 @@ TabChild::InitRenderingState(const TextureFactoryIdentifier& aTextureFactoryIden } } -bool -TabChild::CreateRemoteLayerManager(mozilla::layers::PCompositorBridgeChild* aCompositorChild) -{ - MOZ_ASSERT(aCompositorChild); - - bool success = false; - if (gfxVars::UseWebRender()) { - success = mPuppetWidget->CreateRemoteLayerManager([&] (LayerManager* aLayerManager) -> bool { - MOZ_ASSERT(aLayerManager->AsWebRenderLayerManager()); - return aLayerManager->AsWebRenderLayerManager()->Initialize(aCompositorChild, - wr::AsPipelineId(mLayersId), - &mTextureFactoryIdentifier); - }); - } else { - nsTArray ignored; - PLayerTransactionChild* shadowManager = aCompositorChild->SendPLayerTransactionConstructor(ignored, LayersId()); - if (shadowManager && - shadowManager->SendGetTextureFactoryIdentifier(&mTextureFactoryIdentifier) && - mTextureFactoryIdentifier.mParentBackend != LayersBackend::LAYERS_NONE) - { - success = true; - } - if (!success) { - NS_WARNING("failed to allocate layer transaction"); - } else { - success = mPuppetWidget->CreateRemoteLayerManager([&] (LayerManager* aLayerManager) -> bool { - ShadowLayerForwarder* lf = aLayerManager->AsShadowForwarder(); - lf->SetShadowManager(shadowManager); - lf->IdentifyTextureHost(mTextureFactoryIdentifier); - return true; - }); - } - } - return success; -} - void TabChild::InitAPZState() { @@ -3191,9 +3179,33 @@ TabChild::ReinitRendering() bool success = false; RefPtr cb = CompositorBridgeChild::Get(); + if (gfxVars::UseWebRender()) { + success = mPuppetWidget->CreateRemoteLayerManager([&] (LayerManager* aLayerManager) -> bool { + MOZ_ASSERT(aLayerManager->AsWebRenderLayerManager()); + return aLayerManager->AsWebRenderLayerManager()->Initialize(cb, + wr::AsPipelineId(mLayersId), + &mTextureFactoryIdentifier); + }); + } else { + nsTArray ignored; + PLayerTransactionChild* shadowManager = cb->SendPLayerTransactionConstructor(ignored, LayersId()); + if (shadowManager && + shadowManager->SendGetTextureFactoryIdentifier(&mTextureFactoryIdentifier) && + mTextureFactoryIdentifier.mParentBackend != LayersBackend::LAYERS_NONE) + { + success = true; + } + if (!success) { + NS_WARNING("failed to re-allocate layer transaction"); + return; + } - if (cb) { - success = CreateRemoteLayerManager(cb); + success = mPuppetWidget->CreateRemoteLayerManager([&] (LayerManager* aLayerManager) -> bool { + ShadowLayerForwarder* lf = aLayerManager->AsShadowForwarder(); + lf->SetShadowManager(shadowManager); + lf->IdentifyTextureHost(mTextureFactoryIdentifier); + return true; + }); } if (!success) { diff --git a/dom/ipc/TabChild.h b/dom/ipc/TabChild.h index 16f3fc0a0136..be8f8894d5b8 100644 --- a/dom/ipc/TabChild.h +++ b/dom/ipc/TabChild.h @@ -63,7 +63,6 @@ class APZEventState; class AsyncDragMetrics; class IAPZCTreeManager; class ImageCompositeNotification; -class PCompositorBridgeChild; } // namespace layers namespace widget { @@ -885,8 +884,6 @@ private: void InternalSetDocShellIsActive(bool aIsActive, bool aPreserveLayers); - bool CreateRemoteLayerManager(mozilla::layers::PCompositorBridgeChild* aCompositorChild); - class DelayedDeleteRunnable; TextureFactoryIdentifier mTextureFactoryIdentifier;