Bug 1404232 - Add WebRenderLayerManager::WrUpdated() r=jrmuizel

This commit is contained in:
sotaro
2017-10-19 13:02:47 +09:00
parent a00fdca2d6
commit 189349f133
4 changed files with 27 additions and 1 deletions

View File

@@ -13,6 +13,7 @@
#include "mozilla/layers/IpcResourceUpdateQueue.h"
#include "mozilla/layers/StackingContextHelper.h"
#include "mozilla/layers/PTextureChild.h"
#include "mozilla/layers/WebRenderLayerManager.h"
#include "mozilla/webrender/WebRenderAPI.h"
namespace mozilla {
@@ -27,6 +28,7 @@ WebRenderBridgeChild::WebRenderBridgeChild(const wr::PipelineId& aPipelineId)
, mIdNamespace{0}
, mResourceId(0)
, mPipelineId(aPipelineId)
, mManager(nullptr)
, mIPCOpen(false)
, mDestroyed(false)
, mFontKeysDeleted(0)
@@ -43,6 +45,7 @@ WebRenderBridgeChild::Destroy(bool aIsSync)
// mDestroyed is used to prevent calling Send__delete__() twice.
// When this function is called from CompositorBridgeChild::Destroy().
mDestroyed = true;
mManager = nullptr;
if (aIsSync) {
SendShutdownSync();
@@ -55,6 +58,7 @@ void
WebRenderBridgeChild::ActorDestroy(ActorDestroyReason why)
{
mDestroyed = true;
mManager = nullptr;
}
void
@@ -526,13 +530,15 @@ WebRenderBridgeChild::InForwarderThread()
mozilla::ipc::IPCResult
WebRenderBridgeChild::RecvWrUpdated(const wr::IdNamespace& aNewIdNamespace)
{
if (mManager) {
mManager->WrUpdated();
}
// Update mIdNamespace to identify obsolete keys and messages by WebRenderBridgeParent.
// Since usage of invalid keys could cause crash in webrender.
mIdNamespace = aNewIdNamespace;
// Just clear FontInstaceKeys/FontKeys, they are removed during WebRenderAPI destruction.
mFontInstanceKeys.Clear();
mFontKeys.Clear();
GetCompositorBridgeChild()->RecvInvalidateLayers(wr::AsUint64(mPipelineId));
return IPC_OK();
}
@@ -554,6 +560,13 @@ WebRenderBridgeChild::EndClearCachedResources()
mIsInClearCachedResources = false;
}
void
WebRenderBridgeChild::SetWebRenderLayerManager(WebRenderLayerManager* aManager)
{
MOZ_ASSERT(aManager);
mManager = aManager;
}
ipc::IShmemAllocator*
WebRenderBridgeChild::GetShmemAllocator()
{

View File

@@ -28,6 +28,7 @@ class CompositableClient;
class CompositorBridgeChild;
class StackingContextHelper;
class TextureForwarder;
class WebRenderLayerManager;
template<class T>
class ThreadSafeWeakPtrHashKey : public PLDHashEntryHdr
@@ -141,6 +142,8 @@ public:
void BeginClearCachedResources();
void EndClearCachedResources();
void SetWebRenderLayerManager(WebRenderLayerManager* aManager);
ipc::IShmemAllocator* GetShmemAllocator();
private:
@@ -199,6 +202,7 @@ private:
wr::IdNamespace mIdNamespace;
uint32_t mResourceId;
wr::PipelineId mPipelineId;
WebRenderLayerManager* mManager;
bool mIPCOpen;
bool mDestroyed;

View File

@@ -70,6 +70,7 @@ WebRenderLayerManager::Initialize(PCompositorBridgeChild* aCBChild,
}
mWrChild = static_cast<WebRenderBridgeChild*>(bridge);
WrBridge()->SetWebRenderLayerManager(this);
WrBridge()->SendCreate(size.ToUnknownSize());
WrBridge()->IdentifyTextureHost(textureFactoryIdentifier);
WrBridge()->SetNamespace(id_namespace);
@@ -536,6 +537,12 @@ WebRenderLayerManager::ClearCachedResources(Layer* aSubtree)
WrBridge()->EndClearCachedResources();
}
void
WebRenderLayerManager::WrUpdated()
{
// Handle removing all obsoleted WebRenderUserData
}
void
WebRenderLayerManager::UpdateTextureFactoryIdentifier(const TextureFactoryIdentifier& aNewIdentifier,
uint64_t aDeviceResetSeqNo)

View File

@@ -155,6 +155,8 @@ public:
WebRenderUserDataRefTable* GetWebRenderUserDataTable() { return mWebRenderCommandBuilder.GetWebRenderUserDataTable(); }
WebRenderScrollData& GetScrollData() { return mScrollData; }
void WrUpdated();
private:
/**
* Take a snapshot of the parent context, and copy