Bug 1357541 - Use the full 64 bit value of the PipelineId when converting to a layers ID. r?nical
MozReview-Commit-ID: 98OOkEML6RF
--- a/gfx/layers/ipc/CompositorBridgeParent.cpp
+++ b/gfx/layers/ipc/CompositorBridgeParent.cpp
@@ -1596,17 +1596,17 @@ CompositorBridgeParent::AllocPWebRenderB
TextureFactoryIdentifier* aTextureFactoryIdentifier,
uint32_t* aIdNamespace)
{
#ifndef MOZ_BUILD_WEBRENDER
// Extra guard since this in the parent process and we don't want a malicious
// child process invoking this codepath before it's ready
MOZ_RELEASE_ASSERT(false);
#endif
- MOZ_ASSERT(aPipelineId.mHandle == mRootLayerTreeID);
+ MOZ_ASSERT(wr::AsUint64(aPipelineId) == mRootLayerTreeID);
MOZ_ASSERT(!mWrBridge);
MOZ_ASSERT(!mCompositor);
MOZ_ASSERT(!mCompositorScheduler);
MOZ_ASSERT(mWidget);
RefPtr<widget::CompositorWidget> widget = mWidget;
RefPtr<wr::WebRenderAPI> api = wr::WebRenderAPI::Create(
@@ -1616,19 +1616,18 @@ CompositorBridgeParent::AllocPWebRenderB
api->SetRootPipeline(aPipelineId);
mWrBridge = new WebRenderBridgeParent(this, aPipelineId, mWidget, nullptr, Move(api), Move(holder));
*aIdNamespace = mWrBridge->GetIdNameSpace();
mCompositorScheduler = mWrBridge->CompositorScheduler();
MOZ_ASSERT(mCompositorScheduler);
mWrBridge.get()->AddRef(); // IPDL reference
MonitorAutoLock lock(*sIndirectLayerTreesLock);
- auto pipelineHandle = aPipelineId.mHandle;
- MOZ_ASSERT(sIndirectLayerTrees[pipelineHandle].mWrBridge == nullptr);
- sIndirectLayerTrees[pipelineHandle].mWrBridge = mWrBridge;
+ MOZ_ASSERT(sIndirectLayerTrees[mRootLayerTreeID].mWrBridge == nullptr);
+ sIndirectLayerTrees[mRootLayerTreeID].mWrBridge = mWrBridge;
*aTextureFactoryIdentifier = mWrBridge->GetTextureFactoryIdentifier();
return mWrBridge;
}
bool
CompositorBridgeParent::DeallocPWebRenderBridgeParent(PWebRenderBridgeParent* aActor)
{
#ifndef MOZ_BUILD_WEBRENDER
--- a/gfx/layers/ipc/CrossProcessCompositorBridgeParent.cpp
+++ b/gfx/layers/ipc/CrossProcessCompositorBridgeParent.cpp
@@ -184,53 +184,53 @@ CrossProcessCompositorBridgeParent::Allo
TextureFactoryIdentifier* aTextureFactoryIdentifier,
uint32_t *aIdNamespace)
{
#ifndef MOZ_BUILD_WEBRENDER
// Extra guard since this in the parent process and we don't want a malicious
// child process invoking this codepath before it's ready
MOZ_RELEASE_ASSERT(false);
#endif
+ uint64_t layersId = wr::AsUint64(aPipelineId);
// Check to see if this child process has access to this layer tree.
- if (!LayerTreeOwnerTracker::Get()->IsMapped(aPipelineId.mHandle, OtherPid())) {
+ if (!LayerTreeOwnerTracker::Get()->IsMapped(layersId, OtherPid())) {
NS_ERROR("Unexpected layers id in AllocPAPZCTreeManagerParent; dropping message...");
return nullptr;
}
- auto pipelineHandle = aPipelineId.mHandle;
MonitorAutoLock lock(*sIndirectLayerTreesLock);
- MOZ_ASSERT(sIndirectLayerTrees.find(pipelineHandle) != sIndirectLayerTrees.end());
- MOZ_ASSERT(sIndirectLayerTrees[pipelineHandle].mWrBridge == nullptr);
- CompositorBridgeParent* cbp = sIndirectLayerTrees[pipelineHandle].mParent;
+ MOZ_ASSERT(sIndirectLayerTrees.find(layersId) != sIndirectLayerTrees.end());
+ MOZ_ASSERT(sIndirectLayerTrees[layersId].mWrBridge == nullptr);
+ CompositorBridgeParent* cbp = sIndirectLayerTrees[layersId].mParent;
WebRenderBridgeParent* root = sIndirectLayerTrees[cbp->RootLayerTreeId()].mWrBridge.get();
WebRenderBridgeParent* parent = nullptr;
RefPtr<wr::WebRenderAPI> api = root->GetWebRenderAPI();
RefPtr<WebRenderCompositableHolder> holder = root->CompositableHolder();
parent = new WebRenderBridgeParent(this, aPipelineId, nullptr, root->CompositorScheduler(), Move(api), Move(holder));
parent->AddRef(); // IPDL reference
- sIndirectLayerTrees[pipelineHandle].mCrossProcessParent = this;
- sIndirectLayerTrees[pipelineHandle].mWrBridge = parent;
+ sIndirectLayerTrees[layersId].mCrossProcessParent = this;
+ sIndirectLayerTrees[layersId].mWrBridge = parent;
*aTextureFactoryIdentifier = parent->GetTextureFactoryIdentifier();
*aIdNamespace = parent->GetIdNameSpace();
return parent;
}
bool
CrossProcessCompositorBridgeParent::DeallocPWebRenderBridgeParent(PWebRenderBridgeParent* aActor)
{
#ifndef MOZ_BUILD_WEBRENDER
// Extra guard since this in the parent process and we don't want a malicious
// child process invoking this codepath before it's ready
MOZ_RELEASE_ASSERT(false);
#endif
WebRenderBridgeParent* parent = static_cast<WebRenderBridgeParent*>(aActor);
- EraseLayerState(parent->PipelineId().mHandle);
+ EraseLayerState(wr::AsUint64(parent->PipelineId()));
parent->Release(); // IPDL reference
return true;
}
mozilla::ipc::IPCResult
CrossProcessCompositorBridgeParent::RecvNotifyChildCreated(const uint64_t& child,
CompositorOptions* aOptions)
{
--- a/gfx/layers/wr/WebRenderBridgeParent.cpp
+++ b/gfx/layers/wr/WebRenderBridgeParent.cpp
@@ -415,29 +415,29 @@ WebRenderBridgeParent::ProcessWebRenderC
NS_ERROR("ReceiveCompositableUpdate failed");
}
break;
}
case WebRenderParentCommand::TOpAddCompositorAnimations: {
const OpAddCompositorAnimations& op = cmd.get_OpAddCompositorAnimations();
CompositorAnimations data(Move(op.data()));
if (data.animations().Length()) {
- uint64_t id = mWidget ? 0 : mPipelineId.mHandle;
+ uint64_t id = mWidget ? 0 : wr::AsUint64(mPipelineId);
CompositorAnimationStorage* storage =
mCompositorBridge->GetAnimationStorage(id);
if (storage) {
storage->SetAnimations(data.id(), data.animations());
}
}
break;
}
case WebRenderParentCommand::TOpRemoveCompositorAnimations: {
const OpRemoveCompositorAnimations& op = cmd.get_OpRemoveCompositorAnimations();
if (op.id()) {
- uint64_t id = mWidget ? 0 : mPipelineId.mHandle;
+ uint64_t id = mWidget ? 0 : wr::AsUint64(mPipelineId);
CompositorAnimationStorage* storage =
mCompositorBridge->GetAnimationStorage(id);
if (storage) {
storage->ClearById(op.id());
}
}
break;
}
@@ -605,17 +605,17 @@ WebRenderBridgeParent::ActorDestroy(Acto
{
Destroy();
}
void
WebRenderBridgeParent::SampleAnimations(nsTArray<WrOpacityProperty>& aOpacityArray,
nsTArray<WrTransformProperty>& aTransformArray)
{
- uint64_t id = mWidget ? 0 : mPipelineId.mHandle;
+ uint64_t id = mWidget ? 0 : wr::AsUint64(mPipelineId);
CompositorAnimationStorage* storage =
mCompositorBridge->GetAnimationStorage(id);
AnimationHelper::SampleAnimations(storage,
mCompositorScheduler->
GetLastComposeTime());
// return the animated data if has