Skip to content

Commit

Permalink
Bug 1382091 - Delete ImageKeys with ClearCachedResources r=nical
Browse files Browse the repository at this point in the history
  • Loading branch information
sotaro committed Jul 20, 2017
1 parent 3dccf77 commit c23ab7f
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 7 deletions.
2 changes: 1 addition & 1 deletion gfx/layers/wr/WebRenderBridgeChild.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -465,13 +465,13 @@ void
WebRenderBridgeChild::BeginClearCachedResources()
{
mIsInClearCachedResources = true;
SendClearCachedResources();
}

void
WebRenderBridgeChild::EndClearCachedResources()
{
ProcessWebRenderParentCommands();
SendClearCachedResources();
mIsInClearCachedResources = false;
}

Expand Down
2 changes: 1 addition & 1 deletion gfx/layers/wr/WebRenderBridgeParent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
9 changes: 5 additions & 4 deletions gfx/layers/wr/WebRenderLayerManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -764,6 +764,7 @@ WebRenderLayerManager::ClearCachedResources(Layer* aSubtree)
} else if (mRoot) {
ClearLayer(mRoot);
}
DiscardImages();
WrBridge()->EndClearCachedResources();
}

Expand Down
2 changes: 1 addition & 1 deletion gfx/layers/wr/WebRenderLayerManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ class WebRenderLayerManager final : public LayerManager

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,
Expand Down

0 comments on commit c23ab7f

Please sign in to comment.