Bug 1342754 - Make WebRenderBridgeChild::mIdNamespace unique r=jrmuizel

This commit is contained in:
sotaro
2017-02-27 12:16:11 +09:00
parent 68a497a1d6
commit 4d822b6679
8 changed files with 23 additions and 6 deletions

View File

@@ -1132,7 +1132,7 @@ CompositorBridgeChild::HandleFatalError(const char* aName, const char* aMsg) con
PWebRenderBridgeChild*
CompositorBridgeChild::AllocPWebRenderBridgeChild(const wr::PipelineId& aPipelineId, TextureFactoryIdentifier*, uint32_t *aIdNamespace)
{
WebRenderBridgeChild* child = new WebRenderBridgeChild(aPipelineId, *aIdNamespace);
WebRenderBridgeChild* child = new WebRenderBridgeChild(aPipelineId);
child->AddIPDLReference();
return child;
}

View File

@@ -1591,8 +1591,8 @@ CompositorBridgeParent::AllocPWebRenderBridgeParent(const wr::PipelineId& aPipel
RefPtr<WebRenderCompositableHolder> holder = new WebRenderCompositableHolder();
MOZ_ASSERT(api); // TODO have a fallback
api->SetRootPipeline(aPipelineId);
*aIdNamespace = api->GetNamespace().mHandle;
mWrBridge = new WebRenderBridgeParent(this, aPipelineId, mWidget, nullptr, Move(api), Move(holder));
*aIdNamespace = mWrBridge->GetIdNameSpace();
mCompositorScheduler = mWrBridge->CompositorScheduler();
MOZ_ASSERT(mCompositorScheduler);

View File

@@ -228,7 +228,8 @@ CrossProcessCompositorBridgeParent::AllocPWebRenderBridgeParent(const wr::Pipeli
sIndirectLayerTrees[pipelineHandle].mCrossProcessParent = this;
sIndirectLayerTrees[pipelineHandle].mWrBridge = parent;
*aTextureFactoryIdentifier = parent->GetTextureFactoryIdentifier();
*aIdNamespace = api->GetNamespace().mHandle;
*aIdNamespace = parent->GetIdNameSpace();
return parent;
}

View File

@@ -15,9 +15,9 @@
namespace mozilla {
namespace layers {
WebRenderBridgeChild::WebRenderBridgeChild(const wr::PipelineId& aPipelineId, uint32_t aIdNamespace)
WebRenderBridgeChild::WebRenderBridgeChild(const wr::PipelineId& aPipelineId)
: mIsInTransaction(false)
, mIdNamespace(aIdNamespace)
, mIdNamespace(0)
, mResourceId(0)
, mIPCOpen(false)
, mDestroyed(false)

View File

@@ -28,7 +28,7 @@ class WebRenderBridgeChild final : public PWebRenderBridgeChild
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(WebRenderBridgeChild, override)
public:
explicit WebRenderBridgeChild(const wr::PipelineId& aPipelineId, uint32_t aIdNamespace);
explicit WebRenderBridgeChild(const wr::PipelineId& aPipelineId);
void AddWebRenderCommand(const WebRenderCommand& aCmd);
void AddWebRenderCommands(const nsTArray<WebRenderCommand>& aCommands);
@@ -56,6 +56,10 @@ public:
uint32_t GetNextResourceId() { return ++mResourceId; }
uint32_t GetNamespace() { return mIdNamespace; }
void SetNamespace(uint32_t aIdNamespace)
{
mIdNamespace = aIdNamespace;
}
private:
friend class CompositorBridgeChild;

View File

@@ -75,6 +75,8 @@ private:
InfallibleTArray<OpDestroy>* mActorsToDestroy;
};
/* static */ uint32_t WebRenderBridgeParent::sIdNameSpace = 0;
WebRenderBridgeParent::WebRenderBridgeParent(CompositorBridgeParentBase* aCompositorBridge,
const wr::PipelineId& aPipelineId,
widget::CompositorWidget* aWidget,
@@ -91,6 +93,7 @@ WebRenderBridgeParent::WebRenderBridgeParent(CompositorBridgeParentBase* aCompos
, mChildLayerObserverEpoch(0)
, mParentLayerObserverEpoch(0)
, mWrEpoch(0)
, mIdNameSpace(++sIdNameSpace)
, mDestroyed(false)
{
MOZ_ASSERT(mCompositableHolder);

View File

@@ -133,6 +133,11 @@ public:
aNotifications->AppendElements(Move(mImageCompositeNotifications));
}
uint32_t GetIdNameSpace()
{
return mIdNameSpace;
}
private:
virtual ~WebRenderBridgeParent();
@@ -178,8 +183,11 @@ private:
std::queue<PendingTransactionId> mPendingTransactionIds;
uint32_t mWrEpoch;
uint32_t mIdNameSpace;
bool mDestroyed;
static uint32_t sIdNameSpace;
};
} // namespace layers

View File

@@ -228,6 +228,7 @@ WebRenderLayerManager::Initialize(PCompositorBridgeChild* aCBChild,
LayoutDeviceIntSize size = mWidget->GetClientSize();
WrBridge()->SendCreate(size.ToUnknownSize());
WrBridge()->IdentifyTextureHost(textureFactoryIdentifier);
WrBridge()->SetNamespace(id_namespace);
*aTextureFactoryIdentifier = textureFactoryIdentifier;
}