Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4138)

Unified Diff: cc/picture_layer_impl.cc

Issue 12045086: cc: Throttle tile priority updates to once a frame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebasedonmaster Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/picture_layer_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/picture_layer_impl.cc
diff --git a/cc/picture_layer_impl.cc b/cc/picture_layer_impl.cc
index 97a79f4f16a56e255c889bc8fa22f2074d151e3e..22d0653ddccdea0df5b8e23965422e98648dcfe0 100644
--- a/cc/picture_layer_impl.cc
+++ b/cc/picture_layer_impl.cc
@@ -27,7 +27,8 @@ namespace cc {
PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* treeImpl, int id)
: LayerImpl(treeImpl, id),
pile_(PicturePileImpl::Create()),
- last_update_time_(0),
+ last_source_frame_number_(0),
+ last_impl_frame_time_(0),
last_content_scale_(0),
ideal_contents_scale_(0),
is_mask_(false) {
@@ -66,6 +67,10 @@ void PictureLayerImpl::pushPropertiesTo(LayerImpl* base_layer) {
layer_impl->SetIsMask(is_mask_);
layer_impl->TransferTilingSet(tilings_.Pass());
layer_impl->pile_ = pile_;
+ // Sync over the last source frame number so the active tree does not respond
+ // to the source frame number changing in its tree.
+ layer_impl->last_source_frame_number_ = last_source_frame_number_;
+ layer_impl->last_impl_frame_time_ = last_impl_frame_time_;
pile_ = PicturePileImpl::Create();
pile_->set_slow_down_raster_scale_factor(
layerTreeImpl()->debug_state().slowDownRasterScaleFactor);
@@ -197,16 +202,33 @@ void PictureLayerImpl::dumpLayerProperties(std::string*, int indent) const {
// TODO(enne): implement me
}
-void PictureLayerImpl::didUpdateTransforms() {
+void PictureLayerImpl::updateTilePriorities() {
+ int current_source_frame_number = layerTreeImpl()->source_frame_number();
+ bool first_update_in_new_source_frame =
+ current_source_frame_number != last_source_frame_number_;
+
+ double current_frame_time =
+ (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF();
+ bool first_update_in_new_impl_frame =
+ current_frame_time != last_impl_frame_time_;
+
+ // In pending tree, this is always called. We update priorities:
+ // - Immediately after a commit (first_update_in_new_source_frame).
+ // - On animation ticks after the first frame in the tree
+ // (first_update_in_new_impl_frame).
+ // In active tree, this is only called during draw. We update priorities:
+ // - On draw if properties were not already computed by the pending tree
+ // and activated for the frame (first_update_in_new_impl_frame).
+ if (!first_update_in_new_impl_frame && !first_update_in_new_source_frame)
+ return;
+
gfx::Transform current_screen_space_transform =
screenSpaceTransform();
- double current_time =
- (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF();
double time_delta = 0;
- if (last_update_time_ != 0 && last_bounds_ == bounds() &&
+ if (last_impl_frame_time_ != 0 && last_bounds_ == bounds() &&
last_content_bounds_ == contentBounds() &&
last_content_scale_ == contentsScaleX()) {
- time_delta = current_time - last_update_time_;
+ time_delta = current_frame_time - last_impl_frame_time_;
}
WhichTree tree = layerTreeImpl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE;
tilings_->UpdateTilePriorities(
@@ -218,8 +240,9 @@ void PictureLayerImpl::didUpdateTransforms() {
current_screen_space_transform,
time_delta);
+ last_source_frame_number_ = current_source_frame_number;
last_screen_space_transform_ = current_screen_space_transform;
- last_update_time_ = current_time;
+ last_impl_frame_time_ = current_frame_time;
last_bounds_ = bounds();
last_content_bounds_ = contentBounds();
last_content_scale_ = contentsScaleX();
« no previous file with comments | « cc/picture_layer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698