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

Side by Side Diff: cc/layers/picture_layer_impl.cc

Issue 374653003: Track occlusion per tree on Tile. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address feedback 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | cc/layers/picture_layer_impl_unittest.cc » ('j') | cc/resources/tile.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 865 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 contents_scale, 876 contents_scale,
877 rect); 877 rect);
878 iter; 878 iter;
879 ++iter) { 879 ++iter) {
880 Tile* tile = *iter; 880 Tile* tile = *iter;
881 // A null tile (i.e. missing recording) can just be skipped. 881 // A null tile (i.e. missing recording) can just be skipped.
882 if (!tile) 882 if (!tile)
883 continue; 883 continue;
884 884
885 // If the tile is occluded, don't mark it as required for activation. 885 // If the tile is occluded, don't mark it as required for activation.
886 if (tile->is_occluded()) 886 if (tile->is_occluded(PENDING_TREE))
887 continue; 887 continue;
888 888
889 // If the missing region doesn't cover it, this tile is fully 889 // If the missing region doesn't cover it, this tile is fully
890 // covered by acceptable tiles at other scales. 890 // covered by acceptable tiles at other scales.
891 if (!missing_region.Intersects(iter.geometry_rect())) 891 if (!missing_region.Intersects(iter.geometry_rect()))
892 continue; 892 continue;
893 893
894 // If the twin tile doesn't exist (i.e. missing recording or so far away 894 // If the twin tile doesn't exist (i.e. missing recording or so far away
895 // that it is outside the visible tile rect) or this tile is shared between 895 // that it is outside the visible tile rect) or this tile is shared between
896 // with the twin, then this tile isn't required to prevent flashing. 896 // with the twin, then this tile isn't required to prevent flashing.
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 1454
1455 stages_[2].iterator_type = HIGH_RES; 1455 stages_[2].iterator_type = HIGH_RES;
1456 stages_[2].tile_type = TilePriority::SOON; 1456 stages_[2].tile_type = TilePriority::SOON;
1457 1457
1458 stages_[3].iterator_type = HIGH_RES; 1458 stages_[3].iterator_type = HIGH_RES;
1459 stages_[3].tile_type = TilePriority::EVENTUALLY; 1459 stages_[3].tile_type = TilePriority::EVENTUALLY;
1460 1460
1461 IteratorType index = stages_[current_stage_].iterator_type; 1461 IteratorType index = stages_[current_stage_].iterator_type;
1462 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; 1462 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type;
1463 if (!iterators_[index] || iterators_[index].get_type() != tile_type || 1463 if (!iterators_[index] || iterators_[index].get_type() != tile_type ||
1464 (*iterators_[index])->is_occluded()) 1464 (*iterators_[index])->is_occluded(tree))
1465 ++(*this); 1465 ++(*this);
1466 } 1466 }
1467 1467
1468 PictureLayerImpl::LayerRasterTileIterator::~LayerRasterTileIterator() {} 1468 PictureLayerImpl::LayerRasterTileIterator::~LayerRasterTileIterator() {}
1469 1469
1470 PictureLayerImpl::LayerRasterTileIterator::operator bool() const { 1470 PictureLayerImpl::LayerRasterTileIterator::operator bool() const {
1471 return layer_ && static_cast<size_t>(current_stage_) < arraysize(stages_); 1471 return layer_ && static_cast<size_t>(current_stage_) < arraysize(stages_);
1472 } 1472 }
1473 1473
1474 PictureLayerImpl::LayerRasterTileIterator& 1474 PictureLayerImpl::LayerRasterTileIterator&
1475 PictureLayerImpl::LayerRasterTileIterator:: 1475 PictureLayerImpl::LayerRasterTileIterator::
1476 operator++() { 1476 operator++() {
1477 WhichTree tree =
1478 layer_->layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE;
1479
1477 IteratorType index = stages_[current_stage_].iterator_type; 1480 IteratorType index = stages_[current_stage_].iterator_type;
1478 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; 1481 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type;
1479 1482
1480 // First advance the iterator. 1483 // First advance the iterator.
1481 if (iterators_[index]) 1484 if (iterators_[index])
1482 ++iterators_[index]; 1485 ++iterators_[index];
1483 1486
1484 while (iterators_[index] && iterators_[index].get_type() == tile_type && 1487 while (iterators_[index] && iterators_[index].get_type() == tile_type &&
1485 (*iterators_[index])->is_occluded()) 1488 (*iterators_[index])->is_occluded(tree))
1486 ++iterators_[index]; 1489 ++iterators_[index];
1487 1490
1488 if (iterators_[index] && iterators_[index].get_type() == tile_type) 1491 if (iterators_[index] && iterators_[index].get_type() == tile_type)
1489 return *this; 1492 return *this;
1490 1493
1491 // Next, advance the stage. 1494 // Next, advance the stage.
1492 int stage_count = arraysize(stages_); 1495 int stage_count = arraysize(stages_);
1493 ++current_stage_; 1496 ++current_stage_;
1494 while (current_stage_ < stage_count) { 1497 while (current_stage_ < stage_count) {
1495 index = stages_[current_stage_].iterator_type; 1498 index = stages_[current_stage_].iterator_type;
1496 tile_type = stages_[current_stage_].tile_type; 1499 tile_type = stages_[current_stage_].tile_type;
1497 1500
1498 if (iterators_[index] && iterators_[index].get_type() == tile_type && 1501 if (iterators_[index] && iterators_[index].get_type() == tile_type &&
1499 !(*iterators_[index])->is_occluded()) 1502 !(*iterators_[index])->is_occluded(tree))
1500 break; 1503 break;
1501 ++current_stage_; 1504 ++current_stage_;
1502 } 1505 }
1503 return *this; 1506 return *this;
1504 } 1507 }
1505 1508
1506 Tile* PictureLayerImpl::LayerRasterTileIterator::operator*() { 1509 Tile* PictureLayerImpl::LayerRasterTileIterator::operator*() {
1507 DCHECK(*this); 1510 DCHECK(*this);
1508 1511
1509 IteratorType index = stages_[current_stage_].iterator_type; 1512 IteratorType index = stages_[current_stage_].iterator_type;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1634 return iterator_index_ < iterators_.size(); 1637 return iterator_index_ < iterators_.size();
1635 } 1638 }
1636 1639
1637 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType( 1640 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType(
1638 PictureLayerTiling::TilingEvictionTileIterator* it) const { 1641 PictureLayerTiling::TilingEvictionTileIterator* it) const {
1639 return it->get_type() == iteration_stage_ && 1642 return it->get_type() == iteration_stage_ &&
1640 (**it)->required_for_activation() == required_for_activation_; 1643 (**it)->required_for_activation() == required_for_activation_;
1641 } 1644 }
1642 1645
1643 } // namespace cc 1646 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/layers/picture_layer_impl_unittest.cc » ('j') | cc/resources/tile.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698