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_required.h" | 5 #include "cc/resources/raster_tile_priority_queue_required.h" |
6 | 6 |
7 #include "cc/resources/tiling_set_raster_queue_required.h" | 7 #include "cc/resources/tiling_set_raster_queue_required.h" |
8 | 8 |
9 namespace cc { | 9 namespace cc { |
10 | 10 |
11 RasterTilePriorityQueueRequired::RasterTilePriorityQueueRequired() { | 11 RasterTilePriorityQueueRequired::RasterTilePriorityQueueRequired() { |
12 } | 12 } |
13 | 13 |
14 RasterTilePriorityQueueRequired::~RasterTilePriorityQueueRequired() { | 14 RasterTilePriorityQueueRequired::~RasterTilePriorityQueueRequired() { |
15 } | 15 } |
16 | 16 |
17 void RasterTilePriorityQueueRequired::Build( | 17 void RasterTilePriorityQueueRequired::Build( |
18 const std::vector<PictureLayerImpl::Pair>& paired_layers, | 18 const std::vector<PictureLayerImpl::Pair>& paired_layers, |
19 Type type) { | 19 Type type) { |
20 DCHECK_NE(static_cast<int>(type), static_cast<int>(Type::ALL)); | 20 DCHECK_NE(static_cast<int>(type), static_cast<int>(Type::ALL)); |
21 if (type == Type::REQUIRED_FOR_DRAW) | 21 for (const auto& pair : paired_layers) { |
22 BuildRequiredForDraw(paired_layers); | 22 PictureLayerTilingSet* tiling_set = nullptr; |
23 else | 23 if (type == Type::REQUIRED_FOR_DRAW && pair.active) |
24 BuildRequiredForActivation(paired_layers); | 24 tiling_set = pair.active->picture_layer_tiling_set(); |
25 } | 25 else if (type == Type::REQUIRED_FOR_ACTIVATION && pair.pending) |
| 26 tiling_set = pair.pending->picture_layer_tiling_set(); |
26 | 27 |
27 void RasterTilePriorityQueueRequired::BuildRequiredForDraw( | 28 if (!tiling_set) |
28 const std::vector<PictureLayerImpl::Pair>& paired_layers) { | |
29 for (const auto& pair : paired_layers) { | |
30 if (!pair.active) | |
31 continue; | 29 continue; |
| 30 |
32 scoped_ptr<TilingSetRasterQueueRequired> tiling_set_queue( | 31 scoped_ptr<TilingSetRasterQueueRequired> tiling_set_queue( |
33 new TilingSetRasterQueueRequired( | 32 new TilingSetRasterQueueRequired(tiling_set, type)); |
34 pair.active->picture_layer_tiling_set(), Type::REQUIRED_FOR_DRAW)); | |
35 if (tiling_set_queue->IsEmpty()) | 33 if (tiling_set_queue->IsEmpty()) |
36 continue; | 34 continue; |
37 tiling_set_queues_.push_back(tiling_set_queue.Pass()); | 35 tiling_set_queues_.push_back(tiling_set_queue.Pass()); |
38 } | 36 } |
39 } | 37 } |
40 | 38 |
41 void RasterTilePriorityQueueRequired::BuildRequiredForActivation( | |
42 const std::vector<PictureLayerImpl::Pair>& paired_layers) { | |
43 for (const auto& pair : paired_layers) { | |
44 if (pair.active) { | |
45 scoped_ptr<TilingSetRasterQueueRequired> tiling_set_queue( | |
46 new TilingSetRasterQueueRequired( | |
47 pair.active->picture_layer_tiling_set(), | |
48 Type::REQUIRED_FOR_ACTIVATION)); | |
49 if (!tiling_set_queue->IsEmpty()) | |
50 tiling_set_queues_.push_back(tiling_set_queue.Pass()); | |
51 } | |
52 if (pair.pending) { | |
53 scoped_ptr<TilingSetRasterQueueRequired> tiling_set_queue( | |
54 new TilingSetRasterQueueRequired( | |
55 pair.pending->picture_layer_tiling_set(), | |
56 Type::REQUIRED_FOR_ACTIVATION)); | |
57 if (!tiling_set_queue->IsEmpty()) | |
58 tiling_set_queues_.push_back(tiling_set_queue.Pass()); | |
59 } | |
60 } | |
61 } | |
62 | |
63 bool RasterTilePriorityQueueRequired::IsEmpty() const { | 39 bool RasterTilePriorityQueueRequired::IsEmpty() const { |
64 return tiling_set_queues_.empty(); | 40 return tiling_set_queues_.empty(); |
65 } | 41 } |
66 | 42 |
67 Tile* RasterTilePriorityQueueRequired::Top() { | 43 Tile* RasterTilePriorityQueueRequired::Top() { |
68 DCHECK(!IsEmpty()); | 44 DCHECK(!IsEmpty()); |
69 return tiling_set_queues_.back()->Top(); | 45 return tiling_set_queues_.back()->Top(); |
70 } | 46 } |
71 | 47 |
72 void RasterTilePriorityQueueRequired::Pop() { | 48 void RasterTilePriorityQueueRequired::Pop() { |
73 DCHECK(!IsEmpty()); | 49 DCHECK(!IsEmpty()); |
74 tiling_set_queues_.back()->Pop(); | 50 tiling_set_queues_.back()->Pop(); |
75 if (tiling_set_queues_.back()->IsEmpty()) | 51 if (tiling_set_queues_.back()->IsEmpty()) |
76 tiling_set_queues_.pop_back(); | 52 tiling_set_queues_.pop_back(); |
77 } | 53 } |
78 | 54 |
79 } // namespace cc | 55 } // namespace cc |
OLD | NEW |