blob: fe1b2a0a9412faaadff10c79ec8a3eb2f95c2201 [file] [log] [blame]
Ben Murdochbb1529c2013-08-08 10:24:53 +01001// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CC_RESOURCES_PRIORITIZED_TILE_SET_H_
6#define CC_RESOURCES_PRIORITIZED_TILE_SET_H_
7
8#include <vector>
9
10#include "base/memory/ref_counted.h"
11#include "base/memory/scoped_ptr.h"
12#include "cc/base/cc_export.h"
13#include "cc/resources/managed_tile_state.h"
14
15namespace cc {
16class Tile;
17
18class CC_EXPORT PrioritizedTileSet {
19 public:
20 PrioritizedTileSet();
21 ~PrioritizedTileSet();
22
23 void InsertTile(Tile* tile, ManagedTileBin bin);
24 void Clear();
25 void Sort();
26
27 class CC_EXPORT PriorityIterator {
28 public:
29 explicit PriorityIterator(PrioritizedTileSet* set);
30 ~PriorityIterator();
31
32 PriorityIterator& operator++();
33 Tile* operator->() { return *(*this); }
34 Tile* operator*();
35 operator bool() const {
36 return iterator_ != tile_set_->tiles_[current_bin_].end();
37 }
38
39 private:
40 void AdvanceList();
41
42 PrioritizedTileSet* tile_set_;
43 ManagedTileBin current_bin_;
44 std::vector<scoped_refptr<Tile> >::iterator iterator_;
45 };
46
47 private:
48 friend class PriorityIterator;
49
50 typedef scoped_refptr<Tile> TileRef;
51 std::vector<TileRef> tiles_[NUM_BINS];
52};
53
54} // namespace cc
55
56#endif // CC_RESOURCES_PRIORITIZED_TILE_SET_H_