1 // Copyright 2014 The Chromium Authors
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 "base/memory/raw_ptr_exclusion.h"
9 #include "cc/cc_export.h"
10 #include "cc/tiles/picture_layer_tiling_set.h"
11 #include "cc/tiles/raster_tile_priority_queue.h"
12 #include "cc/tiles/tile.h"
16 // This queue only returns tiles that are required for either activation or
17 // draw, as specified by RasterTilePriorityQueue::Type passed in the
19 class CC_EXPORT TilingSetRasterQueueRequired {
21 TilingSetRasterQueueRequired(PictureLayerTilingSet* tiling_set,
22 RasterTilePriorityQueue::Type type);
23 ~TilingSetRasterQueueRequired();
25 const PrioritizedTile& Top() const;
30 // This iterator will return all tiles that are in the NOW bin on the given
31 // tiling. The queue can then use these tiles and further filter them based on
32 // whether they are required or not.
33 class TilingIterator {
36 explicit TilingIterator(PictureLayerTiling* tiling,
37 TilingData* tiling_data,
38 const gfx::Rect& rect);
41 bool done() const { return !current_tile_.tile(); }
42 const PrioritizedTile& operator*() const { return current_tile_; }
43 TilingIterator& operator++();
46 // `tiling_` and `tiling_data_` are not a raw_ptr<...> for performance
47 // reasons (based on analysis of sampling profiler data and
48 // tab_search:top100:2020).
49 RAW_PTR_EXCLUSION PictureLayerTiling* tiling_;
50 RAW_PTR_EXCLUSION TilingData* tiling_data_;
52 PrioritizedTile current_tile_;
53 TilingData::Iterator visible_iterator_;
56 bool IsTileRequired(const PrioritizedTile& prioritized_tile) const;
58 TilingIterator iterator_;
59 RasterTilePriorityQueue::Type type_;
64 #endif // CC_TILES_TILING_SET_RASTER_QUEUE_REQUIRED_H_