Index: cc/picture_layer_impl.cc |
diff --git a/cc/picture_layer_impl.cc b/cc/picture_layer_impl.cc |
index 80bf1fa3ae2e9fef727ef7356e69bace6e4678f5..9b0ac39f27b07058cc4cf9767d452fa7be248de3 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; |
enne (OOO)
2013/01/25 18:17:52
I don't understand this. I think you'd want to se
danakj
2013/01/25 18:25:47
This is resetting the value on the target tree. Th
enne (OOO)
2013/01/25 18:51:26
You're right that this is called on the pending tr
danakj
2013/01/25 18:56:30
The goal is that when you activate the tree, it wo
enne (OOO)
2013/01/25 19:00:26
I think if you just sync the last source frame num
danakj
2013/01/25 20:45:25
Yes, I agree. Good observation. Special case is go
|
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_; |
+ |
+ int current_impl_frame_number = |
+ layerTreeImpl()->frame_rate_counter()->currentFrameNumber(); |
enne (OOO)
2013/01/25 18:17:52
Can you expose this on LayerTreeImpl like source_f
danakj
2013/01/25 18:25:47
Yep.
|
+ 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: |
enne (OOO)
2013/01/25 18:17:52
How is ensureRSLL handled?
danakj
2013/01/25 18:25:47
ensureRSLL calls UDP(ACTIVE_TREE) which does not d
enne (OOO)
2013/01/25 18:51:26
Aha, thanks.
|
+ // - 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(); |