- add sources.
[platform/framework/web/crosswalk.git] / src / cc / resources / prioritized_tile_set.h
1 // 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 "cc/base/cc_export.h"
11 #include "cc/resources/managed_tile_state.h"
12
13 namespace cc {
14 class Tile;
15
16 class CC_EXPORT PrioritizedTileSet {
17  public:
18   PrioritizedTileSet();
19   ~PrioritizedTileSet();
20
21   void InsertTile(Tile* tile, ManagedTileBin bin);
22   void Clear();
23
24   class CC_EXPORT Iterator {
25    public:
26     Iterator(PrioritizedTileSet* set, bool use_priority_ordering);
27
28     ~Iterator();
29
30     void DisablePriorityOrdering();
31
32     Iterator& 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<Tile*>::iterator iterator_;
45     bool use_priority_ordering_;
46   };
47
48  private:
49   friend class Iterator;
50
51   void SortBinIfNeeded(ManagedTileBin bin);
52
53   std::vector<Tile*> tiles_[NUM_BINS];
54   bool bin_sorted_[NUM_BINS];
55 };
56
57 }  // namespace cc
58
59 #endif  // CC_RESOURCES_PRIORITIZED_TILE_SET_H_