tile_manager.h revision 868fa2fe829687343ffae624259930155e16dbd8
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)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/hash_tables.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/debug/rendering_stats_instrumentation.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/memory_history.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/picture_pile_impl.h"
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/resources/raster_worker_pool.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/resource_pool.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/tile_priority.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceProvider;
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Tile;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TileVersion;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Low quality implies no lcd test;
28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// high quality implies lcd text.
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Note that the order of these matters, from "better" to "worse" in terms of
30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// quality.
31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)enum TileRasterMode {
32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  HIGH_QUALITY_RASTER_MODE = 0,
33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  HIGH_QUALITY_NO_LCD_RASTER_MODE = 1,
34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  LOW_QUALITY_RASTER_MODE = 2,
35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  NUM_RASTER_MODES = 3
36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)};
37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT TileManagerClient {
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidInitializeVisibleTile() = 0;
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual bool
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      ShouldForceTileUploadsRequiredForActivationToComplete() const = 0;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~TileManagerClient() {}
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tile manager classifying tiles into a few basic
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// bins:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum TileManagerBin {
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NOW_BIN = 0,  // Needed ASAP.
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SOON_BIN = 1,  // Impl-side version of prepainting.
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EVENTUALLY_BIN = 2,  // Nice to have, if we've got memory and time.
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NEVER_BIN = 3,  // Dont bother.
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NUM_BINS = 4
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Be sure to update TileManagerBinAsValue when adding new fields.
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::Value> TileManagerBinAsValue(
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TileManagerBin bin);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum TileManagerBinPriority {
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  HIGH_PRIORITY_BIN = 0,
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LOW_PRIORITY_BIN = 1,
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NUM_BIN_PRIORITIES = 2
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::Value> TileManagerBinPriorityAsValue(
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TileManagerBinPriority bin);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class manages tiles, deciding which should get rasterized and which
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// should no longer have any memory assigned to them. Tile objects are "owned"
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// by layers; they automatically register with the manager when they are
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// created, and unregister from the manager when they are deleted.
73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class CC_EXPORT TileManager {
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  typedef base::hash_set<uint32_t> PixelRefSet;
76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  static scoped_ptr<TileManager> Create(
7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      TileManagerClient* client,
7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      ResourceProvider* resource_provider,
8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      size_t num_raster_threads,
8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      bool use_color_estimator,
8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      RenderingStatsInstrumentation* rendering_stats_instrumentation,
8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      bool use_map_image);
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~TileManager();
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const GlobalStateThatImpactsTilePriority& GlobalState() const {
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return global_state_;
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetGlobalState(const GlobalStateThatImpactsTilePriority& state);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ManageTiles();
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CheckForCompletedTileUploads();
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> BasicStateAsValue() const;
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> AllTilesAsValue() const;
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void GetMemoryStats(size_t* memory_required_bytes,
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      size_t* memory_nice_to_have_bytes,
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      size_t* memory_used_bytes) const;
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const MemoryHistory::Entry& memory_stats_from_last_assign() const {
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return memory_stats_from_last_assign_;
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool AreTilesRequiredForActivationReady() const {
10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return tiles_that_need_to_be_initialized_for_activation_.empty();
10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  TileManager(TileManagerClient* client,
11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)              ResourceProvider* resource_provider,
11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)              scoped_ptr<RasterWorkerPool> raster_worker_pool,
11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)              size_t num_raster_threads,
11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)              bool use_color_estimator,
114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)              RenderingStatsInstrumentation* rendering_stats_instrumentation);
11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Methods called by Tile
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class Tile;
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RegisterTile(Tile* tile);
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UnregisterTile(Tile* tile);
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Virtual for test
122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void ScheduleTasks();
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Data that is passed to raster tasks.
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  struct RasterTaskMetadata {
127b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      scoped_ptr<base::Value> AsValue() const;
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool is_tile_in_pending_tree_now_bin;
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TileResolution tile_resolution;
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int layer_id;
131b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      const void* tile_id;
13290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      int source_frame_number;
133868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      TileRasterMode raster_mode;
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void AssignBinsToTiles();
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SortTiles();
138868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  TileRasterMode DetermineRasterMode(const Tile* tile) const;
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AssignGpuMemoryToTiles();
140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void FreeResourceForTile(Tile* tile, TileRasterMode mode);
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void FreeResourcesForTile(Tile* tile);
142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void FreeUnusedResourcesForTile(Tile* tile);
143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  RasterWorkerPool::Task CreateImageDecodeTask(
144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      Tile* tile, skia::LazyPixelRef* pixel_ref);
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnImageDecodeTaskCompleted(
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_refptr<Tile> tile,
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      uint32_t pixel_ref_id);
148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  RasterTaskMetadata GetRasterTaskMetadata(const Tile& tile) const;
149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  RasterWorkerPool::RasterTask CreateRasterTask(
150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      Tile* tile,
151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      PixelRefSet* decoded_images);
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnRasterTaskCompleted(
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_refptr<Tile> tile,
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<ResourcePool::Resource> resource,
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      PicturePileImpl::Analysis* analysis,
156868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      TileRasterMode raster_mode,
157868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      bool was_canceled);
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DidFinishTileInitialization(Tile* tile);
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DidTileTreeBinChange(Tile* tile,
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            TileManagerBin new_tree_bin,
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            WhichTree tree);
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Value> GetMemoryRequirementsAsValue() const;
16390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void AddRequiredTileForActivation(Tile* tile);
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
165868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  static void RunImageDecodeTask(
166868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      skia::LazyPixelRef* pixel_ref,
167868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      int layer_id,
168868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      RenderingStatsInstrumentation* stats_instrumentation);
169868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  static bool RunAnalyzeAndRasterTask(
170868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      const base::Callback<void(PicturePileImpl* picture_pile)>& analyze_task,
171868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      const RasterWorkerPool::RasterTask::Callback& raster_task,
172868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      SkDevice* device,
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      PicturePileImpl* picture_pile);
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static void RunAnalyzeTask(
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      PicturePileImpl::Analysis* analysis,
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      gfx::Rect rect,
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      float contents_scale,
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      bool use_color_estimator,
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const RasterTaskMetadata& metadata,
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      RenderingStatsInstrumentation* stats_instrumentation,
181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      PicturePileImpl* picture_pile);
182868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  static bool RunRasterTask(
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      PicturePileImpl::Analysis* analysis,
184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      gfx::Rect rect,
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      float contents_scale,
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const RasterTaskMetadata& metadata,
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      RenderingStatsInstrumentation* stats_instrumentation,
188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      SkDevice* device,
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      PicturePileImpl* picture_pile);
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileManagerClient* client_;
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ResourcePool> resource_pool_;
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<RasterWorkerPool> raster_worker_pool_;
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GlobalStateThatImpactsTilePriority global_state_;
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef std::vector<Tile*> TileVector;
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TileVector tiles_;
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileVector tiles_that_need_to_be_rasterized_;
19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef std::set<Tile*> TileSet;
20090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  TileSet tiles_that_need_to_be_initialized_for_activation_;
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  typedef base::hash_map<uint32_t, RasterWorkerPool::Task> PixelRefMap;
203868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  PixelRefMap pending_decode_tasks_;
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool ever_exceeded_memory_budget_;
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MemoryHistory::Entry memory_stats_from_last_assign_;
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderingStatsInstrumentation* rendering_stats_instrumentation_;
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool use_color_estimator_;
211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool did_initialize_visible_tile_;
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TileManager);
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_RESOURCES_TILE_MANAGER_H_
219