Bug 1472600 - Update SyncHandle when Tab is moved between windows r=nical

This commit is contained in:
sotaro 2018-07-03 08:43:17 +09:00
Родитель c367b58df7
Коммит 6bfc2aa91f
6 изменённых файлов: 14 добавлений и 7 удалений

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

@ -1802,7 +1802,8 @@ CompositorBridgeParent::RecvAdoptChild(const LayersId& child)
childWrBridge->UpdateWebRender(mWrBridge->CompositorScheduler(),
api,
mWrBridge->AsyncImageManager(),
GetAnimationStorage());
GetAnimationStorage(),
mWrBridge->GetTextureFactoryIdentifier());
// Pretend we composited, since parent CompositorBridgeParent was replaced.
if (cpcp) {
TimeStamp now = TimeStamp::Now();

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

@ -17,6 +17,7 @@ include protocol PTexture;
using mozilla::layers::APZTestData from "mozilla/layers/APZTestData.h";
using mozilla::layers::ScrollUpdatesMap from "FrameMetrics.h";
using struct mozilla::layers::ScrollableLayerGuid from "FrameMetrics.h";
using struct mozilla::layers::TextureFactoryIdentifier from "mozilla/layers/CompositorTypes.h";
using struct mozilla::layers::TextureInfo from "mozilla/layers/CompositorTypes.h";
using mozilla::layers::CompositableHandle from "mozilla/layers/LayersTypes.h";
using mozilla::wr::BuiltDisplayListDescriptor from "mozilla/webrender/webrender_ffi.h";
@ -79,7 +80,7 @@ parent:
async Shutdown();
sync ShutdownSync();
child:
async WrUpdated(IdNamespace aNewIdNamespace);
async WrUpdated(IdNamespace aNewIdNamespace, TextureFactoryIdentifier textureFactoryIdentifier);
async __delete__();
};

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

@ -542,11 +542,13 @@ WebRenderBridgeChild::InForwarderThread()
}
mozilla::ipc::IPCResult
WebRenderBridgeChild::RecvWrUpdated(const wr::IdNamespace& aNewIdNamespace)
WebRenderBridgeChild::RecvWrUpdated(const wr::IdNamespace& aNewIdNamespace,
const TextureFactoryIdentifier& textureFactoryIdentifier)
{
if (mManager) {
mManager->WrUpdated();
}
IdentifyTextureHost(textureFactoryIdentifier);
// Update mIdNamespace to identify obsolete keys and messages by WebRenderBridgeParent.
// Since usage of invalid keys could cause crash in webrender.
mIdNamespace = aNewIdNamespace;

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

@ -200,7 +200,8 @@ private:
void DoDestroy();
mozilla::ipc::IPCResult RecvWrUpdated(const wr::IdNamespace& aNewIdNamespace) override;
mozilla::ipc::IPCResult RecvWrUpdated(const wr::IdNamespace& aNewIdNamespace,
const TextureFactoryIdentifier& textureFactoryIdentifier) override;
void AddIPDLReference() {
MOZ_ASSERT(mIPCOpen == false);

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

@ -1121,7 +1121,8 @@ void
WebRenderBridgeParent::UpdateWebRender(CompositorVsyncScheduler* aScheduler,
wr::WebRenderAPI* aApi,
AsyncImagePipelineManager* aImageMgr,
CompositorAnimationStorage* aAnimStorage)
CompositorAnimationStorage* aAnimStorage,
const TextureFactoryIdentifier& aTextureFactoryIdentifier)
{
MOZ_ASSERT(!mWidget);
MOZ_ASSERT(aScheduler);
@ -1144,7 +1145,7 @@ WebRenderBridgeParent::UpdateWebRender(CompositorVsyncScheduler* aScheduler,
// 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.
Unused << SendWrUpdated(mIdNamespace);
Unused << SendWrUpdated(mIdNamespace, aTextureFactoryIdentifier);
CompositorBridgeParentBase* cBridge = mCompositorBridge;
// XXX Stop to clear resources if webreder supports resources sharing between different webrender instances.
ClearResources();

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

@ -184,7 +184,8 @@ public:
void UpdateWebRender(CompositorVsyncScheduler* aScheduler,
wr::WebRenderAPI* aApi,
AsyncImagePipelineManager* aImageMgr,
CompositorAnimationStorage* aAnimStorage);
CompositorAnimationStorage* aAnimStorage,
const TextureFactoryIdentifier& aTextureFactoryIdentifier);
void RemoveEpochDataPriorTo(const wr::Epoch& aRenderedEpoch);