1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CC_TILES_TILING_SET_RASTER_QUEUE_REQUIRED_H_
6 #define CC_TILES_TILING_SET_RASTER_QUEUE_REQUIRED_H_
8 #include "cc/base/cc_export.h"
9 #include "cc/tiles/picture_layer_tiling_set.h"
10 #include "cc/tiles/raster_tile_priority_queue.h"
11 #include "cc/tiles/tile.h"
15 // This queue only returns tiles that are required for either activation or
16 // draw, as specified by RasterTilePriorityQueue::Type passed in the
18 class CC_EXPORT TilingSetRasterQueueRequired
{
20 TilingSetRasterQueueRequired(PictureLayerTilingSet
* tiling_set
,
21 RasterTilePriorityQueue::Type type
);
22 ~TilingSetRasterQueueRequired();
24 const PrioritizedTile
& Top() const;
29 // This iterator will return all tiles that are in the NOW bin on the given
30 // tiling. The queue can then use these tiles and further filter them based on
31 // whether they are required or not.
32 class TilingIterator
{
35 explicit TilingIterator(PictureLayerTiling
* tiling
,
36 TilingData
* tiling_data
,
37 const gfx::Rect
& rect
);
40 bool done() const { return !current_tile_
.tile(); }
41 const PrioritizedTile
& operator*() const { return current_tile_
; }
42 TilingIterator
& operator++();
45 PictureLayerTiling
* tiling_
;
46 TilingData
* tiling_data_
;
48 PrioritizedTile current_tile_
;
49 TilingData::Iterator visible_iterator_
;
52 bool IsTileRequired(const PrioritizedTile
& prioritized_tile
) const;
54 TilingIterator iterator_
;
55 RasterTilePriorityQueue::Type type_
;
60 #endif // CC_TILES_TILING_SET_RASTER_QUEUE_REQUIRED_H_