1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef CC_RESOURCES_PRIORITIZED_TILE_SET_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define CC_RESOURCES_PRIORITIZED_TILE_SET_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <vector>
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/base/cc_export.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/resources/managed_tile_state.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace cc {
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass Tile;
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass CC_EXPORT PrioritizedTileSet {
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  PrioritizedTileSet();
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ~PrioritizedTileSet();
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void InsertTile(Tile* tile, ManagedTileBin bin);
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void Clear();
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool IsEmpty();
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  class CC_EXPORT Iterator {
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch   public:
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    Iterator(PrioritizedTileSet* set, bool use_priority_ordering);
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ~Iterator();
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    void DisablePriorityOrdering();
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    Iterator& operator++();
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    Tile* operator->() { return *(*this); }
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    Tile* operator*();
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    operator bool() const {
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      return iterator_ != tile_set_->tiles_[current_bin_].end();
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch   private:
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    void AdvanceList();
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    PrioritizedTileSet* tile_set_;
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ManagedTileBin current_bin_;
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    std::vector<Tile*>::iterator iterator_;
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    bool use_priority_ordering_;
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  };
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  friend class Iterator;
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void SortBinIfNeeded(ManagedTileBin bin);
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::vector<Tile*> tiles_[NUM_BINS];
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool bin_sorted_[NUM_BINS];
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace cc
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif  // CC_RESOURCES_PRIORITIZED_TILE_SET_H_
61