Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2682)

Unified Diff: cc/layers/picture_layer_impl.cc

Issue 394113002: Tiling priorities in Android Webview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
aelias_OOO_until_Jul13 2014/07/16 00:32:56 Instead of the double-ProjectClippedRect below, wo
hush (inactive) 2014/07/16 20:45:32 That works. Done. On 2014/07/16 00:32:56, aelias
}
@@ -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() ||
aelias_OOO_until_Jul13 2014/07/16 00:32:56 || !layer_tree_impl()->TilingTransform().IsIdentit
hush (inactive) 2014/07/16 20:45:32 Done.
+ 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)) {
+ // 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()));
}
}

Powered by Google App Engine
This is Rietveld 408576698