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

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

Issue 343463004: Move occlusion info to TilePriority. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 6 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') | no next file with comments »
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 875 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 contents_scale, 886 contents_scale,
887 rect); 887 rect);
888 iter; 888 iter;
889 ++iter) { 889 ++iter) {
890 Tile* tile = *iter; 890 Tile* tile = *iter;
891 // A null tile (i.e. missing recording) can just be skipped. 891 // A null tile (i.e. missing recording) can just be skipped.
892 if (!tile) 892 if (!tile)
893 continue; 893 continue;
894 894
895 // If the tile is occluded, don't mark it as required for activation. 895 // If the tile is occluded, don't mark it as required for activation.
896 if (tile->is_occluded()) 896 WhichTree tree =
897 layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE;
898 if (tile->priority(tree).is_occluded)
897 continue; 899 continue;
898 900
899 // If the missing region doesn't cover it, this tile is fully 901 // If the missing region doesn't cover it, this tile is fully
900 // covered by acceptable tiles at other scales. 902 // covered by acceptable tiles at other scales.
901 if (!missing_region.Intersects(iter.geometry_rect())) 903 if (!missing_region.Intersects(iter.geometry_rect()))
902 continue; 904 continue;
903 905
904 // If the twin tile doesn't exist (i.e. missing recording or so far away 906 // If the twin tile doesn't exist (i.e. missing recording or so far away
905 // that it is outside the visible tile rect) or this tile is shared between 907 // that it is outside the visible tile rect) or this tile is shared between
906 // with the twin, then this tile isn't required to prevent flashing. 908 // with the twin, then this tile isn't required to prevent flashing.
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
1464 1466
1465 stages_[2].iterator_type = HIGH_RES; 1467 stages_[2].iterator_type = HIGH_RES;
1466 stages_[2].tile_type = TilePriority::SOON; 1468 stages_[2].tile_type = TilePriority::SOON;
1467 1469
1468 stages_[3].iterator_type = HIGH_RES; 1470 stages_[3].iterator_type = HIGH_RES;
1469 stages_[3].tile_type = TilePriority::EVENTUALLY; 1471 stages_[3].tile_type = TilePriority::EVENTUALLY;
1470 1472
1471 IteratorType index = stages_[current_stage_].iterator_type; 1473 IteratorType index = stages_[current_stage_].iterator_type;
1472 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; 1474 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type;
1473 if (!iterators_[index] || iterators_[index].get_type() != tile_type || 1475 if (!iterators_[index] || iterators_[index].get_type() != tile_type ||
1474 (*iterators_[index])->is_occluded()) 1476 (*iterators_[index])->priority(tree).is_occluded)
1475 ++(*this); 1477 ++(*this);
1476 } 1478 }
1477 1479
1478 PictureLayerImpl::LayerRasterTileIterator::~LayerRasterTileIterator() {} 1480 PictureLayerImpl::LayerRasterTileIterator::~LayerRasterTileIterator() {}
1479 1481
1480 PictureLayerImpl::LayerRasterTileIterator::operator bool() const { 1482 PictureLayerImpl::LayerRasterTileIterator::operator bool() const {
1481 return layer_ && static_cast<size_t>(current_stage_) < arraysize(stages_); 1483 return layer_ && static_cast<size_t>(current_stage_) < arraysize(stages_);
1482 } 1484 }
1483 1485
1484 PictureLayerImpl::LayerRasterTileIterator& 1486 PictureLayerImpl::LayerRasterTileIterator&
1485 PictureLayerImpl::LayerRasterTileIterator:: 1487 PictureLayerImpl::LayerRasterTileIterator::
1486 operator++() { 1488 operator++() {
1489 WhichTree tree =
1490 layer_->layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE;
1491
1487 IteratorType index = stages_[current_stage_].iterator_type; 1492 IteratorType index = stages_[current_stage_].iterator_type;
1488 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; 1493 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type;
1489 1494
1490 // First advance the iterator. 1495 // First advance the iterator.
1491 if (iterators_[index]) 1496 if (iterators_[index])
1492 ++iterators_[index]; 1497 ++iterators_[index];
1493 1498
1494 while (iterators_[index] && iterators_[index].get_type() == tile_type && 1499 while (iterators_[index] && iterators_[index].get_type() == tile_type &&
1495 (*iterators_[index])->is_occluded()) 1500 (*iterators_[index])->priority(tree).is_occluded)
1496 ++iterators_[index]; 1501 ++iterators_[index];
1497 1502
1498 if (iterators_[index] && iterators_[index].get_type() == tile_type) 1503 if (iterators_[index] && iterators_[index].get_type() == tile_type)
1499 return *this; 1504 return *this;
1500 1505
1501 // Next, advance the stage. 1506 // Next, advance the stage.
1502 int stage_count = arraysize(stages_); 1507 int stage_count = arraysize(stages_);
1503 ++current_stage_; 1508 ++current_stage_;
1504 while (current_stage_ < stage_count) { 1509 while (current_stage_ < stage_count) {
1505 index = stages_[current_stage_].iterator_type; 1510 index = stages_[current_stage_].iterator_type;
1506 tile_type = stages_[current_stage_].tile_type; 1511 tile_type = stages_[current_stage_].tile_type;
1507 1512
1508 if (iterators_[index] && iterators_[index].get_type() == tile_type && 1513 if (iterators_[index] && iterators_[index].get_type() == tile_type &&
1509 !(*iterators_[index])->is_occluded()) 1514 !(*iterators_[index])->priority(tree).is_occluded)
1510 break; 1515 break;
1511 ++current_stage_; 1516 ++current_stage_;
1512 } 1517 }
1513 return *this; 1518 return *this;
1514 } 1519 }
1515 1520
1516 Tile* PictureLayerImpl::LayerRasterTileIterator::operator*() { 1521 Tile* PictureLayerImpl::LayerRasterTileIterator::operator*() {
1517 DCHECK(*this); 1522 DCHECK(*this);
1518 1523
1519 IteratorType index = stages_[current_stage_].iterator_type; 1524 IteratorType index = stages_[current_stage_].iterator_type;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1644 return iterator_index_ < iterators_.size(); 1649 return iterator_index_ < iterators_.size();
1645 } 1650 }
1646 1651
1647 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType( 1652 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType(
1648 PictureLayerTiling::TilingEvictionTileIterator* it) const { 1653 PictureLayerTiling::TilingEvictionTileIterator* it) const {
1649 return it->get_type() == iteration_stage_ && 1654 return it->get_type() == iteration_stage_ &&
1650 (**it)->required_for_activation() == required_for_activation_; 1655 (**it)->required_for_activation() == required_for_activation_;
1651 } 1656 }
1652 1657
1653 } // namespace cc 1658 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/layers/picture_layer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698