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

Side by Side Diff: cc/tiles/tiling_set_raster_queue_all.h

Issue 2067213002: cc: Implement tile iteration order based on pyramid sequence. [old] Base URL: https://chromium.googlesource.com/chromium/src.git@tiling_data_fix
Patch Set: rebase -> used for smoothness tests Created 3 years, 10 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
« no previous file with comments | « cc/tiles/tiling_set_eviction_queue.cc ('k') | cc/tiles/tiling_set_raster_queue_all.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 2014 The Chromium Authors. All rights reserved. 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 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 #ifndef CC_TILES_TILING_SET_RASTER_QUEUE_ALL_H_ 5 #ifndef CC_TILES_TILING_SET_RASTER_QUEUE_ALL_H_
6 #define CC_TILES_TILING_SET_RASTER_QUEUE_ALL_H_ 6 #define CC_TILES_TILING_SET_RASTER_QUEUE_ALL_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include "base/containers/stack_container.h" 10 #include "base/containers/stack_container.h"
(...skipping 20 matching lines...) Expand all
31 31
32 private: 32 private:
33 // Helper base class for individual region iterators. 33 // Helper base class for individual region iterators.
34 class OnePriorityRectIterator { 34 class OnePriorityRectIterator {
35 public: 35 public:
36 OnePriorityRectIterator(); 36 OnePriorityRectIterator();
37 OnePriorityRectIterator( 37 OnePriorityRectIterator(
38 PictureLayerTiling* tiling, 38 PictureLayerTiling* tiling,
39 TilingData* tiling_data, 39 TilingData* tiling_data,
40 PictureLayerTiling::PriorityRectType priority_rect_type); 40 PictureLayerTiling::PriorityRectType priority_rect_type);
41 OnePriorityRectIterator(const OnePriorityRectIterator& other) = default;
42 OnePriorityRectIterator(OnePriorityRectIterator&& other) = default;
43
44 OnePriorityRectIterator& operator=(const OnePriorityRectIterator& other) =
45 default;
46 OnePriorityRectIterator& operator=(OnePriorityRectIterator&& other) =
47 default;
41 48
42 bool done() const { return !current_tile_.tile(); } 49 bool done() const { return !current_tile_.tile(); }
43 const PrioritizedTile& operator*() const { return current_tile_; } 50 const PrioritizedTile& operator*() const { return current_tile_; }
44 51
45 protected: 52 protected:
46 ~OnePriorityRectIterator() = default; 53 ~OnePriorityRectIterator() = default;
47 bool TileNeedsRaster(const Tile* tile) const { 54 bool TileNeedsRaster(const Tile* tile) const {
48 return tile->draw_info().NeedsRaster() && !tiling_->IsTileOccluded(tile); 55 return tile->draw_info().NeedsRaster() && !tiling_->IsTileOccluded(tile);
49 } 56 }
50 57
51 template <typename TilingIteratorType> 58 template <typename TilingIteratorType>
52 void AdvanceToNextTile(TilingIteratorType* iterator); 59 void AdvanceToNextTile(TilingIteratorType* iterator);
53 template <typename TilingIteratorType> 60 template <typename TilingIteratorType>
54 bool GetFirstTileAndCheckIfValid(TilingIteratorType* iterator); 61 bool GetFirstTileAndCheckIfValid(TilingIteratorType* iterator);
55 bool IsTileValid(const Tile* tile) const; 62 bool IsTileValid(const Tile* tile) const;
56 63
57 PrioritizedTile current_tile_; 64 PrioritizedTile current_tile_;
58 PictureLayerTiling* tiling_; 65 PictureLayerTiling* tiling_;
59 TilingData* tiling_data_; 66 TilingData* tiling_data_;
60 PictureLayerTiling::PriorityRectType priority_rect_type_; 67 PictureLayerTiling::PriorityRectType priority_rect_type_;
61 gfx::Rect pending_visible_rect_; 68 gfx::Rect pending_visible_rect_;
62 }; 69 };
63 70
64 // Iterates over visible rect only, left to right top to bottom order. 71 // Iterates over visible rect only, left to right top to bottom order.
65 class VisibleTilingIterator : public OnePriorityRectIterator { 72 class VisibleTilingIterator : public OnePriorityRectIterator {
66 public: 73 public:
67 VisibleTilingIterator() = default; 74 VisibleTilingIterator() = default;
68 VisibleTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); 75 VisibleTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data);
76 VisibleTilingIterator(const VisibleTilingIterator& other) = default;
77 VisibleTilingIterator(VisibleTilingIterator&& other) = default;
78
79 VisibleTilingIterator& operator=(const VisibleTilingIterator& other) =
80 default;
81 VisibleTilingIterator& operator=(VisibleTilingIterator&& other) = default;
69 82
70 VisibleTilingIterator& operator++(); 83 VisibleTilingIterator& operator++();
71 84
72 private: 85 private:
73 TilingData::Iterator iterator_; 86 TilingData::Iterator iterator_;
74 }; 87 };
75 88
76 class PendingVisibleTilingIterator : public OnePriorityRectIterator { 89 class PendingVisibleTilingIterator : public OnePriorityRectIterator {
77 public: 90 public:
78 PendingVisibleTilingIterator() = default; 91 PendingVisibleTilingIterator() = default;
79 PendingVisibleTilingIterator(PictureLayerTiling* tiling, 92 PendingVisibleTilingIterator(PictureLayerTiling* tiling,
80 TilingData* tiling_data); 93 TilingData* tiling_data);
94 PendingVisibleTilingIterator(const PendingVisibleTilingIterator& other) =
95 default;
96 PendingVisibleTilingIterator(PendingVisibleTilingIterator&& other) =
97 default;
98
99 PendingVisibleTilingIterator& operator=(
100 const PendingVisibleTilingIterator& other) = default;
101 PendingVisibleTilingIterator& operator=(
102 PendingVisibleTilingIterator&& other) = default;
81 103
82 PendingVisibleTilingIterator& operator++(); 104 PendingVisibleTilingIterator& operator++();
83 105
84 private: 106 private:
85 TilingData::DifferenceIterator iterator_; 107 TilingData::DifferenceIterator iterator_;
86 }; 108 };
87 109
88 // Iterates over skewport only, spiral around the visible rect. 110 // Iterates over skewport only, spiral around the visible rect.
89 class SkewportTilingIterator : public OnePriorityRectIterator { 111 class SkewportTilingIterator : public OnePriorityRectIterator {
90 public: 112 public:
91 SkewportTilingIterator() = default; 113 SkewportTilingIterator() = default;
92 SkewportTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); 114 SkewportTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data);
115 SkewportTilingIterator(const SkewportTilingIterator& other) = default;
116 SkewportTilingIterator(SkewportTilingIterator&& other) = default;
117
118 SkewportTilingIterator& operator=(const SkewportTilingIterator& other) =
119 default;
120 SkewportTilingIterator& operator=(SkewportTilingIterator&& other) = default;
93 121
94 SkewportTilingIterator& operator++(); 122 SkewportTilingIterator& operator++();
95 123
96 private: 124 private:
97 TilingData::SpiralDifferenceIterator iterator_; 125 TilingData::SpiralDifferenceIterator iterator_;
98 }; 126 };
99 127
100 // Iterates over soon border only, spiral around the visible rect. 128 // Iterates over soon border only, spiral around the visible rect.
101 class SoonBorderTilingIterator : public OnePriorityRectIterator { 129 class SoonBorderTilingIterator : public OnePriorityRectIterator {
102 public: 130 public:
103 SoonBorderTilingIterator() = default; 131 SoonBorderTilingIterator() = default;
104 SoonBorderTilingIterator(PictureLayerTiling* tiling, 132 SoonBorderTilingIterator(PictureLayerTiling* tiling,
105 TilingData* tiling_data); 133 TilingData* tiling_data);
134 SoonBorderTilingIterator(const SoonBorderTilingIterator& other) = default;
135 SoonBorderTilingIterator(SoonBorderTilingIterator&& other) = default;
136
137 SoonBorderTilingIterator& operator=(const SoonBorderTilingIterator& other) =
138 default;
139 SoonBorderTilingIterator& operator=(SoonBorderTilingIterator&& other) =
140 default;
106 141
107 SoonBorderTilingIterator& operator++(); 142 SoonBorderTilingIterator& operator++();
108 143
109 private: 144 private:
110 TilingData::SpiralDifferenceIterator iterator_; 145 TilingData::SpiralDifferenceIterator iterator_;
111 }; 146 };
112 147
113 // Iterates over eventually rect only, spiral around the soon rect. 148 // Iterates over eventually rect only, spiral around the soon rect.
114 class EventuallyTilingIterator : public OnePriorityRectIterator { 149 class EventuallyTilingIterator : public OnePriorityRectIterator {
115 public: 150 public:
116 EventuallyTilingIterator() = default; 151 EventuallyTilingIterator() = default;
117 EventuallyTilingIterator(PictureLayerTiling* tiling, 152 EventuallyTilingIterator(PictureLayerTiling* tiling,
118 TilingData* tiling_data); 153 TilingData* tiling_data);
154 EventuallyTilingIterator(const EventuallyTilingIterator& other) = default;
155 EventuallyTilingIterator(EventuallyTilingIterator&& other) = default;
156
157 EventuallyTilingIterator& operator=(const EventuallyTilingIterator& other) =
158 default;
159 EventuallyTilingIterator& operator=(EventuallyTilingIterator&& other) =
160 default;
119 161
120 EventuallyTilingIterator& operator++(); 162 EventuallyTilingIterator& operator++();
121 163
122 private: 164 private:
123 TilingData::SpiralDifferenceIterator iterator_; 165 TilingData::SpiralDifferenceIterator iterator_;
124 }; 166 };
125 167
126 // Iterates over all of the above phases in the following order: visible, 168 // Iterates over all of the above phases in the following order: visible,
127 // skewport, soon border, eventually. 169 // skewport, soon border, eventually.
128 class TilingIterator { 170 class TilingIterator {
129 public: 171 public:
130 TilingIterator(); 172 TilingIterator();
131 explicit TilingIterator(PictureLayerTiling* tiling, 173 explicit TilingIterator(PictureLayerTiling* tiling,
132 TilingData* tiling_data); 174 TilingData* tiling_data);
175 TilingIterator(const TilingIterator& other);
176 TilingIterator(TilingIterator&& other);
133 ~TilingIterator(); 177 ~TilingIterator();
134 178
179 TilingIterator& operator=(const TilingIterator& other);
180 TilingIterator& operator=(TilingIterator&& other);
181
135 bool done() const { return !current_tile_.tile(); } 182 bool done() const { return !current_tile_.tile(); }
136 const PrioritizedTile& operator*() const { return current_tile_; } 183 const PrioritizedTile& operator*() const { return current_tile_; }
137 TilePriority::PriorityBin type() const { 184 TilePriority::PriorityBin type() const {
138 switch (phase_) { 185 switch (phase_) {
139 case Phase::VISIBLE_RECT: 186 case Phase::VISIBLE_RECT:
140 return TilePriority::NOW; 187 return TilePriority::NOW;
141 case Phase::PENDING_VISIBLE_RECT: 188 case Phase::PENDING_VISIBLE_RECT:
142 case Phase::SKEWPORT_RECT: 189 case Phase::SKEWPORT_RECT:
143 case Phase::SOON_BORDER_RECT: 190 case Phase::SOON_BORDER_RECT:
144 return TilePriority::SOON; 191 return TilePriority::SOON;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 // ideal pending high res. 240 // ideal pending high res.
194 base::StackVector<IterationStage, 6> stages_; 241 base::StackVector<IterationStage, 6> stages_;
195 TilingIterator iterators_[NUM_ITERATORS]; 242 TilingIterator iterators_[NUM_ITERATORS];
196 243
197 DISALLOW_COPY_AND_ASSIGN(TilingSetRasterQueueAll); 244 DISALLOW_COPY_AND_ASSIGN(TilingSetRasterQueueAll);
198 }; 245 };
199 246
200 } // namespace cc 247 } // namespace cc
201 248
202 #endif // CC_TILES_TILING_SET_RASTER_QUEUE_ALL_H_ 249 #endif // CC_TILES_TILING_SET_RASTER_QUEUE_ALL_H_
OLDNEW
« no previous file with comments | « cc/tiles/tiling_set_eviction_queue.cc ('k') | cc/tiles/tiling_set_raster_queue_all.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698