| OLD | NEW | 
|    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_TILE_MANAGER_H_ |    5 #ifndef CC_RESOURCES_TILE_MANAGER_H_ | 
|    6 #define CC_RESOURCES_TILE_MANAGER_H_ |    6 #define CC_RESOURCES_TILE_MANAGER_H_ | 
|    7  |    7  | 
|    8 #include <queue> |    8 #include <queue> | 
|    9 #include <set> |    9 #include <set> | 
|   10 #include <vector> |   10 #include <vector> | 
|   11  |   11  | 
|   12 #include "base/containers/hash_tables.h" |   12 #include "base/containers/hash_tables.h" | 
|   13 #include "base/memory/scoped_ptr.h" |   13 #include "base/memory/scoped_ptr.h" | 
|   14 #include "base/values.h" |   14 #include "base/values.h" | 
|   15 #include "cc/base/ref_counted_managed.h" |   15 #include "cc/base/ref_counted_managed.h" | 
|   16 #include "cc/debug/rendering_stats_instrumentation.h" |   16 #include "cc/debug/rendering_stats_instrumentation.h" | 
|   17 #include "cc/resources/managed_tile_state.h" |   17 #include "cc/resources/managed_tile_state.h" | 
|   18 #include "cc/resources/memory_history.h" |   18 #include "cc/resources/memory_history.h" | 
|   19 #include "cc/resources/picture_pile_impl.h" |   19 #include "cc/resources/picture_pile_impl.h" | 
|   20 #include "cc/resources/prioritized_tile_set.h" |   20 #include "cc/resources/prioritized_tile_set.h" | 
|   21 #include "cc/resources/raster_worker_pool.h" |   21 #include "cc/resources/raster_worker_pool.h" | 
|   22 #include "cc/resources/resource_pool.h" |   22 #include "cc/resources/resource_pool.h" | 
|   23 #include "cc/resources/tile.h" |   23 #include "cc/resources/tile.h" | 
 |   24 #include "cc/resources/tile_bundle.h" | 
