summaryrefslogtreecommitdiffstats
path: root/cc/picture_layer.cc
diff options
context:
space:
mode:
authorenne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-28 03:29:17 +0000
committerenne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-28 03:29:17 +0000
commit0e630ea38167c0cafbba79e8d8043dbb3487b980 (patch)
tree5426e58c6c86a0025468e239131a50850ef43736 /cc/picture_layer.cc
parent89590681f899dfe06878dcc7b87855bd9e4d6f8e (diff)
downloadchromium_src-0e630ea38167c0cafbba79e8d8043dbb3487b980.zip
chromium_src-0e630ea38167c0cafbba79e8d8043dbb3487b980.tar.gz
chromium_src-0e630ea38167c0cafbba79e8d8043dbb3487b980.tar.bz2
cc: Clean up invalidation behavior in PicturePile / PictureLayer
BUG=155209 Review URL: https://chromiumcodereview.appspot.com/11416217 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@169826 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/picture_layer.cc')
-rw-r--r--cc/picture_layer.cc21
1 files changed, 16 insertions, 5 deletions
diff --git a/cc/picture_layer.cc b/cc/picture_layer.cc
index 86842df..cac70f7 100644
--- a/cc/picture_layer.cc
+++ b/cc/picture_layer.cc
@@ -32,20 +32,31 @@ void PictureLayer::pushPropertiesTo(LayerImpl* base_layer) {
PictureLayerImpl* layer_impl = static_cast<PictureLayerImpl*>(base_layer);
pile_.PushPropertiesTo(layer_impl->pile_);
- // TODO(enne): Need to sync tiling from active tree prior to this.
- layer_impl->tilings_.Invalidate(invalidation_);
- invalidation_.Clear();
+ // TODO(enne): Once we have two trees on the impl side, we need to
+ // sync the active layer's tiles prior to this Invalidate call since it
+ // will make new tiles for anything intersecting the invalidation.
+ layer_impl->tilings_.Invalidate(pile_invalidation_);
+ pile_invalidation_.Clear();
}
void PictureLayer::setNeedsDisplayRect(const gfx::RectF& layer_rect) {
gfx::Rect rect = gfx::ToEnclosedRect(layer_rect);
- invalidation_.Union(rect);
+ pending_invalidation_.Union(rect);
}
void PictureLayer::update(ResourceUpdateQueue&, const OcclusionTracker*,
RenderingStats& stats) {
+ if (pile_.size() == bounds() && pending_invalidation_.IsEmpty())
+ return;
+
pile_.Resize(bounds());
- pile_.Update(client_, stats);
+
+ // Calling paint in WebKit can sometimes cause invalidations, so save
+ // off the invalidation prior to calling update.
+ pile_invalidation_.Swap(pending_invalidation_);
+ pending_invalidation_.Clear();
+
+ pile_.Update(client_, pile_invalidation_, stats);
}
} // namespace cc