tile_manager.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <queue>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <set>
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector>
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h"
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "cc/base/ref_counted_managed.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/debug/rendering_stats_instrumentation.h"
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "cc/resources/managed_tile_state.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/memory_history.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/picture_pile_impl.h"
20bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "cc/resources/prioritized_tile_set.h"
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/resources/raster_worker_pool.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/resource_pool.h"
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "cc/resources/tile.h"
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class RasterWorkerPoolDelegate;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceProvider;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT TileManagerClient {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void NotifyReadyToActivate() = 0;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~TileManagerClient() {}
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochstruct RasterTaskCompletionStats {
38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  RasterTaskCompletionStats();
39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  size_t completed_count;
41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  size_t canceled_count;
42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch};
43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochscoped_ptr<base::Value> RasterTaskCompletionStatsAsValue(
44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    const RasterTaskCompletionStats& stats);
45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class manages tiles, deciding which should get rasterized and which
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// should no longer have any memory assigned to them. Tile objects are "owned"
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// by layers; they automatically register with the manager when they are
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// created, and unregister from the manager when they are deleted.
5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class CC_EXPORT TileManager : public RasterWorkerPoolClient,
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              public RefCountedManager<Tile> {
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  static scoped_ptr<TileManager> Create(
5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      TileManagerClient* client,
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      base::SequencedTaskRunner* task_runner,
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      ResourceProvider* resource_provider,
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ContextProvider* context_provider,
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      RenderingStatsInstrumentation* rendering_stats_instrumentation,
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      bool use_map_image,
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      bool use_rasterize_on_demand,
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      size_t max_transfer_buffer_usage_bytes,
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      size_t max_raster_usage_bytes,
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      unsigned map_image_texture_target);
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~TileManager();
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void ManageTiles(const GlobalStateThatImpactsTilePriority& state);
67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Returns true when visible tiles have been initialized.
69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  bool UpdateVisibleTiles();
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  scoped_refptr<Tile> CreateTile(PicturePileImpl* picture_pile,
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                 const gfx::Size& tile_size,
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                 const gfx::Rect& content_rect,
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                 const gfx::Rect& opaque_rect,
7568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                 float contents_scale,
7668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                 int layer_id,
7768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                 int source_frame_number,
78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                 int flags);
79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> BasicStateAsValue() const;
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> AllTilesAsValue() const;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void GetMemoryStats(size_t* memory_required_bytes,
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      size_t* memory_nice_to_have_bytes,
843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                      size_t* memory_allocated_bytes,
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      size_t* memory_used_bytes) const;
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const MemoryHistory::Entry& memory_stats_from_last_assign() const {
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return memory_stats_from_last_assign_;
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void InitializeTilesWithResourcesForTesting(
923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const std::vector<Tile*>& tiles,
933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      ResourceProvider* resource_provider) {
943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    for (size_t i = 0; i < tiles.size(); ++i) {
953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      ManagedTileState& mts = tiles[i]->managed_state();
963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      ManagedTileState::TileVersion& tile_version =
973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          mts.tile_versions[HIGH_QUALITY_NO_LCD_RASTER_MODE];
983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      tile_version.resource_ = resource_pool_->AcquireResource(gfx::Size(1, 1));
1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      bytes_releasable_ += BytesConsumedIfAllocated(tiles[i]);
1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      ++resources_releasable_;
1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    }
1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SetGlobalStateForTesting(
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const GlobalStateThatImpactsTilePriority& state) {
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Soft limit is used for resource pool such that
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // memory returns to soft limit after going over.
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (state != global_state_) {
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      global_state_ = state;
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      prioritized_tiles_dirty_ = true;
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      resource_pool_->SetResourceUsageLimits(
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          global_state_.soft_memory_limit_in_bytes,
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          global_state_.unused_memory_limit_in_bytes,
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          global_state_.num_resources_limit);
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  TileManager(TileManagerClient* client,
122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)              base::SequencedTaskRunner* task_runner,
12390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)              ResourceProvider* resource_provider,
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)              ContextProvider* context_provider,
12590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)              scoped_ptr<RasterWorkerPool> raster_worker_pool,
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)              scoped_ptr<RasterWorkerPool> direct_raster_worker_pool,
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              size_t max_raster_usage_bytes,
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)              RenderingStatsInstrumentation* rendering_stats_instrumentation,
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)              bool use_rasterize_on_demand);
13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Methods called by Tile
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class Tile;
1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void DidChangeTilePriority(Tile* tile);
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void CleanUpReleasedTiles();
13668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Overriden from RefCountedManager<Tile>:
13868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void Release(Tile* tile) OVERRIDE;
13968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Overriden from RasterWorkerPoolClient:
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool ShouldForceTasksRequiredForActivationToComplete() const OVERRIDE;
1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void DidFinishRunningTasks() OVERRIDE;
1437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE;
1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  typedef std::vector<Tile*> TileVector;
1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  typedef std::set<Tile*> TileSet;
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Virtual for test
1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void ScheduleTasks(
1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const TileVector& tiles_that_need_to_be_rasterized);
151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void AssignGpuMemoryToTiles(PrioritizedTileSet* tiles,
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              TileVector* tiles_that_need_to_be_rasterized);
154bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  void GetTilesWithAssignedBins(PrioritizedTileSet* tiles);
155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  enum RasterWorkerPoolType {
1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    RASTER_WORKER_POOL_TYPE_DEFAULT,
1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    RASTER_WORKER_POOL_TYPE_DIRECT,
1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    NUM_RASTER_WORKER_POOL_TYPES
1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnImageDecodeTaskCompleted(int layer_id,
1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                  SkPixelRef* pixel_ref,
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                  bool was_canceled);
166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnRasterTaskCompleted(Tile::Id tile,
167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                             scoped_ptr<ScopedResource> resource,
168a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                             RasterMode raster_mode,
169a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                             const PicturePileImpl::Analysis& analysis,
170a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                             bool was_canceled);
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  inline size_t BytesConsumedIfAllocated(const Tile* tile) const {
17368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return Resource::MemorySizeBytes(tile->size(),
17468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                     raster_worker_pool_->GetResourceFormat());
17568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
17668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void FreeResourceForTile(Tile* tile, RasterMode mode);
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void FreeResourcesForTile(Tile* tile);
179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void FreeUnusedResourcesForTile(Tile* tile);
180a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_refptr<internal::WorkerPoolTask> CreateImageDecodeTask(
181a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      Tile* tile,
182a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      SkPixelRef* pixel_ref);
183a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_refptr<internal::RasterWorkerPoolTask> CreateRasterTask(Tile* tile);
184eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<base::Value> GetMemoryRequirementsAsValue() const;
18568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void UpdatePrioritizedTileSetIfNeeded();
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileManagerClient* client_;
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ContextProvider* context_provider_;
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ResourcePool> resource_pool_;
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<RasterWorkerPool> raster_worker_pool_;
1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<RasterWorkerPool> direct_raster_worker_pool_;
1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<RasterWorkerPoolDelegate> raster_worker_pool_delegate_;
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GlobalStateThatImpactsTilePriority global_state_;
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  typedef base::hash_map<Tile::Id, Tile*> TileMap;
1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  TileMap tiles_;
1977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
198bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  PrioritizedTileSet prioritized_tiles_;
1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bool prioritized_tiles_dirty_;
2007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
201ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  bool all_tiles_that_need_to_be_rasterized_have_memory_;
2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool all_tiles_required_for_activation_have_memory_;
20358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
20458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  size_t memory_required_bytes_;
20558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  size_t memory_nice_to_have_bytes_;
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  size_t bytes_releasable_;
2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  size_t resources_releasable_;
209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  size_t max_raster_usage_bytes_;
2103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool ever_exceeded_memory_budget_;
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MemoryHistory::Entry memory_stats_from_last_assign_;
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderingStatsInstrumentation* rendering_stats_instrumentation_;
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool did_initialize_visible_tile_;
217d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  bool did_check_for_completed_tasks_since_last_schedule_tasks_;
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  typedef base::hash_map<uint32_t, scoped_refptr<internal::WorkerPoolTask> >
220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      PixelRefTaskMap;
2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  typedef base::hash_map<int, PixelRefTaskMap> LayerPixelRefTaskMap;
2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  LayerPixelRefTaskMap image_decode_tasks_;
2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
22458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  typedef base::hash_map<int, int> LayerCountMap;
22558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  LayerCountMap used_layer_counts_;
22658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
227ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  RasterTaskCompletionStats update_visible_tiles_stats_;
228ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
22968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  std::vector<Tile*> released_tiles_;
2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool use_rasterize_on_demand_;
2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Queues used when scheduling raster tasks.
234a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  RasterTaskQueue raster_queue_[NUM_RASTER_WORKER_POOL_TYPES];
235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
236a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::vector<scoped_refptr<internal::Task> > orphan_raster_tasks_;
23768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TileManager);
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_RESOURCES_TILE_MANAGER_H_
244