Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Side by Side Diff: cc/tiles/eviction_tile_priority_queue.cc

Issue 1437413002: cc: Remove ScopedPtrVector and cc::remove_if. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/tiles/eviction_tile_priority_queue.h" 5 #include "cc/tiles/eviction_tile_priority_queue.h"
6 6
7 namespace cc { 7 namespace cc {
8 8
9 namespace { 9 namespace {
10 10
11 class EvictionOrderComparator { 11 class EvictionOrderComparator {
12 public: 12 public:
13 explicit EvictionOrderComparator(TreePriority tree_priority) 13 explicit EvictionOrderComparator(TreePriority tree_priority)
14 : tree_priority_(tree_priority) {} 14 : tree_priority_(tree_priority) {}
15 15
16 bool operator()(const TilingSetEvictionQueue* a_queue, 16 bool operator()(const scoped_ptr<TilingSetEvictionQueue>& a_queue,
17 const TilingSetEvictionQueue* b_queue) const { 17 const scoped_ptr<TilingSetEvictionQueue>& b_queue) const {
18 // Note that in this function, we have to return true if and only if 18 // Note that in this function, we have to return true if and only if
19 // b is strictly lower priority than a. 19 // b is strictly lower priority than a.
20 const PrioritizedTile& a_tile = a_queue->Top(); 20 const PrioritizedTile& a_tile = a_queue->Top();
21 const PrioritizedTile& b_tile = b_queue->Top(); 21 const PrioritizedTile& b_tile = b_queue->Top();
22 22
23 const TilePriority& a_priority = a_tile.priority(); 23 const TilePriority& a_priority = a_tile.priority();
24 const TilePriority& b_priority = b_tile.priority(); 24 const TilePriority& b_priority = b_tile.priority();
25 bool prioritize_low_res = tree_priority_ == SMOOTHNESS_TAKES_PRIORITY; 25 bool prioritize_low_res = tree_priority_ == SMOOTHNESS_TAKES_PRIORITY;
26 26
27 // If the priority bin differs, b is lower priority if it has the higher 27 // If the priority bin differs, b is lower priority if it has the higher
(...skipping 29 matching lines...) Expand all
57 return b_priority.distance_to_visible > a_priority.distance_to_visible; 57 return b_priority.distance_to_visible > a_priority.distance_to_visible;
58 } 58 }
59 59
60 private: 60 private:
61 TreePriority tree_priority_; 61 TreePriority tree_priority_;
62 }; 62 };
63 63
64 void CreateTilingSetEvictionQueues( 64 void CreateTilingSetEvictionQueues(
65 const std::vector<PictureLayerImpl*>& layers, 65 const std::vector<PictureLayerImpl*>& layers,
66 TreePriority tree_priority, 66 TreePriority tree_priority,
67 ScopedPtrVector<TilingSetEvictionQueue>* queues) { 67 std::vector<scoped_ptr<TilingSetEvictionQueue>>* queues) {
68 DCHECK(queues->empty()); 68 DCHECK(queues->empty());
69 69
70 for (auto* layer : layers) { 70 for (auto* layer : layers) {
71 scoped_ptr<TilingSetEvictionQueue> tiling_set_queue = make_scoped_ptr( 71 scoped_ptr<TilingSetEvictionQueue> tiling_set_queue = make_scoped_ptr(
72 new TilingSetEvictionQueue(layer->picture_layer_tiling_set())); 72 new TilingSetEvictionQueue(layer->picture_layer_tiling_set()));
73 // Queues will only contain non empty tiling sets. 73 // Queues will only contain non empty tiling sets.
74 if (!tiling_set_queue->IsEmpty()) 74 if (!tiling_set_queue->IsEmpty())
75 queues->push_back(tiling_set_queue.Pass()); 75 queues->push_back(tiling_set_queue.Pass());
76 } 76 }
77 queues->make_heap(EvictionOrderComparator(tree_priority)); 77 std::make_heap(queues->begin(), queues->end(),
78 EvictionOrderComparator(tree_priority));
78 } 79 }
79 80
80 } // namespace 81 } // namespace
81 82
82 EvictionTilePriorityQueue::EvictionTilePriorityQueue() { 83 EvictionTilePriorityQueue::EvictionTilePriorityQueue() {
83 } 84 }
84 85
85 EvictionTilePriorityQueue::~EvictionTilePriorityQueue() { 86 EvictionTilePriorityQueue::~EvictionTilePriorityQueue() {
86 } 87 }
87 88
88 void EvictionTilePriorityQueue::Build( 89 void EvictionTilePriorityQueue::Build(
89 const std::vector<PictureLayerImpl*>& active_layers, 90 const std::vector<PictureLayerImpl*>& active_layers,
90 const std::vector<PictureLayerImpl*>& pending_layers, 91 const std::vector<PictureLayerImpl*>& pending_layers,
91 TreePriority tree_priority) { 92 TreePriority tree_priority) {
92 tree_priority_ = tree_priority; 93 tree_priority_ = tree_priority;
93 94
94 CreateTilingSetEvictionQueues(active_layers, tree_priority, &active_queues_); 95 CreateTilingSetEvictionQueues(active_layers, tree_priority, &active_queues_);
95 CreateTilingSetEvictionQueues(pending_layers, tree_priority, 96 CreateTilingSetEvictionQueues(pending_layers, tree_priority,
96 &pending_queues_); 97 &pending_queues_);
97 } 98 }
98 99
99 bool EvictionTilePriorityQueue::IsEmpty() const { 100 bool EvictionTilePriorityQueue::IsEmpty() const {
100 return active_queues_.empty() && pending_queues_.empty(); 101 return active_queues_.empty() && pending_queues_.empty();
101 } 102 }
102 103
103 const PrioritizedTile& EvictionTilePriorityQueue::Top() const { 104 const PrioritizedTile& EvictionTilePriorityQueue::Top() const {
104 DCHECK(!IsEmpty()); 105 DCHECK(!IsEmpty());
105 const ScopedPtrVector<TilingSetEvictionQueue>& next_queues = GetNextQueues(); 106 const auto& next_queues = GetNextQueues();
106 return next_queues.front()->Top(); 107 return next_queues.front()->Top();
107 } 108 }
108 109
109 void EvictionTilePriorityQueue::Pop() { 110 void EvictionTilePriorityQueue::Pop() {
110 DCHECK(!IsEmpty()); 111 DCHECK(!IsEmpty());
111 112
112 ScopedPtrVector<TilingSetEvictionQueue>& next_queues = GetNextQueues(); 113 auto& next_queues = GetNextQueues();
113 next_queues.pop_heap(EvictionOrderComparator(tree_priority_)); 114 std::pop_heap(next_queues.begin(), next_queues.end(),
114 TilingSetEvictionQueue* queue = next_queues.back(); 115 EvictionOrderComparator(tree_priority_));
116 TilingSetEvictionQueue* queue = next_queues.back().get();
115 queue->Pop(); 117 queue->Pop();
116 118
117 // Remove empty queues. 119 // Remove empty queues.
118 if (queue->IsEmpty()) 120 if (queue->IsEmpty()) {
119 next_queues.pop_back(); 121 next_queues.pop_back();
120 else 122 } else {
121 next_queues.push_heap(EvictionOrderComparator(tree_priority_)); 123 std::push_heap(next_queues.begin(), next_queues.end(),
124 EvictionOrderComparator(tree_priority_));
125 }
122 } 126 }
123 127
124 ScopedPtrVector<TilingSetEvictionQueue>& 128 std::vector<scoped_ptr<TilingSetEvictionQueue>>&
125 EvictionTilePriorityQueue::GetNextQueues() { 129 EvictionTilePriorityQueue::GetNextQueues() {
126 return const_cast<ScopedPtrVector<TilingSetEvictionQueue>&>( 130 const EvictionTilePriorityQueue* const_this =
127 static_cast<const EvictionTilePriorityQueue*>(this)->GetNextQueues()); 131 static_cast<const EvictionTilePriorityQueue*>(this);
132 const auto& const_queues = const_this->GetNextQueues();
133 return const_cast<std::vector<scoped_ptr<TilingSetEvictionQueue>>&>(
134 const_queues);
128 } 135 }
129 136
130 const ScopedPtrVector<TilingSetEvictionQueue>& 137 const std::vector<scoped_ptr<TilingSetEvictionQueue>>&
131 EvictionTilePriorityQueue::GetNextQueues() const { 138 EvictionTilePriorityQueue::GetNextQueues() const {
132 DCHECK(!IsEmpty()); 139 DCHECK(!IsEmpty());
133 140
134 // If we only have one queue with tiles, return it. 141 // If we only have one queue with tiles, return it.
135 if (active_queues_.empty()) 142 if (active_queues_.empty())
136 return pending_queues_; 143 return pending_queues_;
137 if (pending_queues_.empty()) 144 if (pending_queues_.empty())
138 return active_queues_; 145 return active_queues_;
139 146
140 const PrioritizedTile& active_tile = active_queues_.front()->Top(); 147 const PrioritizedTile& active_tile = active_queues_.front()->Top();
(...skipping 11 matching lines...) Expand all
152 : active_queues_; 159 : active_queues_;
153 } 160 }
154 161
155 // Return tile with a lower priority. 162 // Return tile with a lower priority.
156 if (pending_priority.IsHigherPriorityThan(active_priority)) 163 if (pending_priority.IsHigherPriorityThan(active_priority))
157 return active_queues_; 164 return active_queues_;
158 return pending_queues_; 165 return pending_queues_;
159 } 166 }
160 167
161 } // namespace cc 168 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698