OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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_RESOURCES_PICTURE_LAYER_TILING_H_ | 5 #ifndef CC_RESOURCES_PICTURE_LAYER_TILING_H_ |
6 #define CC_RESOURCES_PICTURE_LAYER_TILING_H_ | 6 #define CC_RESOURCES_PICTURE_LAYER_TILING_H_ |
7 | 7 |
8 #include <set> | 8 #include <map> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/basictypes.h" | 12 #include "base/basictypes.h" |
13 #include "base/containers/hash_tables.h" | 13 #include "base/containers/hash_tables.h" |
14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
15 #include "cc/base/cc_export.h" | 15 #include "cc/base/cc_export.h" |
16 #include "cc/base/region.h" | 16 #include "cc/base/region.h" |
17 #include "cc/base/tiling_data.h" | 17 #include "cc/base/tiling_data.h" |
18 #include "cc/resources/tile.h" | 18 #include "cc/resources/tile.h" |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 | 133 |
134 const gfx::Rect& GetCurrentVisibleRectForTesting() const { | 134 const gfx::Rect& GetCurrentVisibleRectForTesting() const { |
135 return current_visible_rect_; | 135 return current_visible_rect_; |
136 } | 136 } |
137 | 137 |
138 bool IsTileOccluded(const Tile* tile) const; | 138 bool IsTileOccluded(const Tile* tile) const; |
139 bool IsTileRequiredForActivationIfVisible(const Tile* tile) const; | 139 bool IsTileRequiredForActivationIfVisible(const Tile* tile) const; |
140 bool IsTileRequiredForDrawIfVisible(const Tile* tile) const; | 140 bool IsTileRequiredForDrawIfVisible(const Tile* tile) const; |
141 | 141 |
142 void UpdateTileAndTwinPriority(Tile* tile) const; | 142 void UpdateTileAndTwinPriority(Tile* tile) const; |
| 143 TilePriority ComputePriorityForTile(const Tile* tile) const; |
| 144 void UpdateRequiredStateForTile(Tile* tile, WhichTree tree) const; |
143 bool has_visible_rect_tiles() const { return has_visible_rect_tiles_; } | 145 bool has_visible_rect_tiles() const { return has_visible_rect_tiles_; } |
144 bool has_skewport_rect_tiles() const { return has_skewport_rect_tiles_; } | 146 bool has_skewport_rect_tiles() const { return has_skewport_rect_tiles_; } |
145 bool has_soon_border_rect_tiles() const { | 147 bool has_soon_border_rect_tiles() const { |
146 return has_soon_border_rect_tiles_; | 148 return has_soon_border_rect_tiles_; |
147 } | 149 } |
148 bool has_eventually_rect_tiles() const { return has_eventually_rect_tiles_; } | 150 bool has_eventually_rect_tiles() const { return has_eventually_rect_tiles_; } |
149 | 151 |
150 const gfx::Rect& current_visible_rect() const { | 152 const gfx::Rect& current_visible_rect() const { |
151 return current_visible_rect_; | 153 return current_visible_rect_; |
152 } | 154 } |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 friend class PictureLayerTiling; | 206 friend class PictureLayerTiling; |
205 }; | 207 }; |
206 | 208 |
207 void Reset(); | 209 void Reset(); |
208 | 210 |
209 bool ComputeTilePriorityRects(const gfx::Rect& viewport_in_layer_space, | 211 bool ComputeTilePriorityRects(const gfx::Rect& viewport_in_layer_space, |
210 float ideal_contents_scale, | 212 float ideal_contents_scale, |
211 double current_frame_time_in_seconds, | 213 double current_frame_time_in_seconds, |
212 const Occlusion& occlusion_in_layer_space); | 214 const Occlusion& occlusion_in_layer_space); |
213 | 215 |
214 void GetAllTilesForTracing(std::set<const Tile*>* tiles) const; | 216 void GetAllTilesAndPrioritiesForTracing( |
| 217 std::map<const Tile*, TilePriority>* tile_map) const; |
215 void AsValueInto(base::trace_event::TracedValue* array) const; | 218 void AsValueInto(base::trace_event::TracedValue* array) const; |
216 size_t GPUMemoryUsageInBytes() const; | 219 size_t GPUMemoryUsageInBytes() const; |
217 | 220 |
218 struct RectExpansionCache { | 221 struct RectExpansionCache { |
219 RectExpansionCache(); | 222 RectExpansionCache(); |
220 | 223 |
221 gfx::Rect previous_start; | 224 gfx::Rect previous_start; |
222 gfx::Rect previous_bounds; | 225 gfx::Rect previous_bounds; |
223 gfx::Rect previous_result; | 226 gfx::Rect previous_result; |
224 int64 previous_target; | 227 int64 previous_target; |
225 }; | 228 }; |
226 | 229 |
227 static | 230 static |
228 gfx::Rect ExpandRectEquallyToAreaBoundedBy( | 231 gfx::Rect ExpandRectEquallyToAreaBoundedBy( |
229 const gfx::Rect& starting_rect, | 232 const gfx::Rect& starting_rect, |
230 int64 target_area, | 233 int64 target_area, |
231 const gfx::Rect& bounding_rect, | 234 const gfx::Rect& bounding_rect, |
232 RectExpansionCache* cache); | 235 RectExpansionCache* cache); |
233 | 236 |
234 bool has_ever_been_updated() const { | 237 bool has_ever_been_updated() const { |
235 return last_impl_frame_time_in_seconds_ != 0.0; | 238 return visible_rect_history_[0].frame_time_in_seconds != 0.0; |
236 } | 239 } |
237 | 240 |
238 protected: | 241 protected: |
239 friend class CoverageIterator; | 242 friend class CoverageIterator; |
240 friend class TilingSetRasterQueueAll; | 243 friend class TilingSetRasterQueueAll; |
241 friend class TilingSetRasterQueueRequired; | 244 friend class TilingSetRasterQueueRequired; |
242 friend class TilingSetEvictionQueue; | 245 friend class TilingSetEvictionQueue; |
243 | 246 |
244 typedef std::pair<int, int> TileMapKey; | 247 typedef std::pair<int, int> TileMapKey; |
245 typedef base::hash_map<TileMapKey, scoped_refptr<Tile>> TileMap; | 248 typedef base::hash_map<TileMapKey, scoped_refptr<Tile>> TileMap; |
246 | 249 |
| 250 struct FrameVisibleRect { |
| 251 gfx::Rect visible_rect_in_content_space; |
| 252 double frame_time_in_seconds = 0.0; |
| 253 }; |
| 254 |
247 PictureLayerTiling(float contents_scale, | 255 PictureLayerTiling(float contents_scale, |
248 scoped_refptr<RasterSource> raster_source, | 256 scoped_refptr<RasterSource> raster_source, |
249 PictureLayerTilingClient* client, | 257 PictureLayerTilingClient* client, |
250 size_t max_tiles_for_interest_area, | 258 size_t max_tiles_for_interest_area, |
251 float skewport_target_time_in_seconds, | 259 float skewport_target_time_in_seconds, |
252 int skewport_extrapolation_limit_in_content_pixels); | 260 int skewport_extrapolation_limit_in_content_pixels); |
253 void SetLiveTilesRect(const gfx::Rect& live_tiles_rect); | 261 void SetLiveTilesRect(const gfx::Rect& live_tiles_rect); |
254 void VerifyLiveTilesRect(bool is_on_recycle_tree) const; | 262 void VerifyLiveTilesRect(bool is_on_recycle_tree) const; |
255 Tile* CreateTile(int i, | 263 Tile* CreateTile(int i, |
256 int j, | 264 int j, |
(...skipping 15 matching lines...) Expand all Loading... |
272 const gfx::Rect& visible_rect_in_content_space, | 280 const gfx::Rect& visible_rect_in_content_space, |
273 const gfx::Rect& skewport, | 281 const gfx::Rect& skewport, |
274 const gfx::Rect& soon_border_rect, | 282 const gfx::Rect& soon_border_rect, |
275 const gfx::Rect& eventually_rect, | 283 const gfx::Rect& eventually_rect, |
276 const Occlusion& occlusion_in_layer_space); | 284 const Occlusion& occlusion_in_layer_space); |
277 | 285 |
278 void UpdateTilePriorityForTree(Tile* tile, WhichTree tree) const; | 286 void UpdateTilePriorityForTree(Tile* tile, WhichTree tree) const; |
279 bool NeedsUpdateForFrameAtTimeAndViewport( | 287 bool NeedsUpdateForFrameAtTimeAndViewport( |
280 double frame_time_in_seconds, | 288 double frame_time_in_seconds, |
281 const gfx::Rect& viewport_in_layer_space) { | 289 const gfx::Rect& viewport_in_layer_space) { |
282 return frame_time_in_seconds != last_impl_frame_time_in_seconds_ || | 290 return frame_time_in_seconds != |
| 291 visible_rect_history_[0].frame_time_in_seconds || |
283 viewport_in_layer_space != last_viewport_in_layer_space_; | 292 viewport_in_layer_space != last_viewport_in_layer_space_; |
284 } | 293 } |
| 294 void UpdateVisibleRectHistory( |
| 295 double frame_time_in_seconds, |
| 296 const gfx::Rect& visible_rect_in_content_space) { |
| 297 visible_rect_history_[1] = visible_rect_history_[0]; |
| 298 visible_rect_history_[0].frame_time_in_seconds = frame_time_in_seconds; |
| 299 visible_rect_history_[0].visible_rect_in_content_space = |
| 300 visible_rect_in_content_space; |
| 301 // If we don't have a second history item, set it to the most recent one. |
| 302 if (visible_rect_history_[1].frame_time_in_seconds == 0.0) |
| 303 visible_rect_history_[1] = visible_rect_history_[0]; |
| 304 } |
285 | 305 |
286 const size_t max_tiles_for_interest_area_; | 306 const size_t max_tiles_for_interest_area_; |
287 const float skewport_target_time_in_seconds_; | 307 const float skewport_target_time_in_seconds_; |
288 const int skewport_extrapolation_limit_in_content_pixels_; | 308 const int skewport_extrapolation_limit_in_content_pixels_; |
289 | 309 |
290 // Given properties. | 310 // Given properties. |
291 const float contents_scale_; | 311 const float contents_scale_; |
292 PictureLayerTilingClient* const client_; | 312 PictureLayerTilingClient* const client_; |
293 scoped_refptr<RasterSource> raster_source_; | 313 scoped_refptr<RasterSource> raster_source_; |
294 TileResolution resolution_; | 314 TileResolution resolution_; |
295 | 315 |
296 // Internal data. | 316 // Internal data. |
297 TilingData tiling_data_; | 317 TilingData tiling_data_; |
298 TileMap tiles_; // It is not legal to have a NULL tile in the tiles_ map. | 318 TileMap tiles_; // It is not legal to have a NULL tile in the tiles_ map. |
299 gfx::Rect live_tiles_rect_; | 319 gfx::Rect live_tiles_rect_; |
300 | 320 |
| 321 gfx::Rect last_viewport_in_layer_space_; |
301 // State saved for computing velocities based upon finite differences. | 322 // State saved for computing velocities based upon finite differences. |
302 double last_impl_frame_time_in_seconds_; | 323 FrameVisibleRect visible_rect_history_[2]; |
303 gfx::Rect last_viewport_in_layer_space_; | |
304 gfx::Rect last_visible_rect_in_content_space_; | |
305 | 324 |
306 bool can_require_tiles_for_activation_; | 325 bool can_require_tiles_for_activation_; |
307 | 326 |
308 // Iteration rects in content space. | 327 // Iteration rects in content space. |
309 gfx::Rect current_visible_rect_; | 328 gfx::Rect current_visible_rect_; |
310 gfx::Rect current_skewport_rect_; | 329 gfx::Rect current_skewport_rect_; |
311 gfx::Rect current_soon_border_rect_; | 330 gfx::Rect current_soon_border_rect_; |
312 gfx::Rect current_eventually_rect_; | 331 gfx::Rect current_eventually_rect_; |
313 // Other properties used for tile iteration and prioritization. | 332 // Other properties used for tile iteration and prioritization. |
314 float current_content_to_screen_scale_; | 333 float current_content_to_screen_scale_; |
315 Occlusion current_occlusion_in_layer_space_; | 334 Occlusion current_occlusion_in_layer_space_; |
316 | 335 |
317 bool has_visible_rect_tiles_; | 336 bool has_visible_rect_tiles_; |
318 bool has_skewport_rect_tiles_; | 337 bool has_skewport_rect_tiles_; |
319 bool has_soon_border_rect_tiles_; | 338 bool has_soon_border_rect_tiles_; |
320 bool has_eventually_rect_tiles_; | 339 bool has_eventually_rect_tiles_; |
321 | 340 |
322 private: | 341 private: |
323 DISALLOW_ASSIGN(PictureLayerTiling); | 342 DISALLOW_ASSIGN(PictureLayerTiling); |
324 | 343 |
325 RectExpansionCache expansion_cache_; | 344 RectExpansionCache expansion_cache_; |
326 }; | 345 }; |
327 | 346 |
328 } // namespace cc | 347 } // namespace cc |
329 | 348 |
330 #endif // CC_RESOURCES_PICTURE_LAYER_TILING_H_ | 349 #endif // CC_RESOURCES_PICTURE_LAYER_TILING_H_ |
OLD | NEW |