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

This commit is contained in:
sotaro 2017-02-27 12:16:11 +09:00
Родитель d489fa0451
Коммит 712d4c80f9
8 изменённых файлов: 23 добавлений и 6 удалений

Просмотреть файл

@ -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;
}

Просмотреть файл

@ -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);

Просмотреть файл

@ -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;
}

Просмотреть файл

@ -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)

Просмотреть файл

@ -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;

Просмотреть файл

@ -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);

Просмотреть файл

@ -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

Просмотреть файл

@ -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;
}