Bug 1385003 - Drop the hacky gecko IdNamespace allocator and use the IdNamespace from WR to avoid mismatches. r?sotaro
MozReview-Commit-ID: 410h1ZkWBGL
--- a/gfx/layers/ipc/CompositorBridgeParent.cpp
+++ b/gfx/layers/ipc/CompositorBridgeParent.cpp
@@ -1690,25 +1690,25 @@ CompositorBridgeParent::AllocPWebRenderB
MOZ_ASSERT(!mCompositor);
MOZ_ASSERT(!mCompositorScheduler);
MOZ_ASSERT(mWidget);
RefPtr<widget::CompositorWidget> widget = mWidget;
RefPtr<wr::WebRenderAPI> api = wr::WebRenderAPI::Create(
gfxPrefs::WebRenderProfilerEnabled(), this, Move(widget), aSize);
- RefPtr<AsyncImagePipelineManager> asyncMgr =
- new AsyncImagePipelineManager(WebRenderBridgeParent::AllocIdNameSpace());
if (!api) {
mWrBridge = WebRenderBridgeParent::CreateDestroyed();
mWrBridge.get()->AddRef(); // IPDL reference
*aIdNamespace = mWrBridge->GetIdNamespace();
*aTextureFactoryIdentifier = TextureFactoryIdentifier(LayersBackend::LAYERS_NONE);
return mWrBridge;
}
+ RefPtr<AsyncImagePipelineManager> asyncMgr =
+ new AsyncImagePipelineManager(api->GetNamespace());
api->SetRootPipeline(aPipelineId);
RefPtr<CompositorAnimationStorage> animStorage = GetAnimationStorage();
mWrBridge = new WebRenderBridgeParent(this, aPipelineId, mWidget, nullptr, Move(api), Move(asyncMgr), Move(animStorage));
mWrBridge.get()->AddRef(); // IPDL reference
*aIdNamespace = mWrBridge->GetIdNamespace();
mCompositorScheduler = mWrBridge->CompositorScheduler();
MOZ_ASSERT(mCompositorScheduler);
--- a/gfx/layers/wr/WebRenderBridgeParent.cpp
+++ b/gfx/layers/wr/WebRenderBridgeParent.cpp
@@ -107,18 +107,16 @@ public:
}
}
}
private:
WebRenderBridgeParent* mWebRenderBridgeParent;
InfallibleTArray<OpDestroy>* mActorsToDestroy;
};
-/* static */ uint32_t WebRenderBridgeParent::sIdNameSpace = 0;
-
WebRenderBridgeParent::WebRenderBridgeParent(CompositorBridgeParentBase* aCompositorBridge,
const wr::PipelineId& aPipelineId,
widget::CompositorWidget* aWidget,
CompositorVsyncScheduler* aScheduler,
RefPtr<wr::WebRenderAPI>&& aApi,
RefPtr<AsyncImagePipelineManager>&& aImageMgr,
RefPtr<CompositorAnimationStorage>&& aAnimStorage)
: mCompositorBridge(aCompositorBridge)
@@ -126,17 +124,17 @@ WebRenderBridgeParent::WebRenderBridgePa
, mWidget(aWidget)
, mApi(aApi)
, mAsyncImageManager(aImageMgr)
, mCompositorScheduler(aScheduler)
, mAnimStorage(aAnimStorage)
, mChildLayerObserverEpoch(0)
, mParentLayerObserverEpoch(0)
, mWrEpoch(0)
- , mIdNamespace(AllocIdNameSpace())
+ , mIdNamespace(aApi->GetNamespace())
, mPaused(false)
, mDestroyed(false)
, mForceRendering(false)
{
MOZ_ASSERT(mAsyncImageManager);
MOZ_ASSERT(mAnimStorage);
mAsyncImageManager->AddPipeline(mPipelineId);
if (mWidget) {
@@ -145,17 +143,17 @@ WebRenderBridgeParent::WebRenderBridgePa
}
}
WebRenderBridgeParent::WebRenderBridgeParent()
: mCompositorBridge(nullptr)
, mChildLayerObserverEpoch(0)
, mParentLayerObserverEpoch(0)
, mWrEpoch(0)
- , mIdNamespace(AllocIdNameSpace())
+ , mIdNamespace{0}
, mPaused(false)
, mDestroyed(true)
, mForceRendering(false)
{
}
/* static */ WebRenderBridgeParent*
WebRenderBridgeParent::CreateDestroyed()
@@ -881,17 +879,17 @@ WebRenderBridgeParent::UpdateWebRender(C
MOZ_ASSERT(aAnimStorage);
if (mDestroyed) {
return;
}
// Update id name space to identify obsoleted keys.
// Since usage of invalid keys could cause crash in webrender.
- mIdNamespace = AllocIdNameSpace();
+ mIdNamespace = aApi->GetNamespace();
// XXX Remove it when webrender supports sharing/moving Keys between different webrender instances.
// XXX It requests client to update/reallocate webrender related resources,
// but parent side does not wait end of the update.
// The code could become simpler if we could serialise old keys deallocation and new keys allocation.
// But we do not do it, it is because client side deallocate old layers/webrender keys
// after new layers/webrender keys allocation.
// Without client side's layout refactoring, we could not finish all old layers/webrender keys removals
// before new layer/webrender keys allocation. In future, we could address the problem.
--- a/gfx/layers/wr/WebRenderBridgeParent.h
+++ b/gfx/layers/wr/WebRenderBridgeParent.h
@@ -182,20 +182,16 @@ public:
wr::IdNamespace GetIdNamespace()
{
return mIdNamespace;
}
void UpdateAPZ();
const WebRenderScrollData& GetScrollData() const;
- static wr::IdNamespace AllocIdNameSpace() {
- return wr::IdNamespace { ++sIdNameSpace };
- }
-
void FlushRendering(bool aIsSync);
void ScheduleComposition();
void UpdateWebRender(CompositorVsyncScheduler* aScheduler,
wr::WebRenderAPI* aApi,
AsyncImagePipelineManager* aImageMgr,
CompositorAnimationStorage* aAnimStorage);
@@ -291,16 +287,14 @@ private:
wr::IdNamespace mIdNamespace;
bool mPaused;
bool mDestroyed;
bool mForceRendering;
// Can only be accessed on the compositor thread.
WebRenderScrollData mScrollData;
-
- static uint32_t sIdNameSpace;
};
} // namespace layers
} // namespace mozilla
#endif // mozilla_layers_WebRenderBridgeParent_h