1 // Copyright 2015 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "cc/tiles/raster_tile_priority_queue_required.h"
7 #include "cc/tiles/tiling_set_raster_queue_required.h"
13 void AppendTilingSetRequiredQueues(
14 const std::vector<PictureLayerImpl*>& layers,
15 std::vector<std::unique_ptr<TilingSetRasterQueueRequired>>* queues) {
16 for (auto* layer : layers) {
17 if (!layer->HasValidTilePriorities())
20 std::unique_ptr<TilingSetRasterQueueRequired> tiling_set_queue(
21 new TilingSetRasterQueueRequired(
22 layer->picture_layer_tiling_set(),
23 RasterTilePriorityQueueRequired::Type::REQUIRED_FOR_ACTIVATION));
24 if (!tiling_set_queue->IsEmpty())
25 queues->push_back(std::move(tiling_set_queue));
31 RasterTilePriorityQueueRequired::RasterTilePriorityQueueRequired() = default;
33 RasterTilePriorityQueueRequired::~RasterTilePriorityQueueRequired() = default;
35 void RasterTilePriorityQueueRequired::Build(
36 const std::vector<PictureLayerImpl*>& active_layers,
37 const std::vector<PictureLayerImpl*>& pending_layers,
39 DCHECK_NE(static_cast<int>(type), static_cast<int>(Type::ALL));
40 if (type == Type::REQUIRED_FOR_DRAW)
41 BuildRequiredForDraw(active_layers);
43 BuildRequiredForActivation(active_layers, pending_layers);
46 void RasterTilePriorityQueueRequired::BuildRequiredForDraw(
47 const std::vector<PictureLayerImpl*>& active_layers) {
48 for (auto* layer : active_layers) {
49 if (!layer->HasValidTilePriorities())
52 std::unique_ptr<TilingSetRasterQueueRequired> tiling_set_queue(
53 new TilingSetRasterQueueRequired(layer->picture_layer_tiling_set(),
54 Type::REQUIRED_FOR_DRAW));
55 if (!tiling_set_queue->IsEmpty())
56 tiling_set_queues_.push_back(std::move(tiling_set_queue));
60 void RasterTilePriorityQueueRequired::BuildRequiredForActivation(
61 const std::vector<PictureLayerImpl*>& active_layers,
62 const std::vector<PictureLayerImpl*>& pending_layers) {
63 AppendTilingSetRequiredQueues(active_layers, &tiling_set_queues_);
64 AppendTilingSetRequiredQueues(pending_layers, &tiling_set_queues_);
67 bool RasterTilePriorityQueueRequired::IsEmpty() const {
68 return tiling_set_queues_.empty();
71 const PrioritizedTile& RasterTilePriorityQueueRequired::Top() const {
73 return tiling_set_queues_.back()->Top();
76 void RasterTilePriorityQueueRequired::Pop() {
78 tiling_set_queues_.back()->Pop();
79 if (tiling_set_queues_.back()->IsEmpty())
80 tiling_set_queues_.pop_back();