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

Unified Diff: cc/layers/picture_layer_impl.cc

Issue 616543004: cc: Use visible_rect_for_tile_priority_ where approriate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Offset Created 6 years, 3 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
« no previous file with comments | « cc/layers/picture_layer_impl.h ('k') | cc/layers/picture_layer_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/layers/picture_layer_impl.cc
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
index eaccbbf46ba873ebf196ad8f02c92c0a4a47db51..8a78bb1a8e2c9cce50a8837696e64e43a9f748aa 100644
--- a/cc/layers/picture_layer_impl.cc
+++ b/cc/layers/picture_layer_impl.cc
@@ -441,15 +441,22 @@ void PictureLayerImpl::AppendQuads(
CleanUpTilingsOnActiveLayer(seen_tilings);
}
-void PictureLayerImpl::UpdateTiles(
- const Occlusion& occlusion_in_content_space) {
+void PictureLayerImpl::UpdateTiles(const Occlusion& occlusion_in_content_space,
+ bool resourceless_software_draw) {
TRACE_EVENT0("cc", "PictureLayerImpl::UpdateTiles");
DCHECK_EQ(1.f, contents_scale_x());
DCHECK_EQ(1.f, contents_scale_y());
DoPostCommitInitializationIfNeeded();
- visible_rect_for_tile_priority_ = visible_content_rect();
+ // Any draw properties derived from |transform|, |viewport|, and |clip|
+ // parameters in LayerTreeHostImpl::SetExternalDrawConstraints are not valid
+ // for prioritizing tiles during resourceless software draws. This is because
+ // resourceless software draws can have wildly different transforms/viewports
+ // from regular draws.
+ if (!resourceless_software_draw) {
+ visible_rect_for_tile_priority_ = visible_content_rect();
+ }
viewport_rect_for_tile_priority_ =
layer_tree_impl()->ViewportRectForTilePriority();
screen_space_transform_for_tile_priority_ = screen_space_transform();
@@ -806,7 +813,7 @@ void PictureLayerImpl::MarkVisibleResourcesAsRequired() const {
// higher res on the active tree to a lower res on the pending tree.
// First, early out for layers with no visible content.
- if (visible_content_rect().IsEmpty())
+ if (visible_rect_for_tile_priority_.IsEmpty())
return;
// Only mark tiles inside the viewport for tile priority as required for
@@ -814,7 +821,7 @@ void PictureLayerImpl::MarkVisibleResourcesAsRequired() const {
// can be independently overridden by embedders like Android WebView with
// SetExternalDrawConstraints.
gfx::Rect rect = GetViewportForTilePriorityInContentSpace();
- rect.Intersect(visible_content_rect());
+ rect.Intersect(visible_rect_for_tile_priority_);
float min_acceptable_scale =
std::min(raster_contents_scale_, ideal_contents_scale_);
@@ -1492,16 +1499,18 @@ bool PictureLayerImpl::AllTilesRequiredForActivationAreReadyToDraw() const {
if (!tilings_)
return true;
- if (visible_content_rect().IsEmpty())
+ if (visible_rect_for_tile_priority_.IsEmpty())
return true;
+ gfx::Rect rect = GetViewportForTilePriorityInContentSpace();
+ rect.Intersect(visible_rect_for_tile_priority_);
+
for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
PictureLayerTiling* tiling = tilings_->tiling_at(i);
if (tiling->resolution() != HIGH_RESOLUTION &&
tiling->resolution() != LOW_RESOLUTION)
continue;
- gfx::Rect rect(visible_content_rect());
for (PictureLayerTiling::CoverageIterator iter(tiling, 1.f, rect); iter;
++iter) {
const Tile* tile = *iter;
« no previous file with comments | « cc/layers/picture_layer_impl.h ('k') | cc/layers/picture_layer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698