Index: cc/tile_manager.h |
diff --git a/cc/tile_manager.h b/cc/tile_manager.h |
index e05217b5b527ab0ee2edfd31d6fd25658a9b1015..3d198bd40c974b45baf391571365c65561d91442 100644 |
--- a/cc/tile_manager.h |
+++ b/cc/tile_manager.h |
@@ -23,6 +23,7 @@ namespace cc { |
class RasterWorkerPool; |
class ResourceProvider; |
class Tile; |
+class TileManager; |
class TileVersion; |
class CC_EXPORT TileManagerClient { |
@@ -73,13 +74,13 @@ struct RasterTaskMetadata { |
// This is state that is specific to a tile that is |
// managed by the TileManager. |
-class CC_EXPORT ManagedTileState { |
+class CC_EXPORT ManagedTileState : public base::RefCounted<ManagedTileState> { |
public: |
- ManagedTileState(); |
- ~ManagedTileState(); |
+ ManagedTileState(Tile* tile); |
scoped_ptr<base::Value> AsValue() const; |
// Persisted state: valid all the time. |
+ scoped_refptr<Tile> tile; |
bool can_use_gpu_memory; |
bool can_be_freed; |
scoped_ptr<ResourcePool::Resource> resource; |
@@ -98,6 +99,10 @@ class CC_EXPORT ManagedTileState { |
TileResolution resolution; |
float time_to_needed_in_seconds; |
float distance_to_visible_in_pixels; |
+ |
+ private: |
+ friend class base::RefCounted<ManagedTileState>; |
+ ~ManagedTileState(); |
}; |
// This class manages tiles, deciding which should get rasterized and which |
@@ -140,8 +145,9 @@ class CC_EXPORT TileManager : public WorkerPoolClient { |
protected: |
// Methods called by Tile |
friend class Tile; |
- void RegisterTile(Tile* tile); |
- void UnregisterTile(Tile* tile); |
+ friend class TileHandle; |
+ friend class ManagedTileState; |
+ scoped_refptr<ManagedTileState> RegisterTile(Tile* tile); |
void WillModifyTilePriority( |
Tile* tile, WhichTree tree, const TilePriority& new_priority) { |
// TODO(nduca): Do something smarter if reprioritization turns out to be |
@@ -150,9 +156,11 @@ class CC_EXPORT TileManager : public WorkerPoolClient { |
} |
private: |
+ void RegisterManagedTile(ManagedTileState* mts); |
+ void UnregisterManagedTile(ManagedTileState* mts); |
void SortTiles(); |
void AssignGpuMemoryToTiles(); |
- void FreeResourcesForTile(Tile* tile); |
+ void FreeResourcesForTile(ManagedTileState* mts); |
void ScheduleManageTiles() { |
if (manage_tiles_pending_) |
return; |
@@ -160,28 +168,28 @@ class CC_EXPORT TileManager : public WorkerPoolClient { |
manage_tiles_pending_ = true; |
} |
void DispatchMoreTasks(); |
- void GatherPixelRefsForTile(Tile* tile); |
- void DispatchImageDecodeTasksForTile(Tile* tile); |
+ void GatherPixelRefsForTile(ManagedTileState* mts); |
+ void DispatchImageDecodeTasksForTile(ManagedTileState* mts); |
void DispatchOneImageDecodeTask( |
- scoped_refptr<Tile> tile, skia::LazyPixelRef* pixel_ref); |
+ scoped_refptr<ManagedTileState> tile, skia::LazyPixelRef* pixel_ref); |
void OnImageDecodeTaskCompleted( |
- scoped_refptr<Tile> tile, |
- uint32_t pixel_ref_id); |
- bool CanDispatchRasterTask(Tile* tile); |
- scoped_ptr<ResourcePool::Resource> PrepareTileForRaster(Tile* tile); |
- void DispatchOneRasterTask(scoped_refptr<Tile> tile); |
- void PerformOneRaster(Tile* tile); |
+ scoped_refptr<ManagedTileState> tile, uint32_t pixel_ref_id); |
+ bool CanDispatchRasterTask(ManagedTileState* mts); |
+ scoped_ptr<ResourcePool::Resource> PrepareTileForRaster( |
+ ManagedTileState* mts); |
+ void DispatchOneRasterTask(scoped_refptr<ManagedTileState> tile); |
+ void PerformOneRaster(ManagedTileState* mts); |
void OnRasterCompleted( |
- scoped_refptr<Tile> tile, |
+ scoped_refptr<ManagedTileState> tile, |
scoped_ptr<ResourcePool::Resource> resource, |
int manage_tiles_call_count_when_dispatched); |
void OnRasterTaskCompleted( |
- scoped_refptr<Tile> tile, |
+ scoped_refptr<ManagedTileState> tile, |
scoped_ptr<ResourcePool::Resource> resource, |
int manage_tiles_call_count_when_dispatched); |
- void DidFinishTileInitialization(Tile* tile); |
- void DidTileRasterStateChange(Tile* tile, TileRasterState state); |
- void DidTileTreeBinChange(Tile* tile, |
+ void DidFinishTileInitialization(ManagedTileState* mts); |
+ void DidTileRasterStateChange(ManagedTileState* mts, TileRasterState state); |
+ void DidTileTreeBinChange(ManagedTileState* mts, |
TileManagerBin new_tree_bin, |
WhichTree tree); |
scoped_ptr<Value> GetMemoryRequirementsAsValue() const; |
@@ -207,13 +215,13 @@ class CC_EXPORT TileManager : public WorkerPoolClient { |
GlobalStateThatImpactsTilePriority global_state_; |
- typedef std::vector<Tile*> TileVector; |
- typedef std::set<Tile*> TileSet; |
+ typedef std::vector<ManagedTileState*> TileVector; |
+ typedef std::set<ManagedTileState*> TileSet; |
TileSet all_tiles_; |
TileVector live_or_allocated_tiles_; |
TileVector tiles_that_need_to_be_rasterized_; |
- typedef std::list<Tile*> TileList; |
+ typedef std::list<ManagedTileState*> TileList; |
// Tiles with image decoding tasks. These tiles need to be rasterized |
// when all the image decoding tasks finish. |
TileList tiles_with_image_decoding_tasks_; |
@@ -221,7 +229,7 @@ class CC_EXPORT TileManager : public WorkerPoolClient { |
typedef base::hash_map<uint32_t, skia::LazyPixelRef*> PixelRefMap; |
PixelRefMap pending_decode_tasks_; |
- typedef std::queue<scoped_refptr<Tile> > TileQueue; |
+ typedef std::queue<scoped_refptr<ManagedTileState> > TileQueue; |
TileQueue tiles_with_pending_set_pixels_; |
size_t bytes_pending_set_pixels_; |
bool has_performed_uploads_since_last_flush_; |