Index: cc/picture_layer_impl.cc |
diff --git a/cc/picture_layer_impl.cc b/cc/picture_layer_impl.cc |
index 80bf1fa3ae2e9fef727ef7356e69bace6e4678f5..258c43bbebd206fe02c3d92ad52053e5e8986951 100644 |
--- a/cc/picture_layer_impl.cc |
+++ b/cc/picture_layer_impl.cc |
@@ -9,6 +9,7 @@ |
#include "cc/checkerboard_draw_quad.h" |
#include "cc/debug_border_draw_quad.h" |
#include "cc/debug_colors.h" |
+#include "cc/frame_rate_counter.h" |
#include "cc/layer_tree_impl.h" |
#include "cc/math_util.h" |
#include "cc/quad_sink.h" |
@@ -27,6 +28,8 @@ namespace cc { |
PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* treeImpl, int id) |
: LayerImpl(treeImpl, id), |
pile_(PicturePileImpl::Create()), |
+ last_source_frame_number_(0), |
+ last_impl_frame_number_(0), |
last_update_time_(0), |
last_content_scale_(0), |
ideal_contents_scale_(0), |
@@ -66,6 +69,7 @@ void PictureLayerImpl::pushPropertiesTo(LayerImpl* base_layer) { |
layer_impl->SetIsMask(is_mask_); |
layer_impl->TransferTilingSet(tilings_.Pass()); |
layer_impl->pile_ = pile_; |
+ layer_impl->last_impl_frame_number_ = 0; |
pile_ = PicturePileImpl::Create(); |
pile_->set_slow_down_raster_scale_factor( |
layerTreeImpl()->debug_state().slowDownRasterScaleFactor); |
@@ -193,7 +197,25 @@ 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_; |
qinmin
2013/01/25 05:07:53
i think it is possible for current_source_frame_nu
danakj
2013/01/25 05:09:01
ya you're right, i already switched it to != in th
|
+ |
+ int current_impl_frame_number = |
+ layerTreeImpl()->frame_rate_counter()->currentFrameNumber(); |
+ bool first_frame_in_new_impl_tree = |
+ last_impl_frame_number_ == 0 || |
+ current_impl_frame_number == last_impl_frame_number_; |
+ |
+ // 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. |
+ // In active tree, this is only called during draw. We update priorities: |
+ // - On draws after the first frame in the tree. |
+ if (first_frame_in_new_impl_tree && !first_update_in_new_source_frame) |
+ return; |
+ |
gfx::Transform current_screen_space_transform = |
screenSpaceTransform(); |
double current_time = |
@@ -214,6 +236,8 @@ void PictureLayerImpl::didUpdateTransforms() { |
current_screen_space_transform, |
time_delta); |
+ last_source_frame_number_ = current_source_frame_number; |
+ last_impl_frame_number_ = current_impl_frame_number; |
last_screen_space_transform_ = current_screen_space_transform; |
last_update_time_ = current_time; |
last_bounds_ = bounds(); |