| Index: cc/tile_manager.h
|
| diff --git a/cc/tile_manager.h b/cc/tile_manager.h
|
| index 16212ed66e5f7398d0bbbaf572f245ace0824ace..43f54841b972c2bcd17b97e04dd179f523642a77 100644
|
| --- a/cc/tile_manager.h
|
| +++ b/cc/tile_manager.h
|
| @@ -18,9 +18,24 @@
|
| #include "cc/tile_priority.h"
|
|
|
| namespace cc {
|
| +class Tile;
|
| +} // namespace cc
|
| +
|
| +#if defined(COMPILER_GCC)
|
| +namespace BASE_HASH_NAMESPACE {
|
| +template<>
|
| +struct hash<cc::Tile*> {
|
| + size_t operator()(cc::Tile* ptr) const {
|
| + return hash<size_t>()(reinterpret_cast<size_t>(ptr));
|
| + }
|
| +};
|
| +} // namespace BASE_HASH_NAMESPACE
|
| +#endif // COMPILER
|
| +
|
| +namespace cc {
|
| class RasterWorkerPool;
|
| class ResourceProvider;
|
| -class Tile;
|
| +class TileManager;
|
| class TileVersion;
|
|
|
| class CC_EXPORT TileManagerClient {
|
| @@ -61,12 +76,12 @@ enum TileRasterState {
|
|
|
| // 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();
|
| + explicit ManagedTileState(TileManager* tile_manager);
|
|
|
| // Persisted state: valid all the time.
|
| + TileManager* tile_manager;
|
| bool can_use_gpu_memory;
|
| bool can_be_freed;
|
| scoped_ptr<ResourcePool::Resource> resource;
|
| @@ -75,15 +90,28 @@ class CC_EXPORT ManagedTileState {
|
| bool need_to_gather_pixel_refs;
|
| std::list<skia::LazyPixelRef*> pending_pixel_refs;
|
| TileRasterState raster_state;
|
| + size_t bytes_consumed_if_allocated;
|
| + bool visible_high_resolution;
|
| + scoped_refptr<PicturePileImpl> picture_pile;
|
| + gfx::Rect content_rect;
|
| + float contents_scale;
|
| + gfx::Size tile_size;
|
| + GLenum format;
|
|
|
| // Ephemeral state, valid only during Manage.
|
| TileManagerBin bin[NUM_BIN_PRIORITIES];
|
| TileManagerBin tree_bin[NUM_TREES];
|
| - // The bin that the tile would have if the GPU memory manager had a maximally permissive policy,
|
| - // send to the GPU memory manager to determine policy.
|
| + // The bin that the tile would have if the GPU memory manager had a
|
| + // maximally permissive policy, send to the GPU memory manager to
|
| + // determine policy.
|
| TileManagerBin gpu_memmgr_stats_bin;
|
| TileResolution resolution;
|
| float time_to_needed_in_seconds;
|
| +
|
| + private:
|
| + friend class base::RefCounted<ManagedTileState>;
|
| +
|
| + ~ManagedTileState();
|
| };
|
|
|
| // This class manages tiles, deciding which should get rasterized and which
|
| @@ -107,13 +135,15 @@ class CC_EXPORT TileManager {
|
| void CheckForCompletedTileUploads();
|
|
|
| scoped_ptr<base::Value> AsValue() const;
|
| - void GetMemoryStats(size_t* memoryRequiredBytes,
|
| - size_t* memoryNiceToHaveBytes,
|
| - size_t* memoryUsedBytes) const;
|
| + void GetMemoryStats(size_t* memory_required_bytes,
|
| + size_t* memory_nice_to_have_bytes,
|
| + size_t* memory_used_bytes) const;
|
| void GetRenderingStats(RenderingStats* stats);
|
| bool HasPendingWorkScheduled(WhichTree tree) const;
|
|
|
| - const MemoryHistory::Entry& memory_stats_from_last_assign() const { return memory_stats_from_last_assign_; }
|
| + const MemoryHistory::Entry& memory_stats_from_last_assign() const {
|
| + return memory_stats_from_last_assign_;
|
| + }
|
|
|
| protected:
|
| // Methods called by Tile
|
| @@ -128,9 +158,15 @@ class CC_EXPORT TileManager {
|
| }
|
|
|
| private:
|
| + friend class ManagedTileState;
|
| +
|
| + // Methods called by ManagedTileState
|
| + 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;
|
| @@ -138,21 +174,21 @@ class CC_EXPORT TileManager {
|
| 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> mts, skia::LazyPixelRef* pixel_ref);
|
| void OnImageDecodeTaskCompleted(
|
| - scoped_refptr<Tile> tile, uint32_t pixel_ref_id);
|
| - bool CanDispatchRasterTask(Tile* tile);
|
| - void DispatchOneRasterTask(scoped_refptr<Tile> tile);
|
| + scoped_refptr<ManagedTileState> mts, uint32_t pixel_ref_id);
|
| + bool CanDispatchRasterTask(ManagedTileState* mts);
|
| + void DispatchOneRasterTask(scoped_refptr<ManagedTileState> mts);
|
| void OnRasterTaskCompleted(
|
| - scoped_refptr<Tile> tile,
|
| + scoped_refptr<ManagedTileState> mts,
|
| scoped_ptr<ResourcePool::Resource> resource,
|
| int manage_tiles_call_count_when_dispatched);
|
| - void DidFinishTileInitialization(Tile* tile);
|
| - void DidTileRasterStateChange(Tile* tile, TileRasterState state);
|
| - void DidTileBinChange(Tile* tile,
|
| + void DidFinishTileInitialization(ManagedTileState* mts);
|
| + void DidTileRasterStateChange(ManagedTileState* mts, TileRasterState state);
|
| + void DidTileBinChange(ManagedTileState* mts,
|
| TileManagerBin bin,
|
| WhichTree tree);
|
| scoped_ptr<Value> GetMemoryRequirementsAsValue() const;
|
| @@ -173,11 +209,16 @@ class CC_EXPORT TileManager {
|
|
|
| GlobalStateThatImpactsTilePriority global_state_;
|
|
|
| - typedef std::vector<Tile*> TileVector;
|
| - TileVector tiles_;
|
| + typedef base::hash_set<Tile*> TileSet;
|
| + TileSet tiles_;
|
| +
|
| + typedef std::vector<scoped_refptr<ManagedTileState> > ManagedTileVector;
|
| + ManagedTileVector managed_tiles_;
|
| +
|
| + typedef std::vector<ManagedTileState*> TileVector;
|
| 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_;
|
| @@ -185,7 +226,7 @@ class CC_EXPORT TileManager {
|
| 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 ever_exceeded_memory_budget_;
|
|
|