Index: cc/resources/tiling_set_raster_queue_required.cc |
diff --git a/cc/resources/tiling_set_raster_queue_required.cc b/cc/resources/tiling_set_raster_queue_required.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..035509653fc87e3d468504db367a1a3d2d6b55fb |
--- /dev/null |
+++ b/cc/resources/tiling_set_raster_queue_required.cc |
@@ -0,0 +1,61 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "cc/resources/tiling_set_raster_queue_required.h" |
+ |
+namespace cc { |
+ |
+TilingSetRasterQueueRequired::TilingSetRasterQueueRequired( |
+ PictureLayerTilingSet* tiling_set, |
+ RasterTilePriorityQueue::Type type) |
+ : type_(type) { |
+ DCHECK(type != RasterTilePriorityQueue::Type::ALL); |
+ DCHECK(tiling_set); |
+ |
+ PictureLayerTiling* tiling = |
+ tiling_set->FindTilingWithResolution(HIGH_RESOLUTION); |
+ DCHECK(tiling); |
+ iterator_ = PictureLayerTiling::TilingRasterTileIterator(tiling); |
+ while (iterator_ && iterator_.get_type() == TilePriority::NOW) { |
+ if (IsTileRequired(*iterator_)) |
+ break; |
+ ++iterator_; |
+ } |
+} |
+ |
+TilingSetRasterQueueRequired::~TilingSetRasterQueueRequired() { |
+} |
+ |
+bool TilingSetRasterQueueRequired::IsEmpty() const { |
+ return !iterator_ || iterator_.get_type() != TilePriority::NOW; |
+} |
+ |
+void TilingSetRasterQueueRequired::Pop() { |
+ DCHECK(!IsEmpty()); |
+ ++iterator_; |
+ while (iterator_ && iterator_.get_type() == TilePriority::NOW) { |
+ if (IsTileRequired(*iterator_)) |
+ break; |
+ ++iterator_; |
+ } |
+} |
+ |
+Tile* TilingSetRasterQueueRequired::Top() { |
+ DCHECK(!IsEmpty()); |
+ return *iterator_; |
+} |
+ |
+const Tile* TilingSetRasterQueueRequired::Top() const { |
+ DCHECK(!IsEmpty()); |
+ return *iterator_; |
+} |
+ |
+bool TilingSetRasterQueueRequired::IsTileRequired(const Tile* tile) const { |
+ return (type_ == RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION && |
+ tile->required_for_activation()) || |
+ (type_ == RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW && |
+ tile->required_for_draw()); |
+} |
+ |
+} // namespace cc |