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

Side by Side 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: clean up the APIs in BVR client a little Created 6 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/layers/picture_layer_impl.h" 5 #include "cc/layers/picture_layer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 // TODO(danakj): We should always get an occlusion tracker when we are using 407 // TODO(danakj): We should always get an occlusion tracker when we are using
408 // occlusion, so update this check when we don't use a pending tree in the 408 // occlusion, so update this check when we don't use a pending tree in the
409 // browser compositor. 409 // browser compositor.
410 DCHECK(!occlusion_tracker || 410 DCHECK(!occlusion_tracker ||
411 layer_tree_impl()->settings().use_occlusion_for_tile_prioritization); 411 layer_tree_impl()->settings().use_occlusion_for_tile_prioritization);
412 412
413 // Transforms and viewport are invalid for tile management inside a 413 // Transforms and viewport are invalid for tile management inside a
414 // resourceless software draw, so don't update them. 414 // resourceless software draw, so don't update them.
415 if (!layer_tree_impl()->resourceless_software_draw()) { 415 if (!layer_tree_impl()->resourceless_software_draw()) {
416 visible_rect_for_tile_priority_ = visible_content_rect(); 416 visible_rect_for_tile_priority_ = visible_content_rect();
417 viewport_size_for_tile_priority_ = layer_tree_impl()->DrawViewportSize(); 417 viewport_rect_for_tile_priority_ =
418 layer_tree_impl()->ViewportRectForTilePriority();
418 screen_space_transform_for_tile_priority_ = screen_space_transform(); 419 screen_space_transform_for_tile_priority_ = screen_space_transform();
419 } 420 }
420 421
421 if (!CanHaveTilings()) { 422 if (!CanHaveTilings()) {
422 ideal_page_scale_ = 0.f; 423 ideal_page_scale_ = 0.f;
423 ideal_device_scale_ = 0.f; 424 ideal_device_scale_ = 0.f;
424 ideal_contents_scale_ = 0.f; 425 ideal_contents_scale_ = 0.f;
425 ideal_source_scale_ = 0.f; 426 ideal_source_scale_ = 0.f;
426 SanityCheckTilingState(); 427 SanityCheckTilingState();
427 return; 428 return;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { 466 for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
466 if (tilings_->tiling_at(i)->NeedsUpdateForFrameAtTime( 467 if (tilings_->tiling_at(i)->NeedsUpdateForFrameAtTime(
467 current_frame_time_in_seconds)) { 468 current_frame_time_in_seconds)) {
468 tiling_needs_update = true; 469 tiling_needs_update = true;
469 break; 470 break;
470 } 471 }
471 } 472 }
472 if (!tiling_needs_update) 473 if (!tiling_needs_update)
473 return; 474 return;
474 475
475 // Use visible_content_rect, unless it's empty. If it's empty, then 476 // If visible_rect_for_tile_priority_ is empty or
476 // try to inverse project the viewport into layer space and use that. 477 // viewport_rect_for_tile_priority_ is set to be different from the device
478 // viewport, try to inverse project the viewport into layer space and use
479 // that. Otherwise just use visible_rect_for_tile_priority_
477 gfx::Rect visible_rect_in_content_space = visible_rect_for_tile_priority_; 480 gfx::Rect visible_rect_in_content_space = visible_rect_for_tile_priority_;
478 if (visible_rect_in_content_space.IsEmpty()) { 481 if (visible_rect_in_content_space.IsEmpty() ||
479 gfx::Transform screen_to_layer(gfx::Transform::kSkipInitialization); 482 layer_tree_impl()->DeviceViewport() != viewport_rect_for_tile_priority_) {
480 if (screen_space_transform_for_tile_priority_.GetInverse( 483 gfx::Transform view_to_layer(gfx::Transform::kSkipInitialization);
481 &screen_to_layer)) { 484
485 if (screen_space_transform_for_tile_priority_.GetInverse(&view_to_layer)) {
486 // Transform from view space to content space.
482 visible_rect_in_content_space = 487 visible_rect_in_content_space =
483 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( 488 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
484 screen_to_layer, gfx::Rect(viewport_size_for_tile_priority_))); 489 view_to_layer, viewport_rect_for_tile_priority_));
490
485 visible_rect_in_content_space.Intersect(gfx::Rect(content_bounds())); 491 visible_rect_in_content_space.Intersect(gfx::Rect(content_bounds()));
486 } 492 }
487 } 493 }
488 494
489 gfx::Rect visible_layer_rect = gfx::ScaleToEnclosingRect( 495 gfx::Rect visible_layer_rect = gfx::ScaleToEnclosingRect(
490 visible_rect_in_content_space, 1.f / contents_scale_x()); 496 visible_rect_in_content_space, 1.f / contents_scale_x());
491 WhichTree tree = 497 WhichTree tree =
492 layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE; 498 layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE;
493 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { 499 for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
494 tilings_->tiling_at(i)->UpdateTilePriorities(tree, 500 tilings_->tiling_at(i)->UpdateTilePriorities(tree,
(...skipping 1186 matching lines...) Expand 10 before | Expand all | Expand 10 after
1681 return iterator_index_ < iterators_.size(); 1687 return iterator_index_ < iterators_.size();
1682 } 1688 }
1683 1689
1684 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType( 1690 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType(
1685 PictureLayerTiling::TilingEvictionTileIterator* it) const { 1691 PictureLayerTiling::TilingEvictionTileIterator* it) const {
1686 return it->get_type() == iteration_stage_ && 1692 return it->get_type() == iteration_stage_ &&
1687 (**it)->required_for_activation() == required_for_activation_; 1693 (**it)->required_for_activation() == required_for_activation_;
1688 } 1694 }
1689 1695
1690 } // namespace cc 1696 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698