| 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..ba113df76c4ac09010b72f05c66772e00f82f14c
|
| --- /dev/null
|
| +++ b/cc/resources/tile_bundle.h
|
| @@ -0,0 +1,115 @@
|
| +// 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);
|
| + bool IsEmpty() const { return conservative_tile_count_ == 0; }
|
| +
|
| + void DidBecomeRecycled();
|
| + void DidBecomeActive();
|
| +
|
| + void SetPriority(WhichTree tree, const TilePriority& priority);
|
| + TilePriority GetPriority(WhichTree tree) const;
|
| +
|
| + void SwapTilesIfRequired();
|
| +
|
| + class CC_EXPORT Iterator {
|
| + public:
|
| + explicit Iterator(TileBundle* bundle);
|
| + Iterator(TileBundle* bundle, WhichTree tree);
|
| + ~Iterator();
|
| +
|
| + Iterator& operator++();
|
| +
|
| + inline Tile* operator*() { return current_tile_; }
|
| + inline Tile* operator->() { return current_tile_; }
|
| + inline operator bool() const {
|
| + return index_y_ < bundle_->index_count_y_;
|
| + }
|
| +
|
| + inline int index_x() {
|
| + return index_x_ + bundle_->index_offset_x_;
|
| + }
|
| + inline int index_y() {
|
| + return index_y_ + bundle_->index_offset_y_;
|
| + }
|
| +
|
| + TilePriority priority(WhichTree tree) const {
|
| + return bundle_->GetPriority(tree);
|
| + }
|
| +
|
| + private:
|
| + bool InitializeNewTile();
|
| +
|
| + TileBundle* bundle_;
|
| + Tile* current_tile_;
|
| + int index_x_;
|
| + int index_y_;
|
| + WhichTree current_tree_;
|
| +
|
| + WhichTree min_tree_;
|
| + WhichTree max_tree_;
|
| + };
|
| +
|
| + private:
|
| + friend class TileManager;
|
| + friend class Iterator;
|
| +
|
| + TileBundle(TileManager* tile_manager,
|
| + int offset_x,
|
| + int offset_y,
|
| + int width,
|
| + int height);
|
| + ~TileBundle();
|
| +
|
| + void UpdateToLocalIndex(int* index_x, int* index_y);
|
| + Tile* TileAtLocalIndex(WhichTree tree, int x, int y);
|
| +
|
| + TileManager* tile_manager_;
|
| +
|
| + TileGrid tiles_[NUM_TREES];
|
| + int index_offset_x_;
|
| + int index_offset_y_;
|
| + int index_count_x_;
|
| + int index_count_y_;
|
| +
|
| + TilePriority priority_[NUM_TREES];
|
| + int conservative_tile_count_;
|
| + bool needs_tile_swap_;
|
| +
|
| + Id id_;
|
| + static Id s_next_id_;
|
| +};
|
| +
|
| +} // namespace cc
|
| +
|
| +#endif // CC_RESOURCES_TILE_BUNDLE_H_
|
|
|