Commit af6993ce authored by sigbjornf's avatar sigbjornf Committed by Commit bot

ImageResource: remove unnecessary vector copying during iteration.

Iterations that don't update the underlying collection, can be done
in-place.

R=
BUG=

Review-Url: https://codereview.chromium.org/2555103004
Cr-Commit-Position: refs/heads/master@{#437482}
parent b0d4eed3
...@@ -158,10 +158,11 @@ void ImageResource::checkNotify() { ...@@ -158,10 +158,11 @@ void ImageResource::checkNotify() {
} }
void ImageResource::markObserverFinished(ImageResourceObserver* observer) { void ImageResource::markObserverFinished(ImageResourceObserver* observer) {
if (m_observers.contains(observer)) { auto it = m_observers.find(observer);
m_finishedObservers.add(observer); if (it == m_observers.end())
m_observers.remove(observer); return;
} m_observers.remove(it);
m_finishedObservers.add(observer);
} }
void ImageResource::didAddClient(ResourceClient* client) { void ImageResource::didAddClient(ResourceClient* client) {
...@@ -207,13 +208,14 @@ void ImageResource::addObserver(ImageResourceObserver* observer) { ...@@ -207,13 +208,14 @@ void ImageResource::addObserver(ImageResourceObserver* observer) {
void ImageResource::removeObserver(ImageResourceObserver* observer) { void ImageResource::removeObserver(ImageResourceObserver* observer) {
DCHECK(observer); DCHECK(observer);
if (m_observers.contains(observer)) auto it = m_observers.find(observer);
m_observers.remove(observer); if (it != m_observers.end()) {
else if (m_finishedObservers.contains(observer)) m_observers.remove(it);
m_finishedObservers.remove(observer); } else {
else it = m_finishedObservers.find(observer);
NOTREACHED(); DCHECK(it != m_finishedObservers.end());
m_finishedObservers.remove(it);
}
didRemoveClientOrObserver(); didRemoveClientOrObserver();
} }
...@@ -229,14 +231,10 @@ static void priorityFromObserver(const ImageResourceObserver* observer, ...@@ -229,14 +231,10 @@ static void priorityFromObserver(const ImageResourceObserver* observer,
ResourcePriority ImageResource::priorityFromObservers() { ResourcePriority ImageResource::priorityFromObservers() {
ResourcePriority priority; ResourcePriority priority;
for (auto* observer : m_finishedObservers.asVector()) { for (const auto& it : m_finishedObservers)
if (m_finishedObservers.contains(observer)) priorityFromObserver(it.key, priority);
priorityFromObserver(observer, priority); for (const auto& it : m_observers)
} priorityFromObserver(it.key, priority);
for (auto* observer : m_observers.asVector()) {
if (m_observers.contains(observer))
priorityFromObserver(observer, priority);
}
return priority; return priority;
} }
...@@ -581,15 +579,13 @@ bool ImageResource::shouldPauseAnimation(const blink::Image* image) { ...@@ -581,15 +579,13 @@ bool ImageResource::shouldPauseAnimation(const blink::Image* image) {
if (!image || image != m_image) if (!image || image != m_image)
return false; return false;
for (auto* observer : m_finishedObservers.asVector()) { for (const auto& it : m_finishedObservers)
if (m_finishedObservers.contains(observer) && observer->willRenderImage()) if (it.key->willRenderImage())
return false; return false;
}
for (auto* observer : m_observers.asVector()) { for (const auto& it : m_observers)
if (m_observers.contains(observer) && observer->willRenderImage()) if (it.key->willRenderImage())
return false; return false;
}
return true; return true;
} }
...@@ -605,14 +601,12 @@ void ImageResource::updateImageAnimationPolicy() { ...@@ -605,14 +601,12 @@ void ImageResource::updateImageAnimationPolicy() {
return; return;
ImageAnimationPolicy newPolicy = ImageAnimationPolicyAllowed; ImageAnimationPolicy newPolicy = ImageAnimationPolicyAllowed;
for (auto* observer : m_finishedObservers.asVector()) { for (const auto& it : m_finishedObservers) {
if (m_finishedObservers.contains(observer) && if (it.key->getImageAnimationPolicy(newPolicy))
observer->getImageAnimationPolicy(newPolicy))
break; break;
} }
for (auto* observer : m_observers.asVector()) { for (const auto& it : m_observers) {
if (m_observers.contains(observer) && if (it.key->getImageAnimationPolicy(newPolicy))
observer->getImageAnimationPolicy(newPolicy))
break; break;
} }
......
...@@ -51,11 +51,17 @@ class CORE_EXPORT ImageResourceObserver { ...@@ -51,11 +51,17 @@ class CORE_EXPORT ImageResourceObserver {
// example would not render the image, but LayoutImages would (assuming they // example would not render the image, but LayoutImages would (assuming they
// have visibility: visible and their layout tree isn't hidden e.g., in the // have visibility: visible and their layout tree isn't hidden e.g., in the
// b/f cache or in a background tab). // b/f cache or in a background tab).
//
// An implementation of this method is not allowed to add or remove
// ImageResource observers.
virtual bool willRenderImage() { return false; } virtual bool willRenderImage() { return false; }
// Called to get imageAnimation policy from settings // Called to get imageAnimation policy from settings. An implementation of
// this method is not allowed to add or remove ImageResource observers.
virtual bool getImageAnimationPolicy(ImageAnimationPolicy&) { return false; } virtual bool getImageAnimationPolicy(ImageAnimationPolicy&) { return false; }
// Return the observer's requested resource priority. An implementation of
// this method is not allowed to add or remove ImageResource observers.
virtual ResourcePriority computeResourcePriority() const { virtual ResourcePriority computeResourcePriority() const {
return ResourcePriority(); return ResourcePriority();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment