Chromium Code Reviews| Index: cc/resources/picture_layer_tiling.h | 
| diff --git a/cc/resources/picture_layer_tiling.h b/cc/resources/picture_layer_tiling.h | 
| index 7d7626e74706f2f06e8395fd381e9d896aa45943..8d2bc3648337007facd7f339f0b2ebcaef341e3b 100644 | 
| --- a/cc/resources/picture_layer_tiling.h | 
| +++ b/cc/resources/picture_layer_tiling.h | 
| @@ -15,6 +15,7 @@ | 
| #include "cc/base/region.h" | 
| #include "cc/base/tiling_data.h" | 
| #include "cc/resources/tile.h" | 
| +#include "cc/resources/tile_bundle.h" | 
| #include "cc/resources/tile_priority.h" | 
| #include "ui/gfx/rect.h" | 
| @@ -29,6 +30,10 @@ class CC_EXPORT PictureLayerTilingClient { | 
| virtual scoped_refptr<Tile> CreateTile( | 
| PictureLayerTiling* tiling, | 
| gfx::Rect content_rect) = 0; | 
| + virtual scoped_refptr<TileBundle> CreateTileBundle(int offset_x, | 
| + int offset_y, | 
| + int width, | 
| + int height) = 0; | 
| virtual void UpdatePile(Tile* tile) = 0; | 
| virtual gfx::Size CalculateTileSize( | 
| gfx::Size content_bounds) const = 0; | 
| @@ -66,15 +71,49 @@ class CC_EXPORT PictureLayerTiling { | 
| gfx::Size tile_size() const { return tiling_data_.max_texture_size(); } | 
| float contents_scale() const { return contents_scale_; } | 
| + Tile* TileAt(WhichTree tree, int, int) const; | 
| + | 
| + void SetTreeForTesting(WhichTree tree) { | 
| + current_tree_ = tree; | 
| + } | 
| void CreateAllTilesForTesting() { | 
| + current_tree_ = ACTIVE_TREE; | 
| + SetLiveTilesRect(gfx::Rect(tiling_data_.total_size())); | 
| + live_tiles_rect_ = gfx::Rect(); | 
| + current_tree_ = PENDING_TREE; | 
| + SetLiveTilesRect(gfx::Rect(tiling_data_.total_size())); | 
| + } | 
| + void CreateTilesForTesting(WhichTree tree) { | 
| + current_tree_ = tree; | 
| SetLiveTilesRect(gfx::Rect(tiling_data_.total_size())); | 
| } | 
| - | 
| std::vector<Tile*> AllTilesForTesting() const { | 
| std::vector<Tile*> all_tiles; | 
| - for (TileMap::const_iterator it = tiles_.begin(); | 
| - it != tiles_.end(); ++it) | 
| - all_tiles.push_back(it->second.get()); | 
| + for (TileBundleMap::const_iterator it = tile_bundles_.begin(); | 
| + it != tile_bundles_.end(); ++it) { | 
| + for (TileBundle::Iterator tile_it(it->second.get()); tile_it; ++tile_it) | 
| + all_tiles.push_back(*tile_it); | 
| + } | 
| + return all_tiles; | 
| + } | 
| + std::vector<TileBundle*> AllTileBundlesForTesting() const { | 
| + std::vector<TileBundle*> all_bundles; | 
| + for (TileBundleMap::const_iterator it = tile_bundles_.begin(); | 
| + it != tile_bundles_.end(); ++it) { | 
| + all_bundles.push_back(it->second.get()); | 
| + } | 
| + return all_bundles; | 
| + } | 
| + std::vector<Tile*> TilesForTesting(WhichTree tree) const { | 
| + std::vector<Tile*> all_tiles; | 
| + for (TileBundleMap::const_iterator it = tile_bundles_.begin(); | 
| + it != tile_bundles_.end(); ++it) { | 
| + for (TileBundle::Iterator tile_it(it->second.get(), tree); | 
| + tile_it; | 
| + ++tile_it) { | 
| + all_tiles.push_back(*tile_it); | 
| + } | 
| + } | 
| return all_tiles; | 
| } | 
| @@ -104,6 +143,9 @@ class CC_EXPORT PictureLayerTiling { | 
| Tile* operator->() const { return current_tile_; } | 
| Tile* operator*() const { return current_tile_; } | 
| + TilePriority priority(); | 
| + void SetPriorityForTesting(const TilePriority& priority); | 
| + | 
| CoverageIterator& operator++(); | 
| operator bool() const { return tile_j_ <= bottom_; } | 
| @@ -120,6 +162,7 @@ class CC_EXPORT PictureLayerTiling { | 
| int top_; | 
| int right_; | 
| int bottom_; | 
| + WhichTree tree_; | 
| friend class PictureLayerTiling; | 
| }; | 
| @@ -184,15 +227,27 @@ class CC_EXPORT PictureLayerTiling { | 
| } | 
| protected: | 
| - typedef std::pair<int, int> TileMapKey; | 
| - typedef base::hash_map<TileMapKey, scoped_refptr<Tile> > TileMap; | 
| + friend class TileBundle; | 
| + | 
| + typedef std::pair<int, int> TileBundleMapKey; | 
| + typedef base::hash_map<TileBundleMapKey, scoped_refptr<TileBundle> > | 
| + TileBundleMap; | 
| PictureLayerTiling(float contents_scale, | 
| gfx::Size layer_bounds, | 
| PictureLayerTilingClient* client); | 
| void SetLiveTilesRect(gfx::Rect live_tiles_rect); | 
| - void CreateTile(int i, int j, const PictureLayerTiling* twin_tiling); | 
| - Tile* TileAt(int, int) const; | 
| + void CreateTile(WhichTree tree, | 
| + int i, | 
| + int j, | 
| + const PictureLayerTiling* twin_tiling); | 
| + bool RemoveTile(WhichTree tree, int i, int j); | 
| + void RemoveBundleIfEmptyContainingTileAt(int i, int j); | 
| 
 
reveman
2013/12/03 19:58:19
RemoveBundleContainingTileAtIfEmpty?
 
vmpstr
2013/12/03 22:01:36
Yeah, I think any way you slice it, the naming is
 
 | 
| + TileBundle* TileBundleContainingTileAt(int, int) const; | 
| + TileBundle* CreateBundleForTileAt(int, | 
| + int, | 
| + const PictureLayerTiling* twin_tiling); | 
| + TileBundle* TileBundleAt(int, int) const; | 
| // Given properties. | 
| float contents_scale_; | 
| @@ -202,8 +257,11 @@ class CC_EXPORT PictureLayerTiling { | 
| // Internal data. | 
| TilingData tiling_data_; | 
| - TileMap tiles_; // It is not legal to have a NULL tile in the tiles_ map. | 
| + TilingData bundle_tiling_data_; | 
| + // It is not legal to have a NULL tile bundle in the tile_bundles_ map. | 
| + TileBundleMap tile_bundles_; | 
| gfx::Rect live_tiles_rect_; | 
| + WhichTree current_tree_; | 
| // State saved for computing velocities based upon finite differences. | 
| double last_impl_frame_time_in_seconds_; |