[M108 Migration][VD] Avoid pending frame counter becoming negative
[platform/framework/web/chromium-efl.git] / cc / tiles / tiling_set_raster_queue_required.h
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.
4
5 #ifndef CC_TILES_TILING_SET_RASTER_QUEUE_REQUIRED_H_
6 #define CC_TILES_TILING_SET_RASTER_QUEUE_REQUIRED_H_
7
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"
13
14 namespace cc {
15
16 // This queue only returns tiles that are required for either activation or
17 // draw, as specified by RasterTilePriorityQueue::Type passed in the
18 // constructor.
19 class CC_EXPORT TilingSetRasterQueueRequired {
20  public:
21   TilingSetRasterQueueRequired(PictureLayerTilingSet* tiling_set,
22                                RasterTilePriorityQueue::Type type);
23   ~TilingSetRasterQueueRequired();
24
25   const PrioritizedTile& Top() const;
26   void Pop();
27   bool IsEmpty() const;
28
29  private:
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 {
34    public:
35     TilingIterator();
36     explicit TilingIterator(PictureLayerTiling* tiling,
37                             TilingData* tiling_data,
38                             const gfx::Rect& rect);
39     ~TilingIterator();
40
41     bool done() const { return !current_tile_.tile(); }
42     const PrioritizedTile& operator*() const { return current_tile_; }
43     TilingIterator& operator++();
44
45    private:
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_;
51
52     PrioritizedTile current_tile_;
53     TilingData::Iterator visible_iterator_;
54   };
55
56   bool IsTileRequired(const PrioritizedTile& prioritized_tile) const;
57
58   TilingIterator iterator_;
59   RasterTilePriorityQueue::Type type_;
60 };
61
62 }  // namespace cc
63
64 #endif  // CC_TILES_TILING_SET_RASTER_QUEUE_REQUIRED_H_