• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_
60