| Index: cc/resources/tile_bundle.h
 | 
| diff --git a/cc/resources/tile_bundle.h b/cc/resources/tile_bundle.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..e194e7bee10ce9f820a9556157596bdf1ec9be3c
 | 
| --- /dev/null
 | 
| +++ b/cc/resources/tile_bundle.h
 | 
| @@ -0,0 +1,119 @@
 | 
| +// Copyright 2013 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +#ifndef CC_RESOURCES_TILE_BUNDLE_H_
 | 
| +#define CC_RESOURCES_TILE_BUNDLE_H_
 | 
| +
 | 
| +#include <utility>
 | 
| +#include <vector>
 | 
| +
 | 
| +#include "base/memory/ref_counted.h"
 | 
| +#include "cc/base/ref_counted_managed.h"
 | 
| +#include "cc/resources/tile_priority.h"
 | 
| +
 | 
| +namespace cc {
 | 
| +
 | 
| +class TileManager;
 | 
| +class Tile;
 | 
| +class PictureLayerTiling;
 | 
| +class CC_EXPORT TileBundle : public RefCountedManaged<TileBundle> {
 | 
| + public:
 | 
| +  typedef uint64 Id;
 | 
| +  typedef std::vector<scoped_refptr<Tile> > TileVector;
 | 
| +  typedef std::vector<TileVector> TileGrid;
 | 
| +
 | 
| +  inline Id id() const { return id_; }
 | 
| +
 | 
| +  Tile* TileAt(WhichTree tree, int index_x, int index_y);
 | 
| +  bool RemoveTileAt(WhichTree tree, int index_x, int index_y);
 | 
| +  void AddTileAt(WhichTree tree,
 | 
| +                 int index_x,
 | 
| +                 int index_y,
 | 
| +                 scoped_refptr<Tile> tile);
 | 
| +  inline bool IsEmpty() const { return conservative_count_ == 0; }
 | 
| +
 | 
| +  void DidBecomeRecycled();
 | 
| +  void DidBecomeActive();
 | 
| +
 | 
| +  void SetPriority(WhichTree tree, const TilePriority& priority);
 | 
| +  TilePriority GetPriority(WhichTree tree) const;
 | 
| +
 | 
| +  void SwapTilesIfRequired();
 | 
| +
 | 
| +  class Iterator {
 | 
| +   public:
 | 
| +    explicit Iterator(TileBundle* bundle);
 | 
| +    ~Iterator();
 | 
| +
 | 
| +    Iterator& operator++();
 | 
| +
 | 
| +    inline Tile* operator*() { return current_tile_; }
 | 
| +    inline Tile* operator->() { return current_tile_; }
 | 
| +    inline operator bool() const {
 | 
| +      return index_y_ < bundle_->bundle_rect_.height();
 | 
| +    }
 | 
| +
 | 
| +    inline int index_x() {
 | 
| +      return index_x_ + bundle_->bundle_rect_.x();
 | 
| +    }
 | 
| +    inline int index_y() {
 | 
| +      return index_y_ + bundle_->bundle_rect_.y();
 | 
| +    }
 | 
| +
 | 
| +    TilePriority active_priority() const {
 | 
| +      return priority_[ACTIVE_TREE] ? *priority_[ACTIVE_TREE]
 | 
| +                                    : TilePriority();
 | 
| +    }
 | 
| +
 | 
| +    TilePriority pending_priority() const {
 | 
| +      return priority_[PENDING_TREE] ? *priority_[PENDING_TREE]
 | 
| +                                     : TilePriority();
 | 
| +    }
 | 
| +
 | 
| +    bool active_tree_only_tile() {
 | 
| +      return active_tree_only_tile_;
 | 
| +    }
 | 
| +    bool pending_tree_only_tile() {
 | 
| +      return pending_tree_only_tile_;
 | 
| +    }
 | 
| +
 | 
| +   private:
 | 
| +    bool InitializeNewTileForTree(WhichTree tree);
 | 
| +
 | 
| +    TileBundle* bundle_;
 | 
| +    Tile* current_tile_;
 | 
| +    TilePriority* priority_[NUM_TREES];
 | 
| +    int index_x_;
 | 
| +    int index_y_;
 | 
| +    WhichTree current_tree_;
 | 
| +    bool active_tree_only_tile_;
 | 
| +    bool pending_tree_only_tile_;
 | 
| +  };
 | 
| +
 | 
| + private:
 | 
| +  friend class TileManager;
 | 
| +  friend class Iterator;
 | 
| +
 | 
| +  TileBundle(TileManager* tile_manager, gfx::Rect bundle_rect);
 | 
| +  ~TileBundle();
 | 
| +
 | 
| +  void UpdateToLocalIndex(int* index_x, int* index_y);
 | 
| +  Tile* TileAtLocalIndex(WhichTree tree, int x, int y);
 | 
| +
 | 
| +  TileManager* tile_manager_;
 | 
| +
 | 
| +  TileGrid tiles_[NUM_TREES];
 | 
| +  gfx::Rect bundle_rect_;
 | 
| +
 | 
| +  TilePriority priority_[NUM_TREES];
 | 
| +  size_t conservative_count_;
 | 
| +  bool needs_tile_swap_;
 | 
| +
 | 
| +  Id id_;
 | 
| +  static Id s_next_id_;
 | 
| +};
 | 
| +
 | 
| +}  // namespace cc
 | 
| +
 | 
| +#endif  // CC_RESOURCES_TILE_BUNDLE_H_
 | 
| 
 |