tile_manager.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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 <list>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <queue>
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <set>
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector>
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/hash_tables.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/debug/rendering_stats_instrumentation.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/memory_history.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/picture_pile_impl.h"
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/resources/raster_worker_pool.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/resource_pool.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/tile_priority.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceProvider;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Tile;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TileVersion;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT TileManagerClient {
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ScheduleManageTiles() = 0;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidInitializeVisibleTile() = 0;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~TileManagerClient() {}
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tile manager classifying tiles into a few basic
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// bins:
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum TileManagerBin {
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NOW_BIN = 0,  // Needed ASAP.
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SOON_BIN = 1,  // Impl-side version of prepainting.
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EVENTUALLY_BIN = 2,  // Nice to have, if we've got memory and time.
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NEVER_BIN = 3,  // Dont bother.
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NUM_BINS = 4
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Be sure to update TileManagerBinAsValue when adding new fields.
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::Value> TileManagerBinAsValue(
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TileManagerBin bin);
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum TileManagerBinPriority {
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  HIGH_PRIORITY_BIN = 0,
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LOW_PRIORITY_BIN = 1,
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NUM_BIN_PRIORITIES = 2
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::Value> TileManagerBinPriorityAsValue(
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TileManagerBinPriority bin);
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class manages tiles, deciding which should get rasterized and which
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// should no longer have any memory assigned to them. Tile objects are "owned"
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// by layers; they automatically register with the manager when they are
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// created, and unregister from the manager when they are deleted.
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT TileManager : public WorkerPoolClient {
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileManager(TileManagerClient* client,
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              ResourceProvider *resource_provider,
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              size_t num_raster_threads,
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              bool use_color_estimator,
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              bool prediction_benchmarking,
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              RenderingStatsInstrumentation* rendering_stats_instrumentation);
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~TileManager();
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const GlobalStateThatImpactsTilePriority& GlobalState() const {
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return global_state_;
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetGlobalState(const GlobalStateThatImpactsTilePriority& state);
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ManageTiles();
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CheckForCompletedTileUploads();
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AbortPendingTileUploads();
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ForceTileUploadToComplete(Tile* tile);
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> BasicStateAsValue() const;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> AllTilesAsValue() const;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void GetMemoryStats(size_t* memory_required_bytes,
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      size_t* memory_nice_to_have_bytes,
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      size_t* memory_used_bytes) const;
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const MemoryHistory::Entry& memory_stats_from_last_assign() const {
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return memory_stats_from_last_assign_;
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from WorkerPoolClient:
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidFinishDispatchingWorkerPoolCompletionCallbacks() OVERRIDE;
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Methods called by Tile
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class Tile;
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RegisterTile(Tile* tile);
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UnregisterTile(Tile* tile);
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void WillModifyTilePriority(
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Tile* tile, WhichTree tree, const TilePriority& new_priority) {
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // TODO(nduca): Do something smarter if reprioritization turns out to be
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // costly.
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ScheduleManageTiles();
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Virtual for test
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void DispatchMoreTasks();
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Data that is passed to raster tasks.
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  struct RasterTaskMetadata {
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool prediction_benchmarking;
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool is_tile_in_pending_tree_now_bin;
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TileResolution tile_resolution;
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int layer_id;
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RasterTaskMetadata GetRasterTaskMetadata(const Tile& tile) const;
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void AssignBinsToTiles();
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SortTiles();
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AssignGpuMemoryToTiles();
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void FreeResourcesForTile(Tile* tile);
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ScheduleManageTiles() {
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (manage_tiles_pending_)
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return;
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    client_->ScheduleManageTiles();
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    manage_tiles_pending_ = true;
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool DispatchImageDecodeTasksForTile(Tile* tile);
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DispatchOneImageDecodeTask(
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_refptr<Tile> tile, skia::LazyPixelRef* pixel_ref);
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnImageDecodeTaskCompleted(
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_refptr<Tile> tile,
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      uint32_t pixel_ref_id);
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool CanDispatchRasterTask(Tile* tile) const;
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ResourcePool::Resource> PrepareTileForRaster(Tile* tile);
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DispatchOneRasterTask(scoped_refptr<Tile> tile);
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnRasterTaskCompleted(
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_refptr<Tile> tile,
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<ResourcePool::Resource> resource,
143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      PicturePileImpl::Analysis* analysis,
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int manage_tiles_call_count_when_dispatched);
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DidFinishTileInitialization(Tile* tile);
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DidTileTreeBinChange(Tile* tile,
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            TileManagerBin new_tree_bin,
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            WhichTree tree);
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Value> GetMemoryRequirementsAsValue() const;
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static void RunAnalyzeAndRasterTask(
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const RasterWorkerPool::RasterCallback& analyze_task,
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const RasterWorkerPool::RasterCallback& raster_task,
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      PicturePileImpl* picture_pile);
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static void RunAnalyzeTask(
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      PicturePileImpl::Analysis* analysis,
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      gfx::Rect rect,
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      float contents_scale,
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      bool use_color_estimator,
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const RasterTaskMetadata& metadata,
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      RenderingStatsInstrumentation* stats_instrumentation,
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      PicturePileImpl* picture_pile);
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void RunRasterTask(
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      uint8* buffer,
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      PicturePileImpl::Analysis* analysis,
166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      gfx::Rect rect,
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      float contents_scale,
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const RasterTaskMetadata& metadata,
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      RenderingStatsInstrumentation* stats_instrumentation,
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      PicturePileImpl* picture_pile);
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void RunImageDecodeTask(
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      skia::LazyPixelRef* pixel_ref,
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      RenderingStatsInstrumentation* stats_instrumentation);
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static void RecordSolidColorPredictorResults(const SkPMColor* actual_colors,
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                               size_t color_count,
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                               bool is_predicted_solid,
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                               SkPMColor predicted_color);
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileManagerClient* client_;
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ResourcePool> resource_pool_;
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<RasterWorkerPool> raster_worker_pool_;
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool manage_tiles_pending_;
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int manage_tiles_call_count_;
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GlobalStateThatImpactsTilePriority global_state_;
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef std::vector<Tile*> TileVector;
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TileVector tiles_;
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileVector tiles_that_need_to_be_rasterized_;
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  typedef base::hash_set<uint32_t> PixelRefSet;
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  PixelRefSet pending_decode_tasks_;
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef std::queue<scoped_refptr<Tile> > TileQueue;
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileQueue tiles_with_pending_upload_;
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  size_t bytes_pending_upload_;
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool has_performed_uploads_since_last_flush_;
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool ever_exceeded_memory_budget_;
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MemoryHistory::Entry memory_stats_from_last_assign_;
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderingStatsInstrumentation* rendering_stats_instrumentation_;
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool use_color_estimator_;
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool prediction_benchmarking_;
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool did_initialize_visible_tile_;
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  size_t pending_tasks_;
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  size_t max_pending_tasks_;
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TileManager);
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_RESOURCES_TILE_MANAGER_H_
217