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 02fb92fb735dce8d5048487eebe38ab6800c7706..f30fa88445bc4cd069c6c9a98dda61ebea1ff725 100644 |
| --- a/cc/layers/picture_layer_impl.cc |
| +++ b/cc/layers/picture_layer_impl.cc |
| @@ -399,7 +399,7 @@ void PictureLayerImpl::UpdateTiles( |
| // resourceless software draw, so don't update them. |
| if (!layer_tree_impl()->resourceless_software_draw()) { |
| visible_rect_for_tile_priority_ = visible_content_rect(); |
| - viewport_size_for_tile_priority_ = layer_tree_impl()->DrawViewportSize(); |
| + viewport_rect_for_tile_priority_ = layer_tree_impl()->TilingViewportRect(); |
| screen_space_transform_for_tile_priority_ = screen_space_transform(); |
| } |
| @@ -457,16 +457,28 @@ void PictureLayerImpl::UpdateTilePriorities( |
| if (!tiling_needs_update) |
| return; |
| - // Use visible_content_rect, unless it's empty. If it's empty, then |
| - // try to inverse project the viewport into layer space and use that. |
| + // If visible_rect_for_tile_priority_ is empty or |
| + // LayerTreeImpl::TilingViewportRect is set to be different from the device |
| + // viewport, try to inverse project the viewport into layer space and use |
| + // that. Otherwise just use visible_rect_for_tile_priority_ |
| gfx::Rect visible_rect_in_content_space = visible_rect_for_tile_priority_; |
| - if (visible_rect_in_content_space.IsEmpty()) { |
| - gfx::Transform screen_to_layer(gfx::Transform::kSkipInitialization); |
| - if (screen_space_transform_for_tile_priority_.GetInverse( |
| - &screen_to_layer)) { |
| + if (visible_rect_in_content_space.IsEmpty() || |
| + layer_tree_impl()->DrawViewportSize() != |
| + layer_tree_impl()->TilingViewportRect().size()) { |
| + gfx::Transform view_to_layer(gfx::Transform::kSkipInitialization); |
| + gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization); |
| + if (screen_space_transform_for_tile_priority_.GetInverse(&view_to_layer) && |
| + layer_tree_impl()->TilingTransform().GetInverse(&screen_to_view)) { |
|
boliu
2014/07/16 17:25:10
I assume this should only be read when !layer_tree
hush (inactive)
2014/07/16 20:45:33
In resourceless software draw, the transform is id
|
| + // Transform the tiling viewport rect from screen to view space. |
| + gfx::Rect viewport_rect_in_view_space = |
| + gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( |
| + screen_to_view, layer_tree_impl()->TilingViewportRect())); |
| + |
| + // Transform from view space to content space. |
| visible_rect_in_content_space = |
| gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( |
| - screen_to_layer, gfx::Rect(viewport_size_for_tile_priority_))); |
| + view_to_layer, viewport_rect_in_view_space)); |
| + |
| visible_rect_in_content_space.Intersect(gfx::Rect(content_bounds())); |
| } |
| } |