| 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 <set> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 virtual bool RequiresHighResToDraw() const = 0; | 51 virtual bool RequiresHighResToDraw() const = 0; |
| 52 | 52 |
| 53 protected: | 53 protected: |
| 54 virtual ~PictureLayerTilingClient() {} | 54 virtual ~PictureLayerTilingClient() {} |
| 55 }; | 55 }; |
| 56 | 56 |
| 57 class CC_EXPORT PictureLayerTiling { | 57 class CC_EXPORT PictureLayerTiling { |
| 58 public: | 58 public: |
| 59 static const int kBorderTexels = 1; | 59 static const int kBorderTexels = 1; |
| 60 | 60 |
| 61 class CC_EXPORT TilingRasterTileIterator { | |
| 62 public: | |
| 63 TilingRasterTileIterator(); | |
| 64 explicit TilingRasterTileIterator(PictureLayerTiling* tiling); | |
| 65 ~TilingRasterTileIterator(); | |
| 66 | |
| 67 operator bool() const { return !!current_tile_; } | |
| 68 const Tile* operator*() const { return current_tile_; } | |
| 69 Tile* operator*() { return current_tile_; } | |
| 70 TilePriority::PriorityBin get_type() const { | |
| 71 switch (phase_) { | |
| 72 case VISIBLE_RECT: | |
| 73 return TilePriority::NOW; | |
| 74 case SKEWPORT_RECT: | |
| 75 case SOON_BORDER_RECT: | |
| 76 return TilePriority::SOON; | |
| 77 case EVENTUALLY_RECT: | |
| 78 return TilePriority::EVENTUALLY; | |
| 79 } | |
| 80 NOTREACHED(); | |
| 81 return TilePriority::EVENTUALLY; | |
| 82 } | |
| 83 | |
| 84 TilingRasterTileIterator& operator++(); | |
| 85 | |
| 86 private: | |
| 87 enum Phase { | |
| 88 VISIBLE_RECT, | |
| 89 SKEWPORT_RECT, | |
| 90 SOON_BORDER_RECT, | |
| 91 EVENTUALLY_RECT | |
| 92 }; | |
| 93 | |
| 94 void AdvancePhase(); | |
| 95 bool TileNeedsRaster(Tile* tile) const { | |
| 96 return tile->NeedsRaster() && !tiling_->IsTileOccluded(tile); | |
| 97 } | |
| 98 | |
| 99 PictureLayerTiling* tiling_; | |
| 100 | |
| 101 Phase phase_; | |
| 102 | |
| 103 Tile* current_tile_; | |
| 104 TilingData::Iterator visible_iterator_; | |
| 105 TilingData::SpiralDifferenceIterator spiral_iterator_; | |
| 106 }; | |
| 107 | |
| 108 ~PictureLayerTiling(); | 61 ~PictureLayerTiling(); |
| 109 | 62 |
| 110 // Create a tiling with no tiles. CreateTile() must be called to add some. | 63 // Create a tiling with no tiles. CreateTile() must be called to add some. |
| 111 static scoped_ptr<PictureLayerTiling> Create( | 64 static scoped_ptr<PictureLayerTiling> Create( |
| 112 float contents_scale, | 65 float contents_scale, |
| 113 scoped_refptr<RasterSource> raster_source, | 66 scoped_refptr<RasterSource> raster_source, |
| 114 PictureLayerTilingClient* client, | 67 PictureLayerTilingClient* client, |
| 115 size_t max_tiles_for_interest_area, | 68 size_t max_tiles_for_interest_area, |
| 116 float skewport_target_time_in_seconds, | 69 float skewport_target_time_in_seconds, |
| 117 int skewport_extrapolation_limit_in_content_pixels); | 70 int skewport_extrapolation_limit_in_content_pixels); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 } | 128 } |
| 176 | 129 |
| 177 const gfx::Rect& GetCurrentVisibleRectForTesting() const { | 130 const gfx::Rect& GetCurrentVisibleRectForTesting() const { |
| 178 return current_visible_rect_; | 131 return current_visible_rect_; |
| 179 } | 132 } |
| 180 | 133 |
| 181 bool IsTileOccluded(const Tile* tile) const; | 134 bool IsTileOccluded(const Tile* tile) const; |
| 182 bool IsTileRequiredForActivationIfVisible(const Tile* tile) const; | 135 bool IsTileRequiredForActivationIfVisible(const Tile* tile) const; |
| 183 bool IsTileRequiredForDrawIfVisible(const Tile* tile) const; | 136 bool IsTileRequiredForDrawIfVisible(const Tile* tile) const; |
| 184 | 137 |
| 138 void UpdateTileAndTwinPriority(Tile* tile) const; |
| 139 bool has_visible_rect_tiles() const { return has_visible_rect_tiles_; } |
| 140 bool has_skewport_rect_tiles() const { return has_skewport_rect_tiles_; } |
| 141 bool has_soon_border_rect_tiles() const { |
| 142 return has_soon_border_rect_tiles_; |
| 143 } |
| 144 bool has_eventually_rect_tiles() const { return has_eventually_rect_tiles_; } |
| 145 |
| 146 const gfx::Rect& current_visible_rect() const { |
| 147 return current_visible_rect_; |
| 148 } |
| 149 const gfx::Rect& current_skewport_rect() const { |
| 150 return current_skewport_rect_; |
| 151 } |
| 152 const gfx::Rect& current_soon_border_rect() const { |
| 153 return current_soon_border_rect_; |
| 154 } |
| 155 const gfx::Rect& current_eventually_rect() const { |
| 156 return current_eventually_rect_; |
| 157 } |
| 158 |
| 185 // Iterate over all tiles to fill content_rect. Even if tiles are invalid | 159 // Iterate over all tiles to fill content_rect. Even if tiles are invalid |
| 186 // (i.e. no valid resource) this tiling should still iterate over them. | 160 // (i.e. no valid resource) this tiling should still iterate over them. |
| 187 // The union of all geometry_rect calls for each element iterated over should | 161 // The union of all geometry_rect calls for each element iterated over should |
| 188 // exactly equal content_rect and no two geometry_rects should intersect. | 162 // exactly equal content_rect and no two geometry_rects should intersect. |
| 189 class CC_EXPORT CoverageIterator { | 163 class CC_EXPORT CoverageIterator { |
| 190 public: | 164 public: |
| 191 CoverageIterator(); | 165 CoverageIterator(); |
| 192 CoverageIterator(const PictureLayerTiling* tiling, | 166 CoverageIterator(const PictureLayerTiling* tiling, |
| 193 float dest_scale, | 167 float dest_scale, |
| 194 const gfx::Rect& rect); | 168 const gfx::Rect& rect); |
| 195 ~CoverageIterator(); | 169 ~CoverageIterator(); |
| 196 | 170 |
| 197 // Visible rect (no borders), always in the space of content_rect, | 171 // Visible rect (no borders), always in the space of content_rect, |
| 198 // regardless of the contents scale of the tiling. | 172 // regardless of the contents scale of the tiling. |
| 199 gfx::Rect geometry_rect() const; | 173 gfx::Rect geometry_rect() const; |
| 200 // Texture rect (in texels) for geometry_rect | 174 // Texture rect (in texels) for geometry_rect |
| 201 gfx::RectF texture_rect() const; | 175 gfx::RectF texture_rect() const; |
| 202 gfx::Size texture_size() const; | |
| 203 | |
| 204 // Full rect (including borders) of the current tile, always in the space | |
| 205 // of content_rect, regardless of the contents scale of the tiling. | |
| 206 gfx::Rect full_tile_geometry_rect() const; | |
| 207 | 176 |
| 208 Tile* operator->() const { return current_tile_; } | 177 Tile* operator->() const { return current_tile_; } |
| 209 Tile* operator*() const { return current_tile_; } | 178 Tile* operator*() const { return current_tile_; } |
| 210 | 179 |
| 211 CoverageIterator& operator++(); | 180 CoverageIterator& operator++(); |
| 212 operator bool() const { return tile_j_ <= bottom_; } | 181 operator bool() const { return tile_j_ <= bottom_; } |
| 213 | 182 |
| 214 int i() const { return tile_i_; } | 183 int i() const { return tile_i_; } |
| 215 int j() const { return tile_j_; } | 184 int j() const { return tile_j_; } |
| 216 | 185 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 int64 target_area, | 226 int64 target_area, |
| 258 const gfx::Rect& bounding_rect, | 227 const gfx::Rect& bounding_rect, |
| 259 RectExpansionCache* cache); | 228 RectExpansionCache* cache); |
| 260 | 229 |
| 261 bool has_ever_been_updated() const { | 230 bool has_ever_been_updated() const { |
| 262 return last_impl_frame_time_in_seconds_ != 0.0; | 231 return last_impl_frame_time_in_seconds_ != 0.0; |
| 263 } | 232 } |
| 264 | 233 |
| 265 protected: | 234 protected: |
| 266 friend class CoverageIterator; | 235 friend class CoverageIterator; |
| 267 friend class TilingRasterTileIterator; | 236 friend class TilingSetRasterQueue; |
| 268 friend class TilingSetEvictionQueue; | 237 friend class TilingSetEvictionQueue; |
| 269 | 238 |
| 270 typedef std::pair<int, int> TileMapKey; | 239 typedef std::pair<int, int> TileMapKey; |
| 271 typedef base::hash_map<TileMapKey, scoped_refptr<Tile>> TileMap; | 240 typedef base::hash_map<TileMapKey, scoped_refptr<Tile>> TileMap; |
| 272 | 241 |
| 273 PictureLayerTiling(float contents_scale, | 242 PictureLayerTiling(float contents_scale, |
| 274 scoped_refptr<RasterSource> raster_source, | 243 scoped_refptr<RasterSource> raster_source, |
| 275 PictureLayerTilingClient* client, | 244 PictureLayerTilingClient* client, |
| 276 size_t max_tiles_for_interest_area, | 245 size_t max_tiles_for_interest_area, |
| 277 float skewport_target_time_in_seconds, | 246 float skewport_target_time_in_seconds, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 294 const; | 263 const; |
| 295 | 264 |
| 296 // Save the required data for computing tile priorities later. | 265 // Save the required data for computing tile priorities later. |
| 297 void UpdateTilePriorityRects(float content_to_screen_scale_, | 266 void UpdateTilePriorityRects(float content_to_screen_scale_, |
| 298 const gfx::Rect& visible_rect_in_content_space, | 267 const gfx::Rect& visible_rect_in_content_space, |
| 299 const gfx::Rect& skewport, | 268 const gfx::Rect& skewport, |
| 300 const gfx::Rect& soon_border_rect, | 269 const gfx::Rect& soon_border_rect, |
| 301 const gfx::Rect& eventually_rect, | 270 const gfx::Rect& eventually_rect, |
| 302 const Occlusion& occlusion_in_layer_space); | 271 const Occlusion& occlusion_in_layer_space); |
| 303 | 272 |
| 304 void UpdateTileAndTwinPriority(Tile* tile) const; | 273 void UpdateTilePriorityForTree(Tile* tile, WhichTree tree) const; |
| 305 void UpdateTilePriority(Tile* tile) const; | |
| 306 bool NeedsUpdateForFrameAtTimeAndViewport( | 274 bool NeedsUpdateForFrameAtTimeAndViewport( |
| 307 double frame_time_in_seconds, | 275 double frame_time_in_seconds, |
| 308 const gfx::Rect& viewport_in_layer_space) { | 276 const gfx::Rect& viewport_in_layer_space) { |
| 309 return frame_time_in_seconds != last_impl_frame_time_in_seconds_ || | 277 return frame_time_in_seconds != last_impl_frame_time_in_seconds_ || |
| 310 viewport_in_layer_space != last_viewport_in_layer_space_; | 278 viewport_in_layer_space != last_viewport_in_layer_space_; |
| 311 } | 279 } |
| 312 | 280 |
| 313 const size_t max_tiles_for_interest_area_; | 281 const size_t max_tiles_for_interest_area_; |
| 314 const float skewport_target_time_in_seconds_; | 282 const float skewport_target_time_in_seconds_; |
| 315 const int skewport_extrapolation_limit_in_content_pixels_; | 283 const int skewport_extrapolation_limit_in_content_pixels_; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 | 316 |
| 349 private: | 317 private: |
| 350 DISALLOW_ASSIGN(PictureLayerTiling); | 318 DISALLOW_ASSIGN(PictureLayerTiling); |
| 351 | 319 |
| 352 RectExpansionCache expansion_cache_; | 320 RectExpansionCache expansion_cache_; |
| 353 }; | 321 }; |
| 354 | 322 |
| 355 } // namespace cc | 323 } // namespace cc |
| 356 | 324 |
| 357 #endif // CC_RESOURCES_PICTURE_LAYER_TILING_H_ | 325 #endif // CC_RESOURCES_PICTURE_LAYER_TILING_H_ |
| OLD | NEW |