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

Side by Side Diff: cc/resources/picture_layer_tiling.h

Issue 12865017: Makes tile-creation lazy (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: a bug fix and removal of several now useless functions Created 7 years, 8 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 | Annotate | Revision Log
OLDNEW
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 <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 16 matching lines...) Expand all
27 public: 27 public:
28 // Create a tile at the given content_rect (in the contents scale of the 28 // Create a tile at the given content_rect (in the contents scale of the
29 // tiling) This might return null if the client cannot create such a tile. 29 // tiling) This might return null if the client cannot create such a tile.
30 virtual scoped_refptr<Tile> CreateTile( 30 virtual scoped_refptr<Tile> CreateTile(
31 PictureLayerTiling* tiling, 31 PictureLayerTiling* tiling,
32 gfx::Rect content_rect) = 0; 32 gfx::Rect content_rect) = 0;
33 virtual void UpdatePile(Tile* tile) = 0; 33 virtual void UpdatePile(Tile* tile) = 0;
34 virtual gfx::Size CalculateTileSize( 34 virtual gfx::Size CalculateTileSize(
35 gfx::Size current_tile_size, 35 gfx::Size current_tile_size,
36 gfx::Size content_bounds) = 0; 36 gfx::Size content_bounds) = 0;
37 virtual const Region* GetInvalidation() = 0;
38 virtual const PictureLayerTiling* GetTwinTiling(
39 const PictureLayerTiling* tiling) = 0;
37 40
38 protected: 41 protected:
39 virtual ~PictureLayerTilingClient() {} 42 virtual ~PictureLayerTilingClient() {}
40 }; 43 };
41 44
42 class CC_EXPORT PictureLayerTiling { 45 class CC_EXPORT PictureLayerTiling {
43 public: 46 public:
44 ~PictureLayerTiling(); 47 ~PictureLayerTiling();
45 48
46 // Create a tiling with no tiles. CreateTiles must be called to add some. 49 // Create a tiling with no tiles. CreateTiles must be called to add some.
47 static scoped_ptr<PictureLayerTiling> Create(float contents_scale); 50 static scoped_ptr<PictureLayerTiling> Create(float contents_scale);
48 scoped_ptr<PictureLayerTiling> Clone() const; 51 scoped_ptr<PictureLayerTiling> Clone() const;
49 52
50 gfx::Size layer_bounds() const { return layer_bounds_; } 53 gfx::Size layer_bounds() const { return layer_bounds_; }
51 void SetLayerBounds(gfx::Size layer_bounds); 54 void SetLayerBounds(gfx::Size layer_bounds);
52 void Invalidate(const Region& layer_invalidation);
53 55
54 // Add any tiles that intersect with |layer_rect|. If any tiles already 56 // Add any tiles that intersect with |layer_rect|. If any tiles already
55 // exist, then this leaves them as-is. 57 // exist, then this leaves them as-is.
56 void CreateTilesFromLayerRect(gfx::Rect layer_rect);
57 58
58 void SetClient(PictureLayerTilingClient* client); 59 void SetClient(PictureLayerTilingClient* client);
59 void set_resolution(TileResolution resolution) { resolution_ = resolution; } 60 void set_resolution(TileResolution resolution) { resolution_ = resolution; }
60 TileResolution resolution() const { return resolution_; } 61 TileResolution resolution() const { return resolution_; }
61 62
62 gfx::Rect ContentRect() const; 63 gfx::Rect ContentRect() const;
63 gfx::SizeF ContentSizeF() const; 64 gfx::SizeF ContentSizeF() const;
64 float contents_scale() const { return contents_scale_; } 65 float contents_scale() const { return contents_scale_; }
65 66
66 std::vector<Tile*> AllTilesForTesting() const { 67 std::vector<Tile*> AllTilesForTesting() const {
67 std::vector<Tile*> all_tiles; 68 std::vector<Tile*> all_tiles;
68 for (TileMap::const_iterator it = tiles_.begin(); 69 for (TileMap::const_iterator it = tiles_.begin();
69 it != tiles_.end(); ++it) 70 it != tiles_.end(); ++it)
70 all_tiles.push_back(it->second); 71 all_tiles.push_back(it->second);
71 return all_tiles; 72 return all_tiles;
72 } 73 }
73 74
74 static gfx::Rect ExpandRectEquallyToAreaBoundedBy(
75 gfx::Rect starting_rect,
76 int64 target_area,
77 gfx::Rect bounding_rect);
78
79 // Iterate over all tiles to fill content_rect. Even if tiles are invalid 75 // Iterate over all tiles to fill content_rect. Even if tiles are invalid
80 // (i.e. no valid resource) this tiling should still iterate over them. 76 // (i.e. no valid resource) this tiling should still iterate over them.
81 // The union of all geometry_rect calls for each element iterated over should 77 // The union of all geometry_rect calls for each element iterated over should
82 // exactly equal content_rect and no two geometry_rects should intersect. 78 // exactly equal content_rect and no two geometry_rects should intersect.
83 class CC_EXPORT Iterator { 79 class CC_EXPORT Iterator {
84 public: 80 public:
85 Iterator(); 81 Iterator();
86 Iterator(const PictureLayerTiling* tiling, 82 Iterator(const PictureLayerTiling* tiling,
87 float dest_scale, 83 float dest_scale,
88 gfx::Rect rect); 84 gfx::Rect rect);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 void DidBecomeActive(); 143 void DidBecomeActive();
148 144
149 scoped_ptr<base::Value> AsValue() const; 145 scoped_ptr<base::Value> AsValue() const;
150 146
151 protected: 147 protected:
152 typedef std::pair<int, int> TileMapKey; 148 typedef std::pair<int, int> TileMapKey;
153 typedef base::hash_map<TileMapKey, scoped_refptr<Tile> > TileMap; 149 typedef base::hash_map<TileMapKey, scoped_refptr<Tile> > TileMap;
154 150
155 explicit PictureLayerTiling(float contents_scale); 151 explicit PictureLayerTiling(float contents_scale);
156 Tile* TileAt(int, int) const; 152 Tile* TileAt(int, int) const;
157 void CreateTilesFromContentRect(gfx::Rect layer_rect);
158 void CreateTile(int i, int j); 153 void CreateTile(int i, int j);
159 154
160 PictureLayerTilingClient* client_; 155 static gfx::Rect ExpandRectEquallyToAreaBoundedBy(
156 gfx::Rect starting_rect,
157 int64 target_area,
158 gfx::Rect bounding_rect);
159
160 // Given properties.
161 float contents_scale_; 161 float contents_scale_;
162 gfx::Size layer_bounds_; 162 gfx::Size layer_bounds_;
163 gfx::Rect last_prioritized_rect_; 163 TileResolution resolution_;
164 // It is not legal to have a NULL tile in the tiles_ map. 164 PictureLayerTilingClient* client_;
165 TileMap tiles_; 165
166 // Internal data.
166 TilingData tiling_data_; 167 TilingData tiling_data_;
167 TileResolution resolution_; 168 TileMap tiles_; // It is not legal to have a NULL tile in the tiles_ map.
169
170 // State saved for computing velocities based upon finite differences.
171 gfx::Rect interest_rect_;
enne (OOO) 2013/03/29 20:50:58 Can you call this last_interest_rect_ to match the
whunt 2013/03/29 21:52:04 I *can*, it doesn't quite follow the same semantic
enne (OOO) 2013/03/29 22:34:20 By "a variety of places" you mean "can be cleared
168 int last_source_frame_number_; 172 int last_source_frame_number_;
169 double last_impl_frame_time_; 173 double last_impl_frame_time_;
170 174
171 friend class Iterator; 175 friend class Iterator;
172 176
173 private: 177 private:
174 DISALLOW_ASSIGN(PictureLayerTiling); 178 DISALLOW_ASSIGN(PictureLayerTiling);
enne (OOO) 2013/03/29 20:50:58 style nit: DISALLOW_etc goes last in a class decla
whunt 2013/03/29 21:52:04 Ahh, okay, this is where it merged in, I'll move i
179 void ManageTiles(const gfx::Rect& old_interest_rect,
180 const gfx::Rect& new_interest_rect);
175 }; 181 };
176 182
177 } // namespace cc 183 } // namespace cc
178 184
179 #endif // CC_RESOURCES_PICTURE_LAYER_TILING_H_ 185 #endif // CC_RESOURCES_PICTURE_LAYER_TILING_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698