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..cc975bf74373c9b5575ca965d0f19ef65ada4a47 100644 |
--- a/cc/layers/picture_layer_impl.cc |
+++ b/cc/layers/picture_layer_impl.cc |
@@ -198,6 +198,8 @@ void PictureLayerImpl::AppendQuads( |
render_pass, scaled_content_bounds, shared_quad_state, append_quads_data); |
if (ShowDebugBorders()) { |
+ SkColor color; |
enne (OOO)
2014/07/24 19:25:19
?
hush (inactive)
2014/07/24 23:29:37
This is just a minor performance improvement. Don'
enne (OOO)
2014/07/24 23:34:29
There's not performance improvement here. Neither
hush (inactive)
2014/07/24 23:48:07
Okay. I will just revert this part.
On 2014/07/24
|
+ float width; |
for (PictureLayerTilingSet::CoverageIterator iter( |
tilings_.get(), |
max_contents_scale, |
@@ -205,8 +207,6 @@ void PictureLayerImpl::AppendQuads( |
ideal_contents_scale_); |
iter; |
++iter) { |
- SkColor color; |
- float width; |
if (*iter && iter->IsReadyToDraw()) { |
ManagedTileState::TileVersion::Mode mode = |
iter->GetTileVersionForDrawing().mode(); |
@@ -399,8 +399,10 @@ 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()->ExternalTilingRect(); |
screen_space_transform_for_tile_priority_ = screen_space_transform(); |
+ screen_space_transform_for_tile_priority_.ConcatTransform( |
enne (OOO)
2014/07/24 19:25:19
It seems a little bit like this viewport_rect_for_
hush (inactive)
2014/07/24 23:29:37
Yeah right. I will do this based on your other com
|
+ layer_tree_impl()->ExternalTilingTransform()); |
} |
if (!CanHaveTilings()) { |
@@ -457,16 +459,23 @@ 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::ExternalTilingRect 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()) { |
+ if (visible_rect_in_content_space.IsEmpty() || |
+ layer_tree_impl()->DeviceViewport() != viewport_rect_for_tile_priority_ || |
+ !layer_tree_impl()->ExternalTilingTransform().IsIdentity()) { |
gfx::Transform screen_to_layer(gfx::Transform::kSkipInitialization); |
+ |
if (screen_space_transform_for_tile_priority_.GetInverse( |
&screen_to_layer)) { |
+ // Transform from screen space to content space. |
visible_rect_in_content_space = |
gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( |
- screen_to_layer, gfx::Rect(viewport_size_for_tile_priority_))); |
+ screen_to_layer, viewport_rect_for_tile_priority_)); |
+ |
visible_rect_in_content_space.Intersect(gfx::Rect(content_bounds())); |
} |
} |