Bug 1382091 - Delete ImageKeys with ClearCachedResources r=nical

This commit is contained in:
sotaro 2017-07-20 10:30:31 +09:00
Родитель 288e69595c
Коммит 200cae20a8
4 изменённых файлов: 8 добавлений и 7 удалений

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

@ -465,13 +465,13 @@ void
WebRenderBridgeChild::BeginClearCachedResources()
{
mIsInClearCachedResources = true;
SendClearCachedResources();
}
void
WebRenderBridgeChild::EndClearCachedResources()
{
ProcessWebRenderParentCommands();
SendClearCachedResources();
mIsInClearCachedResources = false;
}

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

@ -846,11 +846,11 @@ WebRenderBridgeParent::RecvClearCachedResources()
mCompositorBridge->ObserveLayerUpdate(GetLayersId(), GetChildLayerObserverEpoch(), false);
// Clear resources
// XXX Can we clear more resources?
++mWrEpoch; // Update webrender epoch
mApi->ClearRootDisplayList(wr::NewEpoch(mWrEpoch), mPipelineId);
// Schedule composition to clean up Pipeline
mCompositorScheduler->ScheduleComposition();
DeleteOldImages();
// Remove animations.
for (std::unordered_set<uint64_t>::iterator iter = mActiveAnimations.begin(); iter != mActiveAnimations.end(); iter++) {
mAnimStorage->ClearById(*iter);

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

@ -630,18 +630,18 @@ WebRenderLayerManager::MakeSnapshotIfRequired(LayoutDeviceIntSize aSize)
void
WebRenderLayerManager::AddImageKeyForDiscard(wr::ImageKey key)
{
mImageKeys.push_back(key);
mImageKeysToDelete.push_back(key);
}
void
WebRenderLayerManager::DiscardImages()
{
if (WrBridge()->IPCOpen()) {
for (auto key : mImageKeys) {
for (auto key : mImageKeysToDelete) {
WrBridge()->SendDeleteImage(key);
}
}
mImageKeys.clear();
mImageKeysToDelete.clear();
}
void
@ -666,7 +666,7 @@ WebRenderLayerManager::DiscardLocalImages()
// Removes images but doesn't tell the parent side about them
// This is useful in empty / failed transactions where we created
// image keys but didn't tell the parent about them yet.
mImageKeys.clear();
mImageKeysToDelete.clear();
}
void
@ -764,6 +764,7 @@ WebRenderLayerManager::ClearCachedResources(Layer* aSubtree)
} else if (mRoot) {
ClearLayer(mRoot);
}
DiscardImages();
WrBridge()->EndClearCachedResources();
}

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

@ -214,7 +214,7 @@ private:
private:
nsIWidget* MOZ_NON_OWNING_REF mWidget;
std::vector<wr::ImageKey> mImageKeys;
std::vector<wr::ImageKey> mImageKeysToDelete;
nsTArray<uint64_t> mDiscardedCompositorAnimationsIds;
/* PaintedLayer callbacks; valid at the end of a transaciton,