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

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..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()));
}
}

Powered by Google App Engine
This is Rietveld 408576698