Chromium Code Reviews| Index: cc/layers/picture_layer_impl.cc |
| diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc |
| index 55f4c39dddb9395856977b948ec83ee3a35332d8..80723933654c1ae297d5c61c6633610cf72e87bc 100644 |
| --- a/cc/layers/picture_layer_impl.cc |
| +++ b/cc/layers/picture_layer_impl.cc |
| @@ -61,7 +61,7 @@ PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* tree_impl, int id) |
| raster_contents_scale_(0.f), |
| low_res_raster_contents_scale_(0.f), |
| raster_source_scale_is_fixed_(false), |
| - was_animating_transform_to_screen_(false), |
| + was_screen_space_transform_animating_(false), |
| needs_post_commit_initialization_(true), |
| should_update_tile_priorities_(false) { |
| layer_tree_impl()->RegisterPictureLayerImpl(this); |
| @@ -386,8 +386,8 @@ void PictureLayerImpl::AppendQuads(QuadSink* quad_sink, |
| CleanUpTilingsOnActiveLayer(seen_tilings); |
| } |
| -void PictureLayerImpl::UpdateTilePriorities() { |
| - TRACE_EVENT0("cc", "PictureLayerImpl::UpdateTilePriorities"); |
| +void PictureLayerImpl::UpdateTiles() { |
| + TRACE_EVENT0("cc", "PictureLayerImpl::UpdateTiles"); |
| DoPostCommitInitializationIfNeeded(); |
| @@ -406,16 +406,36 @@ void PictureLayerImpl::UpdateTilePriorities() { |
| return; |
| } |
| + UpdateIdealScales(); |
| + |
| + DCHECK(tilings_->num_tilings() > 0 || raster_contents_scale_ == 0.f) |
| + << "A layer with no tilings shouldn't have valid raster scales"; |
| + if (!raster_contents_scale_ || ShouldAdjustRasterScale()) { |
| + RecalculateRasterScales(); |
| + AddTilingsForRasterScale(); |
| + } |
| + |
| + DCHECK(raster_page_scale_); |
| + DCHECK(raster_device_scale_); |
| + DCHECK(raster_source_scale_); |
| + DCHECK(raster_contents_scale_); |
| + DCHECK(low_res_raster_contents_scale_); |
| + |
| + was_screen_space_transform_animating_ = |
| + draw_properties().screen_space_transform_is_animating; |
| + |
| // TODO(sohanjg): Avoid needlessly update priorities when syncing to a |
| // non-updated tree which will then be updated immediately afterwards. |
| should_update_tile_priorities_ = true; |
| - UpdateIdealScales(); |
| - ManageTilings(draw_properties().screen_space_transform_is_animating, |
| - draw_properties().maximum_animation_contents_scale); |
| + UpdateTilePriorities(); |
| - if (!tilings_->num_tilings()) |
| - return; |
| + if (layer_tree_impl()->IsPendingTree()) |
| + MarkVisibleResourcesAsRequired(); |
| +} |
| + |
| +void PictureLayerImpl::UpdateTilePriorities() { |
| + TRACE_EVENT0("cc", "PictureLayerImpl::UpdateTilePriorities"); |
| double current_frame_time_in_seconds = |
| (layer_tree_impl()->CurrentFrameTimeTicks() - |
| @@ -450,15 +470,14 @@ void PictureLayerImpl::UpdateTilePriorities() { |
| visible_rect_in_content_space, 1.f / contents_scale_x()); |
| WhichTree tree = |
| layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE; |
| - // TODO(sohanjg): Passing MaximumContentsScale as layer contents scale |
| - // in UpdateTilePriorities is wrong and should be ideal contents scale. |
| - tilings_->UpdateTilePriorities(tree, |
| - visible_layer_rect, |
| - MaximumTilingContentsScale(), |
| - current_frame_time_in_seconds); |
| - |
| - if (layer_tree_impl()->IsPendingTree()) |
| - MarkVisibleResourcesAsRequired(); |
| + for (size_t i = 0; i < tilings_->num_tilings(); ++i) { |
| + // TODO(sohanjg): Passing MaximumContentsScale as layer contents scale |
| + // in UpdateTilePriorities is wrong and should be ideal contents scale. |
| + tilings_->tiling_at(i)->UpdateTilePriorities(tree, |
| + visible_layer_rect, |
| + MaximumTilingContentsScale(), |
| + current_frame_time_in_seconds); |
| + } |
| // Tile priorities were modified. |
| layer_tree_impl()->DidModifyTilePriorities(); |
| @@ -741,7 +760,6 @@ ResourceProvider::ResourceId PictureLayerImpl::ContentsResourceId() const { |
| void PictureLayerImpl::MarkVisibleResourcesAsRequired() const { |
| DCHECK(layer_tree_impl()->IsPendingTree()); |
| - DCHECK(!layer_tree_impl()->needs_update_draw_properties()); |
|
enne (OOO)
2014/06/19 17:38:49
Why does this go away?
danakj
2014/06/19 17:43:37
This is guaranteed by the callstack now, we only c
|
| DCHECK(ideal_contents_scale_); |
| DCHECK_GT(tilings_->num_tilings(), 0u); |
| @@ -955,38 +973,7 @@ inline float PositiveRatio(float float1, float float2) { |
| } // namespace |
| -void PictureLayerImpl::ManageTilings(bool animating_transform_to_screen, |
| - float maximum_animation_contents_scale) { |
| - DCHECK(ideal_contents_scale_); |
| - DCHECK(ideal_page_scale_); |
| - DCHECK(ideal_device_scale_); |
| - DCHECK(ideal_source_scale_); |
| - DCHECK(CanHaveTilings()); |
| - DCHECK(!needs_post_commit_initialization_); |
| - |
| - bool change_target_tiling = |
| - raster_page_scale_ == 0.f || |
| - raster_device_scale_ == 0.f || |
| - raster_source_scale_ == 0.f || |
| - raster_contents_scale_ == 0.f || |
| - low_res_raster_contents_scale_ == 0.f || |
| - ShouldAdjustRasterScale(animating_transform_to_screen); |
| - |
| - if (tilings_->num_tilings() == 0) { |
| - DCHECK(change_target_tiling) |
| - << "A layer with no tilings shouldn't have valid raster scales"; |
| - } |
| - |
| - if (change_target_tiling) { |
| - RecalculateRasterScales(animating_transform_to_screen, |
| - maximum_animation_contents_scale); |
| - } |
| - |
| - was_animating_transform_to_screen_ = animating_transform_to_screen; |
| - |
| - if (!change_target_tiling) |
| - return; |
| - |
| +void PictureLayerImpl::AddTilingsForRasterScale() { |
| PictureLayerTiling* high_res = NULL; |
| PictureLayerTiling* low_res = NULL; |
| @@ -1015,7 +1002,8 @@ void PictureLayerImpl::ManageTilings(bool animating_transform_to_screen, |
| // tiling during a pinch or a CSS animation. |
| bool is_pinching = layer_tree_impl()->PinchGestureActive(); |
| if (layer_tree_impl()->create_low_res_tiling() && !is_pinching && |
| - !animating_transform_to_screen && !low_res && low_res != high_res) |
| + !draw_properties().screen_space_transform_is_animating && !low_res && |
| + low_res != high_res) |
| low_res = AddTiling(low_res_raster_contents_scale_); |
| // Set low-res if we have one. |
| @@ -1030,9 +1018,9 @@ void PictureLayerImpl::ManageTilings(bool animating_transform_to_screen, |
| SanityCheckTilingState(); |
| } |
| -bool PictureLayerImpl::ShouldAdjustRasterScale( |
| - bool animating_transform_to_screen) const { |
| - if (was_animating_transform_to_screen_ != animating_transform_to_screen) |
| +bool PictureLayerImpl::ShouldAdjustRasterScale() const { |
| + if (was_screen_space_transform_animating_ != |
| + draw_properties().screen_space_transform_is_animating) |
| return true; |
| bool is_pinching = layer_tree_impl()->PinchGestureActive(); |
| @@ -1058,7 +1046,8 @@ bool PictureLayerImpl::ShouldAdjustRasterScale( |
| // When the source scale changes we want to match it, but not when animating |
| // or when we've fixed the scale in place. |
| - if (!animating_transform_to_screen && !raster_source_scale_is_fixed_ && |
| + if (!draw_properties().screen_space_transform_is_animating && |
| + !raster_source_scale_is_fixed_ && |
| raster_source_scale_ != ideal_source_scale_) |
| return true; |
| @@ -1080,9 +1069,7 @@ float PictureLayerImpl::SnappedContentsScale(float scale) { |
| return snapped_contents_scale; |
| } |
| -void PictureLayerImpl::RecalculateRasterScales( |
| - bool animating_transform_to_screen, |
| - float maximum_animation_contents_scale) { |
| +void PictureLayerImpl::RecalculateRasterScales() { |
| float old_raster_contents_scale = raster_contents_scale_; |
| float old_raster_page_scale = raster_page_scale_; |
| float old_raster_source_scale = raster_source_scale_; |
| @@ -1095,8 +1082,9 @@ void PictureLayerImpl::RecalculateRasterScales( |
| // If we're not animating, or leaving an animation, and the |
| // ideal_source_scale_ changes, then things are unpredictable, and we fix |
| // the raster_source_scale_ in place. |
| - if (old_raster_source_scale && !animating_transform_to_screen && |
| - !was_animating_transform_to_screen_ && |
| + if (old_raster_source_scale && |
| + !draw_properties().screen_space_transform_is_animating && |
| + !was_screen_space_transform_animating_ && |
| old_raster_source_scale != ideal_source_scale_) |
| raster_source_scale_is_fixed_ = true; |
| @@ -1132,10 +1120,11 @@ void PictureLayerImpl::RecalculateRasterScales( |
| // Since we're not re-rasterizing during animation, rasterize at the maximum |
| // scale that will occur during the animation, if the maximum scale is |
| // known. |
| - if (animating_transform_to_screen) { |
| - if (maximum_animation_contents_scale > 0.f) { |
| + if (draw_properties().screen_space_transform_is_animating) { |
| + if (draw_properties().maximum_animation_contents_scale > 0.f) { |
| raster_contents_scale_ = |
| - std::max(raster_contents_scale_, maximum_animation_contents_scale); |
| + std::max(raster_contents_scale_, |
| + draw_properties().maximum_animation_contents_scale); |
| } else { |
| raster_contents_scale_ = |
| std::max(raster_contents_scale_, |