Bug 1404232 - Add WebRenderCommandBuilder::ClearCachedResources() r=jrmuizel
This commit is contained in:
@@ -492,7 +492,7 @@ WebRenderCommandBuilder::GenerateFallbackData(nsDisplayItem* aItem,
|
||||
needPaint = !invalidRegion.IsEmpty();
|
||||
}
|
||||
|
||||
if (needPaint) {
|
||||
if (needPaint || !fallbackData->GetKey()) {
|
||||
gfx::SurfaceFormat format = aItem->GetType() == DisplayItemType::TYPE_MASK ?
|
||||
gfx::SurfaceFormat::A8 : gfx::SurfaceFormat::B8G8R8A8;
|
||||
if (gfxPrefs::WebRenderBlobImages()) {
|
||||
@@ -638,5 +638,14 @@ WebRenderCommandBuilder::RemoveUnusedAndResetWebRenderUserData()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderCommandBuilder::ClearCachedResources()
|
||||
{
|
||||
for (auto iter = mWebRenderUserDatas.Iter(); !iter.Done(); iter.Next()) {
|
||||
WebRenderUserData* data = iter.Get()->GetKey();
|
||||
data->ClearCachedResources();
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace layers
|
||||
} // namespace mozilla
|
||||
|
||||
@@ -94,6 +94,7 @@ public:
|
||||
LayerRect& aImageRect);
|
||||
|
||||
void RemoveUnusedAndResetWebRenderUserData();
|
||||
void ClearCachedResources();
|
||||
|
||||
// Those are data that we kept between transactions. We used to cache some
|
||||
// data in the layer. But in layers free mode, we don't have layer which
|
||||
|
||||
@@ -540,7 +540,8 @@ WebRenderLayerManager::ClearCachedResources(Layer* aSubtree)
|
||||
void
|
||||
WebRenderLayerManager::WrUpdated()
|
||||
{
|
||||
// Handle removing all obsoleted WebRenderUserData
|
||||
mWebRenderCommandBuilder.ClearCachedResources();
|
||||
DiscardLocalImages();
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -53,17 +53,26 @@ WebRenderImageData::WebRenderImageData(WebRenderLayerManager* aWRManager, nsDisp
|
||||
}
|
||||
|
||||
WebRenderImageData::~WebRenderImageData()
|
||||
{
|
||||
ClearCachedResources();
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderImageData::ClearCachedResources()
|
||||
{
|
||||
if (mKey) {
|
||||
mWRManager->AddImageKeyForDiscard(mKey.value());
|
||||
mKey.reset();
|
||||
}
|
||||
|
||||
if (mExternalImageId) {
|
||||
WrBridge()->DeallocExternalImageId(mExternalImageId.ref());
|
||||
mExternalImageId.reset();
|
||||
}
|
||||
|
||||
if (mPipelineId) {
|
||||
WrBridge()->RemovePipelineIdForCompositable(mPipelineId.ref());
|
||||
mPipelineId.reset();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -235,6 +244,15 @@ WebRenderCanvasData::WebRenderCanvasData(WebRenderLayerManager* aWRManager, nsDi
|
||||
|
||||
WebRenderCanvasData::~WebRenderCanvasData()
|
||||
{
|
||||
ClearCachedResources();
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderCanvasData::ClearCachedResources()
|
||||
{
|
||||
if (mCanvasRenderer) {
|
||||
mCanvasRenderer->ClearCachedResources();
|
||||
}
|
||||
}
|
||||
|
||||
WebRenderCanvasRendererAsync*
|
||||
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
nsIFrame* GetFrame() { return mFrame; }
|
||||
uint32_t GetDisplayItemKey() { return mDisplayItemKey; }
|
||||
void RemoveFromTable();
|
||||
|
||||
virtual void ClearCachedResources() {};
|
||||
protected:
|
||||
virtual ~WebRenderUserData();
|
||||
|
||||
@@ -98,7 +98,7 @@ public:
|
||||
bool aIsBackfaceVisible);
|
||||
|
||||
void CreateImageClientIfNeeded();
|
||||
|
||||
void ClearCachedResources() override;
|
||||
protected:
|
||||
void CreateExternalImageIfNeeded();
|
||||
|
||||
@@ -160,7 +160,7 @@ public:
|
||||
static UserDataType Type() { return UserDataType::eCanvas; }
|
||||
|
||||
WebRenderCanvasRendererAsync* GetCanvasRenderer();
|
||||
|
||||
void ClearCachedResources() override;
|
||||
protected:
|
||||
UniquePtr<WebRenderCanvasRendererAsync> mCanvasRenderer;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user