| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/resources/raster_tile_priority_queue_all.h" | 5 #include "cc/resources/raster_tile_priority_queue_all.h" |
| 6 | 6 |
| 7 #include "cc/resources/tiling_set_raster_queue_all.h" | 7 #include "cc/resources/tiling_set_raster_queue_all.h" |
| 8 | 8 |
| 9 namespace cc { | 9 namespace cc { |
| 10 | 10 |
| 11 namespace { | 11 namespace { |
| 12 | 12 |
| 13 class RasterOrderComparator { | 13 class RasterOrderComparator { |
| 14 public: | 14 public: |
| 15 explicit RasterOrderComparator(TreePriority tree_priority) | 15 explicit RasterOrderComparator(TreePriority tree_priority) |
| 16 : tree_priority_(tree_priority) {} | 16 : tree_priority_(tree_priority) {} |
| 17 | 17 |
| 18 bool operator()(const TilingSetRasterQueueAll* a_queue, | 18 bool operator()(const TilingSetRasterQueueAll* a_queue, |
| 19 const TilingSetRasterQueueAll* b_queue) const { | 19 const TilingSetRasterQueueAll* b_queue) const { |
| 20 // Note that in this function, we have to return true if and only if | 20 // Note that in this function, we have to return true if and only if |
| 21 // a is strictly lower priority than b. | 21 // a is strictly lower priority than b. |
| 22 const Tile* a_tile = a_queue->Top(); | 22 const TilePriority& a_priority = a_queue->Top().priority(); |
| 23 const Tile* b_tile = b_queue->Top(); | 23 const TilePriority& b_priority = b_queue->Top().priority(); |
| 24 | |
| 25 const TilePriority& a_priority = a_tile->priority(); | |
| 26 const TilePriority& b_priority = b_tile->priority(); | |
| 27 bool prioritize_low_res = tree_priority_ == SMOOTHNESS_TAKES_PRIORITY; | 24 bool prioritize_low_res = tree_priority_ == SMOOTHNESS_TAKES_PRIORITY; |
| 28 | 25 |
| 29 // If the bin is the same but the resolution is not, then the order will be | 26 // If the bin is the same but the resolution is not, then the order will be |
| 30 // determined by whether we prioritize low res or not. | 27 // determined by whether we prioritize low res or not. |
| 31 // TODO(vmpstr): Remove this when TilePriority is no longer a member of Tile | 28 // TODO(vmpstr): Remove this when TilePriority is no longer a member of Tile |
| 32 // class but instead produced by the iterators. | 29 // class but instead produced by the iterators. |
| 33 if (b_priority.priority_bin == a_priority.priority_bin && | 30 if (b_priority.priority_bin == a_priority.priority_bin && |
| 34 b_priority.resolution != a_priority.resolution) { | 31 b_priority.resolution != a_priority.resolution) { |
| 35 // Non ideal resolution should be sorted lower than other resolutions. | 32 // Non ideal resolution should be sorted lower than other resolutions. |
| 36 if (a_priority.resolution == NON_IDEAL_RESOLUTION) | 33 if (a_priority.resolution == NON_IDEAL_RESOLUTION) |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 tree_priority_ = tree_priority; | 81 tree_priority_ = tree_priority; |
| 85 | 82 |
| 86 CreateTilingSetRasterQueues(active_layers, tree_priority_, &active_queues_); | 83 CreateTilingSetRasterQueues(active_layers, tree_priority_, &active_queues_); |
| 87 CreateTilingSetRasterQueues(pending_layers, tree_priority_, &pending_queues_); | 84 CreateTilingSetRasterQueues(pending_layers, tree_priority_, &pending_queues_); |
| 88 } | 85 } |
| 89 | 86 |
| 90 bool RasterTilePriorityQueueAll::IsEmpty() const { | 87 bool RasterTilePriorityQueueAll::IsEmpty() const { |
| 91 return active_queues_.empty() && pending_queues_.empty(); | 88 return active_queues_.empty() && pending_queues_.empty(); |
| 92 } | 89 } |
| 93 | 90 |
| 94 Tile* RasterTilePriorityQueueAll::Top() { | 91 const PrioritizedTile& RasterTilePriorityQueueAll::Top() const { |
| 95 DCHECK(!IsEmpty()); | 92 DCHECK(!IsEmpty()); |
| 96 ScopedPtrVector<TilingSetRasterQueueAll>& next_queues = GetNextQueues(); | 93 const ScopedPtrVector<TilingSetRasterQueueAll>& next_queues = GetNextQueues(); |
| 97 return next_queues.front()->Top(); | 94 return next_queues.front()->Top(); |
| 98 } | 95 } |
| 99 | 96 |
| 100 void RasterTilePriorityQueueAll::Pop() { | 97 void RasterTilePriorityQueueAll::Pop() { |
| 101 DCHECK(!IsEmpty()); | 98 DCHECK(!IsEmpty()); |
| 102 | 99 |
| 103 ScopedPtrVector<TilingSetRasterQueueAll>& next_queues = GetNextQueues(); | 100 ScopedPtrVector<TilingSetRasterQueueAll>& next_queues = GetNextQueues(); |
| 104 next_queues.pop_heap(RasterOrderComparator(tree_priority_)); | 101 next_queues.pop_heap(RasterOrderComparator(tree_priority_)); |
| 105 TilingSetRasterQueueAll* queue = next_queues.back(); | 102 TilingSetRasterQueueAll* queue = next_queues.back(); |
| 106 queue->Pop(); | 103 queue->Pop(); |
| 107 | 104 |
| 108 // Remove empty queues. | 105 // Remove empty queues. |
| 109 if (queue->IsEmpty()) | 106 if (queue->IsEmpty()) |
| 110 next_queues.pop_back(); | 107 next_queues.pop_back(); |
| 111 else | 108 else |
| 112 next_queues.push_heap(RasterOrderComparator(tree_priority_)); | 109 next_queues.push_heap(RasterOrderComparator(tree_priority_)); |
| 113 } | 110 } |
| 114 | 111 |
| 115 ScopedPtrVector<TilingSetRasterQueueAll>& | 112 ScopedPtrVector<TilingSetRasterQueueAll>& |
| 116 RasterTilePriorityQueueAll::GetNextQueues() { | 113 RasterTilePriorityQueueAll::GetNextQueues() { |
| 114 return const_cast<ScopedPtrVector<TilingSetRasterQueueAll>&>( |
| 115 static_cast<const RasterTilePriorityQueueAll*>(this)->GetNextQueues()); |
| 116 } |
| 117 |
| 118 const ScopedPtrVector<TilingSetRasterQueueAll>& |
| 119 RasterTilePriorityQueueAll::GetNextQueues() const { |
| 117 DCHECK(!IsEmpty()); | 120 DCHECK(!IsEmpty()); |
| 118 | 121 |
| 119 // If we only have one queue with tiles, return it. | 122 // If we only have one queue with tiles, return it. |
| 120 if (active_queues_.empty()) | 123 if (active_queues_.empty()) |
| 121 return pending_queues_; | 124 return pending_queues_; |
| 122 if (pending_queues_.empty()) | 125 if (pending_queues_.empty()) |
| 123 return active_queues_; | 126 return active_queues_; |
| 124 | 127 |
| 125 const Tile* active_tile = active_queues_.front()->Top(); | 128 const PrioritizedTile& active_tile = active_queues_.front()->Top(); |
| 126 const Tile* pending_tile = pending_queues_.front()->Top(); | 129 const PrioritizedTile& pending_tile = pending_queues_.front()->Top(); |
| 127 | 130 |
| 128 const TilePriority& active_priority = active_tile->priority(); | 131 const TilePriority& active_priority = active_tile.priority(); |
| 129 const TilePriority& pending_priority = pending_tile->priority(); | 132 const TilePriority& pending_priority = pending_tile.priority(); |
| 130 | 133 |
| 131 switch (tree_priority_) { | 134 switch (tree_priority_) { |
| 132 case SMOOTHNESS_TAKES_PRIORITY: { | 135 case SMOOTHNESS_TAKES_PRIORITY: { |
| 133 // If we're down to eventually bin tiles on the active tree, process the | 136 // If we're down to eventually bin tiles on the active tree, process the |
| 134 // pending tree to allow tiles required for activation to be initialized | 137 // pending tree to allow tiles required for activation to be initialized |
| 135 // when memory policy only allows prepaint. | 138 // when memory policy only allows prepaint. |
| 136 if (active_priority.priority_bin == TilePriority::EVENTUALLY && | 139 if (active_priority.priority_bin == TilePriority::EVENTUALLY && |
| 137 pending_priority.priority_bin == TilePriority::NOW) { | 140 pending_priority.priority_bin == TilePriority::NOW) { |
| 138 return pending_queues_; | 141 return pending_queues_; |
| 139 } | 142 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 155 return active_queues_; | 158 return active_queues_; |
| 156 return pending_queues_; | 159 return pending_queues_; |
| 157 } | 160 } |
| 158 default: | 161 default: |
| 159 NOTREACHED(); | 162 NOTREACHED(); |
| 160 return active_queues_; | 163 return active_queues_; |
| 161 } | 164 } |
| 162 } | 165 } |
| 163 | 166 |
| 164 } // namespace cc | 167 } // namespace cc |
| OLD | NEW |