|   24  |   25  | 
|   25 namespace cc { |   26 namespace cc { | 
|   26 class ResourceProvider; |   27 class ResourceProvider; | 
|   27  |   28  | 
|   28 class CC_EXPORT TileManagerClient { |   29 class CC_EXPORT TileManagerClient { | 
|   29  public: |   30  public: | 
|   30   virtual void NotifyReadyToActivate() = 0; |   31   virtual void NotifyReadyToActivate() = 0; | 
|   31  |   32  | 
|   32  protected: |   33  protected: | 
|   33   virtual ~TileManagerClient() {} |   34   virtual ~TileManagerClient() {} | 
|   34 }; |   35 }; | 
|   35  |   36  | 
|   36 struct RasterTaskCompletionStats { |   37 struct RasterTaskCompletionStats { | 
|   37   RasterTaskCompletionStats(); |   38   RasterTaskCompletionStats(); | 
|   38  |   39  | 
|   39   size_t completed_count; |   40   size_t completed_count; | 
|   40   size_t canceled_count; |   41   size_t canceled_count; | 
|   41 }; |   42 }; | 
|   42 scoped_ptr<base::Value> RasterTaskCompletionStatsAsValue( |   43 scoped_ptr<base::Value> RasterTaskCompletionStatsAsValue( | 
|   43     const RasterTaskCompletionStats& stats); |   44     const RasterTaskCompletionStats& stats); | 
|   44  |   45  | 
|   45 // This class manages tiles, deciding which should get rasterized and which |   46 // This class manages tiles, deciding which should get rasterized and which | 
|   46 // should no longer have any memory assigned to them. Tile objects are "owned" |   47 // should no longer have any memory assigned to them. Tile objects are "owned" | 
|   47 // by layers; they automatically register with the manager when they are |   48 // by layers; they automatically register with the manager when they are | 
|   48 // created, and unregister from the manager when they are deleted. |   49 // created, and unregister from the manager when they are deleted. | 
|   49 class CC_EXPORT TileManager : public RasterWorkerPoolClient, |   50 class CC_EXPORT TileManager : public RasterWorkerPoolClient, | 
|   50                               public RefCountedManager<Tile> { |   51                               public RefCountedManager<Tile>, | 
 |   52                               public RefCountedManager<TileBundle> { | 
|   51  public: |   53  public: | 
|   52   static scoped_ptr<TileManager> Create( |   54   static scoped_ptr<TileManager> Create( | 
|   53       TileManagerClient* client, |   55       TileManagerClient* client, | 
|   54       ResourceProvider* resource_provider, |   56       ResourceProvider* resource_provider, | 
|   55       size_t num_raster_threads, |   57       size_t num_raster_threads, | 
|   56       RenderingStatsInstrumentation* rendering_stats_instrumentation, |   58       RenderingStatsInstrumentation* rendering_stats_instrumentation, | 
|   57       bool use_map_image, |   59       bool use_map_image, | 
|   58       size_t max_transfer_buffer_usage_bytes, |   60       size_t max_transfer_buffer_usage_bytes, | 
|   59       size_t max_raster_usage_bytes); |   61       size_t max_raster_usage_bytes); | 
|   60   virtual ~TileManager(); |   62   virtual ~TileManager(); | 
|   61  |   63  | 
|   62   void ManageTiles(const GlobalStateThatImpactsTilePriority& state); |   64   void ManageTiles(const GlobalStateThatImpactsTilePriority& state); | 
|   63  |   65  | 
|   64   // Returns true when visible tiles have been initialized. |   66   // Returns true when visible tiles have been initialized. | 
|   65   bool UpdateVisibleTiles(); |   67   bool UpdateVisibleTiles(); | 
|   66  |   68  | 
|   67   scoped_refptr<Tile> CreateTile(PicturePileImpl* picture_pile, |   69   scoped_refptr<Tile> CreateTile(PicturePileImpl* picture_pile, | 
|   68                                  gfx::Size tile_size, |   70                                  gfx::Size tile_size, | 
|   69                                  gfx::Rect content_rect, |   71                                  gfx::Rect content_rect, | 
|   70                                  gfx::Rect opaque_rect, |   72                                  gfx::Rect opaque_rect, | 
|   71                                  float contents_scale, |   73                                  float contents_scale, | 
|   72                                  int layer_id, |   74                                  int layer_id, | 
|   73                                  int source_frame_number, |   75                                  int source_frame_number, | 
|   74                                  bool can_use_lcd_text); |   76                                  bool can_use_lcd_text); | 
|   75  |   77  | 
 |   78   scoped_refptr<TileBundle> CreateTileBundle(int width, | 
 |   79                                              int height, | 
 |   80                                              int offset_x, | 
 |   81                                              int offset_y); | 
 |   82  | 
|   76   scoped_ptr<base::Value> BasicStateAsValue() const; |   83   scoped_ptr<base::Value> BasicStateAsValue() const; | 
|   77   scoped_ptr<base::Value> AllTilesAsValue() const; |   84   scoped_ptr<base::Value> AllTilesAsValue() const; | 
|   78   void GetMemoryStats(size_t* memory_required_bytes, |   85   void GetMemoryStats(size_t* memory_required_bytes, | 
|   79                       size_t* memory_nice_to_have_bytes, |   86                       size_t* memory_nice_to_have_bytes, | 
|   80                       size_t* memory_allocated_bytes, |   87                       size_t* memory_allocated_bytes, | 
|   81                       size_t* memory_used_bytes) const; |   88                       size_t* memory_used_bytes) const; | 
|   82  |   89  | 
|   83   const MemoryHistory::Entry& memory_stats_from_last_assign() const { |   90   const MemoryHistory::Entry& memory_stats_from_last_assign() const { | 
|   84     return memory_stats_from_last_assign_; |   91     return memory_stats_from_last_assign_; | 
|   85   } |   92   } | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
|  116   } |  123   } | 
|  117  |  124  | 
|  118  protected: |  125  protected: | 
|  119   TileManager(TileManagerClient* client, |  126   TileManager(TileManagerClient* client, | 
|  120               ResourceProvider* resource_provider, |  127               ResourceProvider* resource_provider, | 
|  121               scoped_ptr<RasterWorkerPool> raster_worker_pool, |  128               scoped_ptr<RasterWorkerPool> raster_worker_pool, | 
|  122               size_t num_raster_threads, |  129               size_t num_raster_threads, | 
|  123               size_t max_raster_usage_bytes, |  130               size_t max_raster_usage_bytes, | 
|  124               RenderingStatsInstrumentation* rendering_stats_instrumentation); |  131               RenderingStatsInstrumentation* rendering_stats_instrumentation); | 
|  125  |  132  | 
|  126   // Methods called by Tile |  133   // Methods called by Tile and TileBundle | 
 |  134   friend class TileBundle; | 
|  127   friend class Tile; |  135   friend class Tile; | 
 |  136  | 
|  128   void DidChangeTilePriority(Tile* tile); |  137   void DidChangeTilePriority(Tile* tile); | 
 |  138   void DidChangeTileBundlePriority(TileBundle* bundle); | 
|  129  |  139  | 
|  130   void CleanUpReleasedTiles(); |  140   void CleanUpReleasedTiles(); | 
|  131  |  141  | 
|  132   // Overriden from RefCountedManager<Tile>: |  142   // Overriden from RefCountedManager<Tile>: | 
|  133   virtual void Release(Tile* tile) OVERRIDE; |  143   virtual void Release(Tile* tile) OVERRIDE; | 
|  134  |  144  | 
 |  145   // Overridden from RefCountedManager<TileBundle>: | 
 |  146   virtual void Release(TileBundle* tile) OVERRIDE; | 
 |  147  | 
|  135   // Overriden from RasterWorkerPoolClient: |  148   // Overriden from RasterWorkerPoolClient: | 
|  136   virtual bool ShouldForceTasksRequiredForActivationToComplete() const |  149   virtual bool ShouldForceTasksRequiredForActivationToComplete() const | 
|  137       OVERRIDE; |  150       OVERRIDE; | 
|  138   virtual void DidFinishRunningTasks() OVERRIDE; |  151   virtual void DidFinishRunningTasks() OVERRIDE; | 
|  139   virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE; |  152   virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE; | 
|  140  |  153  | 
|  141   typedef std::vector<Tile*> TileVector; |  154   typedef std::vector<Tile*> TileVector; | 
|  142   typedef std::set<Tile*> TileSet; |  155   typedef std::set<Tile*> TileSet; | 
|  143  |  156  | 
|  144   // Virtual for test |  157   // Virtual for test | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  178   void UpdatePrioritizedTileSetIfNeeded(); |  191   void UpdatePrioritizedTileSetIfNeeded(); | 
|  179  |  192  | 
|  180   TileManagerClient* client_; |  193   TileManagerClient* client_; | 
|  181   scoped_ptr<ResourcePool> resource_pool_; |  194   scoped_ptr<ResourcePool> resource_pool_; | 
|  182   scoped_ptr<RasterWorkerPool> raster_worker_pool_; |  195   scoped_ptr<RasterWorkerPool> raster_worker_pool_; | 
|  183   GlobalStateThatImpactsTilePriority global_state_; |  196   GlobalStateThatImpactsTilePriority global_state_; | 
|  184  |  197  | 
|  185   typedef base::hash_map<Tile::Id, Tile*> TileMap; |  198   typedef base::hash_map<Tile::Id, Tile*> TileMap; | 
|  186   TileMap tiles_; |  199   TileMap tiles_; | 
|  187  |  200  | 
 |  201   typedef base::hash_map<TileBundle::Id, TileBundle*> TileBundleMap; | 
 |  202   TileBundleMap bundles_; | 
 |  203  | 
|  188   PrioritizedTileSet prioritized_tiles_; |  204   PrioritizedTileSet prioritized_tiles_; | 
|  189   bool prioritized_tiles_dirty_; |  205   bool prioritized_tiles_dirty_; | 
|  190  |  206  | 
|  191   bool all_tiles_that_need_to_be_rasterized_have_memory_; |  207   bool all_tiles_that_need_to_be_rasterized_have_memory_; | 
|  192   bool all_tiles_required_for_activation_have_memory_; |  208   bool all_tiles_required_for_activation_have_memory_; | 
|  193  |  209  | 
|  194   size_t memory_required_bytes_; |  210   size_t memory_required_bytes_; | 
|  195   size_t memory_nice_to_have_bytes_; |  211   size_t memory_nice_to_have_bytes_; | 
|  196  |  212  | 
|  197   size_t bytes_releasable_; |  213   size_t bytes_releasable_; | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
|  209   typedef base::hash_map<uint32_t, RasterWorkerPool::Task> PixelRefTaskMap; |  225   typedef base::hash_map<uint32_t, RasterWorkerPool::Task> PixelRefTaskMap; | 
|  210   typedef base::hash_map<int, PixelRefTaskMap> LayerPixelRefTaskMap; |  226   typedef base::hash_map<int, PixelRefTaskMap> LayerPixelRefTaskMap; | 
|  211   LayerPixelRefTaskMap image_decode_tasks_; |  227   LayerPixelRefTaskMap image_decode_tasks_; | 
|  212  |  228  | 
|  213   typedef base::hash_map<int, int> LayerCountMap; |  229   typedef base::hash_map<int, int> LayerCountMap; | 
|  214   LayerCountMap used_layer_counts_; |  230   LayerCountMap used_layer_counts_; | 
|  215  |  231  | 
|  216   RasterTaskCompletionStats update_visible_tiles_stats_; |  232   RasterTaskCompletionStats update_visible_tiles_stats_; | 
|  217  |  233  | 
|  218   std::vector<Tile*> released_tiles_; |  234   std::vector<Tile*> released_tiles_; | 
 |  235   std::vector<TileBundle*> released_tile_bundles_; | 
|  219  |  236  | 
|  220   DISALLOW_COPY_AND_ASSIGN(TileManager); |  237   DISALLOW_COPY_AND_ASSIGN(TileManager); | 
|  221 }; |  238 }; | 
|  222  |  239  | 
|  223 }  // namespace cc |  240 }  // namespace cc | 
|  224  |  241  | 
|  225 #endif  // CC_RESOURCES_TILE_MANAGER_H_ |  242 #endif  // CC_RESOURCES_TILE_MANAGER_H_ | 
| OLD | NEW |