void WebRenderBridgeParent::UpdateAPZ() { CompositorBridgeParent* cbp = GetRootCompositorBridgeParent(); if (!cbp) { return; } uint64_t rootLayersId = cbp->RootLayerTreeId(); RefPtr<WebRenderBridgeParent> rootWrbp = cbp->GetWebRenderBridgeParent(); if (!rootWrbp) { return; } if (RefPtr<APZCTreeManager> apzc = cbp->GetAPZCTreeManager()) { apzc->UpdateFocusState(rootLayersId, GetLayersId(), mScrollData.GetFocusTarget()); apzc->UpdateHitTestingTree(rootLayersId, rootWrbp->GetScrollData(), mScrollData.IsFirstPaint(), GetLayersId(), mScrollData.GetPaintSequenceNumber()); } }
PWebRenderBridgeParent* CrossProcessCompositorBridgeParent::AllocPWebRenderBridgeParent(const wr::PipelineId& aPipelineId, const LayoutDeviceIntSize& aSize, 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(layersId, OtherPid())) { NS_ERROR("Unexpected layers id in AllocPAPZCTreeManagerParent; dropping message..."); return nullptr; } MonitorAutoLock lock(*sIndirectLayerTreesLock); 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[layersId].mCrossProcessParent = this; sIndirectLayerTrees[layersId].mWrBridge = parent; *aTextureFactoryIdentifier = parent->GetTextureFactoryIdentifier(); *aIdNamespace = parent->GetIdNameSpace(); return parent; }