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

View File

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

View File

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

View File

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