Bug 1367207 part 4 - Use LookupRemoveIf() to avoid a second hashtable lookup for Remove(). r=dholbert

MozReview-Commit-ID: 6EYkiKpLHvI
This commit is contained in:
Mats Palmgren 2017-06-07 15:22:41 +02:00
parent 0630f5b2bf
commit 7dd909a5ce

View File

@ -147,35 +147,35 @@ ImageLoader::RemoveRequestToFrameMapping(imgIRequest* aRequest,
} }
#endif #endif
FrameSet* frameSet = nullptr; mRequestToFrameMap.LookupRemoveIf(aRequest,
mRequestToFrameMap.Get(aRequest, &frameSet); [aRequest, aFrame, this] (FrameSet* aFrameSet) {
if (frameSet) { MOZ_ASSERT(aFrameSet, "This should never be null");
frameSet->RemoveElementSorted(aFrame); aFrameSet->RemoveElementSorted(aFrame);
if (frameSet->IsEmpty()) { bool remove = aFrameSet->IsEmpty();
mRequestToFrameMap.Remove(aRequest); if (remove) {
nsPresContext* presContext = GetPresContext();
nsPresContext* presContext = GetPresContext(); if (presContext) {
if (presContext) { nsLayoutUtils::DeregisterImageRequest(presContext, aRequest, nullptr);
nsLayoutUtils::DeregisterImageRequest(presContext, aRequest, nullptr); }
} }
} return remove;
} });
} }
void void
ImageLoader::RemoveFrameToRequestMapping(imgIRequest* aRequest, ImageLoader::RemoveFrameToRequestMapping(imgIRequest* aRequest,
nsIFrame* aFrame) nsIFrame* aFrame)
{ {
RequestSet* requestSet = nullptr; mFrameToRequestMap.LookupRemoveIf(aFrame,
mFrameToRequestMap.Get(aFrame, &requestSet); [aRequest, aFrame] (RequestSet* aRequestSet) {
if (requestSet) { MOZ_ASSERT(aRequestSet, "This should never be null");
MOZ_ASSERT(aFrame->HasImageRequest(), "HasImageRequest is lying"); aRequestSet->RemoveElementSorted(aRequest);
requestSet->RemoveElementSorted(aRequest); bool remove = aRequestSet->IsEmpty();
if (requestSet->IsEmpty()) { if (remove) {
mFrameToRequestMap.Remove(aFrame); aFrame->SetHasImageRequest(false);
aFrame->SetHasImageRequest(false); }
} return remove;
} });
} }
void void