tile_manager.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_RESOURCES_TILE_MANAGER_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_RESOURCES_TILE_MANAGER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include <deque> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <queue> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <set> 11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include <utility> 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "cc/base/ref_counted_managed.h" 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/base/unique_notifier.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/debug/rendering_stats_instrumentation.h" 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "cc/resources/eviction_tile_priority_queue.h" 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "cc/resources/managed_tile_state.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/memory_history.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/picture_pile_impl.h" 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/resources/prioritized_tile_set.h" 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "cc/resources/raster_tile_priority_queue.h" 26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "cc/resources/rasterizer.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/resource_pool.h" 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "cc/resources/tile.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace base { 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace debug { 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ConvertableToTraceFormat; 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class TracedValue; 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class PictureLayerImpl; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceProvider; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT TileManagerClient { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Returns the set of layers that the tile manager should consider for raster. 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // TODO(vmpstr): Change the way we determine if we are ready to activate, so 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // that this can be removed. 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual const std::vector<PictureLayerImpl*>& GetPictureLayers() const = 0; 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Called when all tiles marked as required for activation are ready to draw. 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void NotifyReadyToActivate() = 0; 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Called when the visible representation of a tile might have changed. Some 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // examples are: 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // - Tile version initialized. 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // - Tile resources freed. 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // - Tile marked for on-demand raster. 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void NotifyTileStateChanged(const Tile* tile) = 0; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Given an empty raster tile priority queue, this will build a priority queue 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // that will return tiles in order in which they should be rasterized. 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Note if the queue was previous built, Reset must be called on it. 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void BuildRasterQueue(RasterTilePriorityQueue* queue, 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TreePriority tree_priority) = 0; 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Given an empty eviction tile priority queue, this will build a priority 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // queue that will return tiles in order in which they should be evicted. 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Note if the queue was previous built, Reset must be called on it. 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void BuildEvictionQueue(EvictionTilePriorityQueue* queue, 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TreePriority tree_priority) = 0; 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TileManagerClient() {} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochstruct RasterTaskCompletionStats { 75ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RasterTaskCompletionStats(); 76ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 77ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch size_t completed_count; 78ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch size_t canceled_count; 79ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}; 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)scoped_refptr<base::debug::ConvertableToTraceFormat> 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RasterTaskCompletionStatsAsValue(const RasterTaskCompletionStats& stats); 82ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class manages tiles, deciding which should get rasterized and which 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// should no longer have any memory assigned to them. Tile objects are "owned" 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// by layers; they automatically register with the manager when they are 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// created, and unregister from the manager when they are deleted. 87a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass CC_EXPORT TileManager : public RasterizerClient, 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public RefCountedManager<Tile> { 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static scoped_ptr<TileManager> Create( 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) TileManagerClient* client, 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::SequencedTaskRunner* task_runner, 93a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ResourcePool* resource_pool, 94a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch Rasterizer* rasterizer, 95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch RenderingStatsInstrumentation* rendering_stats_instrumentation); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TileManager(); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void ManageTiles(const GlobalStateThatImpactsTilePriority& state); 99ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 100ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Returns true when visible tiles have been initialized. 101ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool UpdateVisibleTiles(); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scoped_refptr<Tile> CreateTile(PicturePileImpl* picture_pile, 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Size& tile_size, 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Rect& content_rect, 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Rect& opaque_rect, 10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) float contents_scale, 10868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int layer_id, 10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int source_frame_number, 110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int flags); 111a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<base::debug::ConvertableToTraceFormat> BasicStateAsValue() 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const; 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void BasicStateAsValueInto(base::debug::TracedValue* dict) const; 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void AllTilesAsValueInto(base::debug::TracedValue* array) const; 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const MemoryHistory::Entry& memory_stats_from_last_assign() const { 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return memory_stats_from_last_assign_; 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 120c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void InitializeTilesWithResourcesForTesting(const std::vector<Tile*>& tiles) { 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for (size_t i = 0; i < tiles.size(); ++i) { 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ManagedTileState& mts = tiles[i]->managed_state(); 1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ManagedTileState::TileVersion& tile_version = 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) mts.tile_versions[HIGH_QUALITY_RASTER_MODE]; 1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch tile_version.resource_ = resource_pool_->AcquireResource(gfx::Size(1, 1)); 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bytes_releasable_ += BytesConsumedIfAllocated(tiles[i]); 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ++resources_releasable_; 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 133a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void ReleaseTileResourcesForTesting(const std::vector<Tile*>& tiles) { 134a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch for (size_t i = 0; i < tiles.size(); ++i) { 135a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch Tile* tile = tiles[i]; 136a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) { 137a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch FreeResourceForTile(tile, static_cast<RasterMode>(mode)); 138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 139a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 140a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 141a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SetGlobalStateForTesting( 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GlobalStateThatImpactsTilePriority& state) { 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Soft limit is used for resource pool such that 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // memory returns to soft limit after going over. 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (state != global_state_) { 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch global_state_ = state; 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prioritized_tiles_dirty_ = true; 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void SetRasterizerForTesting(Rasterizer* rasterizer); 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void FreeResourcesAndCleanUpReleasedTilesForTesting() { 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prioritized_tiles_.Clear(); 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FreeResourcesForReleasedTiles(); 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CleanUpReleasedTiles(); 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 16190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) TileManager(TileManagerClient* client, 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::SequencedTaskRunner* task_runner, 163a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ResourcePool* resource_pool, 164a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch Rasterizer* rasterizer, 165c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch RenderingStatsInstrumentation* rendering_stats_instrumentation); 16690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Methods called by Tile 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch friend class Tile; 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void DidChangeTilePriority(Tile* tile); 170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void FreeResourcesForReleasedTiles(); 17268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void CleanUpReleasedTiles(); 17368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Overriden from RefCountedManager<Tile>: 17568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void Release(Tile* tile) OVERRIDE; 17668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 177a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Overriden from RasterizerClient: 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool ShouldForceTasksRequiredForActivationToComplete() const OVERRIDE; 1797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void DidFinishRunningTasks() OVERRIDE; 1807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE; 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch typedef std::vector<Tile*> TileVector; 1837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch typedef std::set<Tile*> TileSet; 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Virtual for test 1867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void ScheduleTasks( 1877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const TileVector& tiles_that_need_to_be_rasterized); 188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void AssignGpuMemoryToTiles(PrioritizedTileSet* tiles, 190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TileVector* tiles_that_need_to_be_rasterized); 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void GetTilesWithAssignedBins(PrioritizedTileSet* tiles); 192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnImageDecodeTaskCompleted(int layer_id, 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SkPixelRef* pixel_ref, 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool was_canceled); 197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnRasterTaskCompleted(Tile::Id tile, 198a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<ScopedResource> resource, 199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) RasterMode raster_mode, 200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const PicturePileImpl::Analysis& analysis, 201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool was_canceled); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch inline size_t BytesConsumedIfAllocated(const Tile* tile) const { 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return Resource::MemorySizeBytes(tile->size(), 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch resource_pool_->resource_format()); 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void FreeResourceForTile(Tile* tile, RasterMode mode); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void FreeResourcesForTile(Tile* tile); 210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void FreeUnusedResourcesForTile(Tile* tile); 211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(Tile* tile); 212a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_refptr<ImageDecodeTask> CreateImageDecodeTask(Tile* tile, 213a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch SkPixelRef* pixel_ref); 214a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_refptr<RasterTask> CreateRasterTask(Tile* tile); 215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void UpdatePrioritizedTileSetIfNeeded(); 216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool IsReadyToActivate() const; 218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void CheckIfReadyToActivate(); 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TileManagerClient* client_; 221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> task_runner_; 222a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ResourcePool* resource_pool_; 223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Rasterizer* rasterizer_; 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GlobalStateThatImpactsTilePriority global_state_; 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch typedef base::hash_map<Tile::Id, Tile*> TileMap; 2277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch TileMap tiles_; 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PrioritizedTileSet prioritized_tiles_; 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool prioritized_tiles_dirty_; 231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool all_tiles_that_need_to_be_rasterized_have_memory_; 233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool all_tiles_required_for_activation_have_memory_; 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t bytes_releasable_; 236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t resources_releasable_; 2373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool ever_exceeded_memory_budget_; 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MemoryHistory::Entry memory_stats_from_last_assign_; 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderingStatsInstrumentation* rendering_stats_instrumentation_; 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool did_initialize_visible_tile_; 244d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) bool did_check_for_completed_tasks_since_last_schedule_tasks_; 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 246a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch typedef base::hash_map<uint32_t, scoped_refptr<ImageDecodeTask> > 247a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PixelRefTaskMap; 2487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) typedef base::hash_map<int, PixelRefTaskMap> LayerPixelRefTaskMap; 2497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) LayerPixelRefTaskMap image_decode_tasks_; 2507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 25158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) typedef base::hash_map<int, int> LayerCountMap; 25258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LayerCountMap used_layer_counts_; 25358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 254ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RasterTaskCompletionStats update_visible_tiles_stats_; 255ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 25668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::vector<Tile*> released_tiles_; 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 258c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ResourceFormat resource_format_; 259c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Queue used when scheduling raster tasks. 261cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) RasterTaskQueue raster_queue_; 262a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 263a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::vector<scoped_refptr<RasterTask> > orphan_raster_tasks_; 26468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 265cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) UniqueNotifier ready_to_activate_check_notifier_; 266cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TileManager); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_RESOURCES_TILE_MANAGER_H_ 273