tile_manager.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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/base/worker_pool.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/debug/rendering_stats_instrumentation.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/memory_history.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/picture_pile_impl.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 RasterWorkerPool;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceProvider;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Tile;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TileVersion;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT TileManagerClient {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ScheduleManageTiles() = 0;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidInitializeVisibleTile() = 0;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~TileManagerClient() {}
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tile manager classifying tiles into a few basic
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// bins:
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum TileManagerBin {
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NOW_BIN = 0, // Needed ASAP.
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SOON_BIN = 1, // Impl-side version of prepainting.
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EVENTUALLY_BIN = 2, // Nice to have, if we've got memory and time.
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NEVER_BIN = 3, // Dont bother.
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NUM_BINS = 4
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Be sure to update TileManagerBinAsValue when adding new fields.
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::Value> TileManagerBinAsValue(
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TileManagerBin bin);
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum TileManagerBinPriority {
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  HIGH_PRIORITY_BIN = 0,
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LOW_PRIORITY_BIN = 1,
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NUM_BIN_PRIORITIES = 2
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::Value> TileManagerBinPriorityAsValue(
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TileManagerBinPriority bin);
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum TileRasterState {
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  IDLE_STATE = 0,
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WAITING_FOR_RASTER_STATE = 1,
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RASTER_STATE = 2,
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UPLOAD_STATE = 3,
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FORCED_UPLOAD_COMPLETION_STATE = 4,
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NUM_STATES = 5
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::Value> TileRasterStateAsValue(
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TileRasterState bin);
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class manages tiles, deciding which should get rasterized and which
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// should no longer have any memory assigned to them. Tile objects are "owned"
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// by layers; they automatically register with the manager when they are
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// created, and unregister from the manager when they are deleted.
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT TileManager : public WorkerPoolClient {
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileManager(TileManagerClient* client,
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              ResourceProvider *resource_provider,
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              size_t num_raster_threads,
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              bool use_cheapess_estimator,
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              bool use_color_estimator,
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              bool prediction_benchmarking,
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              RenderingStatsInstrumentation* rendering_stats_instrumentation);
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~TileManager();
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const GlobalStateThatImpactsTilePriority& GlobalState() const {
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return global_state_;
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetGlobalState(const GlobalStateThatImpactsTilePriority& state);
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ManageTiles();
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CheckForCompletedTileUploads();
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AbortPendingTileUploads();
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ForceTileUploadToComplete(Tile* tile);
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetAnticipatedDrawTime(base::TimeTicks time);
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> BasicStateAsValue() const;
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> AllTilesAsValue() const;
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void GetMemoryStats(size_t* memory_required_bytes,
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      size_t* memory_nice_to_have_bytes,
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      size_t* memory_used_bytes) const;
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool HasPendingWorkScheduled(WhichTree tree) const;
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const MemoryHistory::Entry& memory_stats_from_last_assign() const {
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return memory_stats_from_last_assign_;
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from WorkerPoolClient:
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidFinishDispatchingWorkerPoolCompletionCallbacks() OVERRIDE;
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Methods called by Tile
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class Tile;
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RegisterTile(Tile* tile);
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UnregisterTile(Tile* tile);
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void WillModifyTilePriority(
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Tile* tile, WhichTree tree, const TilePriority& new_priority) {
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // TODO(nduca): Do something smarter if reprioritization turns out to be
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // costly.
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ScheduleManageTiles();
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Data that is passed to raster tasks.
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  struct RasterTaskMetadata {
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool prediction_benchmarking;
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool is_tile_in_pending_tree_now_bin;
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TileResolution tile_resolution;
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int layer_id;
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RasterTaskMetadata GetRasterTaskMetadata(const Tile& tile) const;
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SortTiles();
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AssignGpuMemoryToTiles();
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void FreeResourcesForTile(Tile* tile);
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ScheduleManageTiles() {
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (manage_tiles_pending_)
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return;
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    client_->ScheduleManageTiles();
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    manage_tiles_pending_ = true;
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateCheapTasksTimeLimit();
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DispatchMoreTasks();
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AnalyzeTile(Tile* tile);
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void GatherPixelRefsForTile(Tile* tile);
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DispatchImageDecodeTasksForTile(Tile* tile);
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DispatchOneImageDecodeTask(
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_refptr<Tile> tile, skia::LazyPixelRef* pixel_ref);
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnImageDecodeTaskCompleted(
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_refptr<Tile> tile,
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      uint32_t pixel_ref_id);
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool CanDispatchRasterTask(Tile* tile) const;
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ResourcePool::Resource> PrepareTileForRaster(Tile* tile);
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DispatchOneRasterTask(scoped_refptr<Tile> tile);
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnRasterTaskCompleted(
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_refptr<Tile> tile,
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<ResourcePool::Resource> resource,
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int manage_tiles_call_count_when_dispatched);
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DidFinishTileInitialization(Tile* tile);
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DidTileRasterStateChange(Tile* tile, TileRasterState state);
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DidTileTreeBinChange(Tile* tile,
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            TileManagerBin new_tree_bin,
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            WhichTree tree);
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Value> GetMemoryRequirementsAsValue() const;
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void RunRasterTask(
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      uint8* buffer,
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const gfx::Rect& rect,
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      float contents_scale,
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const RasterTaskMetadata& metadata,
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      RenderingStatsInstrumentation* stats_instrumentation,
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      PicturePileImpl* picture_pile);
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void RunImageDecodeTask(
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      skia::LazyPixelRef* pixel_ref,
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      RenderingStatsInstrumentation* stats_instrumentation);
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void RecordCheapnessPredictorResults(bool is_predicted_cheap,
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                              bool is_actually_cheap);
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void RecordSolidColorPredictorResults(const SkColor* actual_colors,
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                               size_t color_count,
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                               bool is_predicted_solid,
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                               SkColor predicted_color,
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                               bool is_predicted_transparent);
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileManagerClient* client_;
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ResourcePool> resource_pool_;
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<RasterWorkerPool> raster_worker_pool_;
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool manage_tiles_pending_;
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int manage_tiles_call_count_;
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GlobalStateThatImpactsTilePriority global_state_;
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef std::vector<Tile*> TileVector;
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef std::set<Tile*> TileSet;
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileSet all_tiles_;
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileVector live_or_allocated_tiles_;
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileVector tiles_that_need_to_be_rasterized_;
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef std::list<Tile*> TileList;
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Tiles with image decoding tasks. These tiles need to be rasterized
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // when all the image decoding tasks finish.
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileList tiles_with_image_decoding_tasks_;
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef base::hash_map<uint32_t, skia::LazyPixelRef*> PixelRefMap;
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PixelRefMap pending_decode_tasks_;
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef std::queue<scoped_refptr<Tile> > TileQueue;
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileQueue tiles_with_pending_upload_;
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  size_t bytes_pending_upload_;
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool has_performed_uploads_since_last_flush_;
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool ever_exceeded_memory_budget_;
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MemoryHistory::Entry memory_stats_from_last_assign_;
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderingStatsInstrumentation* rendering_stats_instrumentation_;
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool use_cheapness_estimator_;
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool use_color_estimator_;
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int raster_state_count_[NUM_STATES][NUM_TREES][NUM_BINS];
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool prediction_benchmarking_;
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  size_t pending_tasks_;
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  size_t max_pending_tasks_;
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::TimeTicks anticipated_draw_time_;
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TileManager);
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_RESOURCES_TILE_MANAGER_H_
233