OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/trees/layer_tree_impl.h" | 5 #include "cc/trees/layer_tree_impl.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 | 553 |
554 bool resourceless_software_draw = (layer_tree_host_impl_->GetDrawMode() == | 554 bool resourceless_software_draw = (layer_tree_host_impl_->GetDrawMode() == |
555 DRAW_MODE_RESOURCELESS_SOFTWARE); | 555 DRAW_MODE_RESOURCELESS_SOFTWARE); |
556 | 556 |
557 // LayerIterator is used here instead of CallFunctionForSubtree to only | 557 // LayerIterator is used here instead of CallFunctionForSubtree to only |
558 // UpdateTilePriorities on layers that will be visible (and thus have valid | 558 // UpdateTilePriorities on layers that will be visible (and thus have valid |
559 // draw properties) and not because any ordering is required. | 559 // draw properties) and not because any ordering is required. |
560 typedef LayerIterator<LayerImpl> LayerIteratorType; | 560 typedef LayerIterator<LayerImpl> LayerIteratorType; |
561 LayerIteratorType end = LayerIteratorType::End(&render_surface_layer_list_); | 561 LayerIteratorType end = LayerIteratorType::End(&render_surface_layer_list_); |
562 size_t layers_updated_count = 0; | 562 size_t layers_updated_count = 0; |
| 563 bool tile_priorities_updated = false; |
563 for (LayerIteratorType it = | 564 for (LayerIteratorType it = |
564 LayerIteratorType::Begin(&render_surface_layer_list_); | 565 LayerIteratorType::Begin(&render_surface_layer_list_); |
565 it != end; | 566 it != end; |
566 ++it) { | 567 ++it) { |
567 if (occlusion_tracker) | 568 if (occlusion_tracker) |
568 occlusion_tracker->EnterLayer(it); | 569 occlusion_tracker->EnterLayer(it); |
569 | 570 |
570 LayerImpl* layer = *it; | 571 LayerImpl* layer = *it; |
571 const Occlusion& occlusion_in_content_space = | 572 const Occlusion& occlusion_in_content_space = |
572 occlusion_tracker ? occlusion_tracker->GetCurrentOcclusionForLayer( | 573 occlusion_tracker ? occlusion_tracker->GetCurrentOcclusionForLayer( |
573 layer->draw_transform()) | 574 layer->draw_transform()) |
574 : Occlusion(); | 575 : Occlusion(); |
575 | 576 |
576 if (it.represents_itself()) { | 577 if (it.represents_itself()) { |
577 layer->UpdateTiles(occlusion_in_content_space, | 578 tile_priorities_updated |= layer->UpdateTiles( |
578 resourceless_software_draw); | 579 occlusion_in_content_space, resourceless_software_draw); |
579 ++layers_updated_count; | 580 ++layers_updated_count; |
580 } | 581 } |
581 | 582 |
582 if (!it.represents_contributing_render_surface()) { | 583 if (!it.represents_contributing_render_surface()) { |
583 if (occlusion_tracker) | 584 if (occlusion_tracker) |
584 occlusion_tracker->LeaveLayer(it); | 585 occlusion_tracker->LeaveLayer(it); |
585 continue; | 586 continue; |
586 } | 587 } |
587 | 588 |
588 if (layer->mask_layer()) { | 589 if (layer->mask_layer()) { |
589 layer->mask_layer()->UpdateTiles(occlusion_in_content_space, | 590 tile_priorities_updated |= layer->mask_layer()->UpdateTiles( |
590 resourceless_software_draw); | 591 occlusion_in_content_space, resourceless_software_draw); |
591 ++layers_updated_count; | 592 ++layers_updated_count; |
592 } | 593 } |
593 if (layer->replica_layer() && layer->replica_layer()->mask_layer()) { | 594 if (layer->replica_layer() && layer->replica_layer()->mask_layer()) { |
594 layer->replica_layer()->mask_layer()->UpdateTiles( | 595 tile_priorities_updated |= |
595 occlusion_in_content_space, resourceless_software_draw); | 596 layer->replica_layer()->mask_layer()->UpdateTiles( |
| 597 occlusion_in_content_space, resourceless_software_draw); |
596 ++layers_updated_count; | 598 ++layers_updated_count; |
597 } | 599 } |
598 | 600 |
599 if (occlusion_tracker) | 601 if (occlusion_tracker) |
600 occlusion_tracker->LeaveLayer(it); | 602 occlusion_tracker->LeaveLayer(it); |
601 } | 603 } |
602 | 604 |
| 605 if (tile_priorities_updated) |
| 606 DidModifyTilePriorities(); |
| 607 |
603 TRACE_EVENT_END1("cc", "LayerTreeImpl::UpdateTilePriorities", | 608 TRACE_EVENT_END1("cc", "LayerTreeImpl::UpdateTilePriorities", |
604 "layers_updated_count", layers_updated_count); | 609 "layers_updated_count", layers_updated_count); |
605 } | 610 } |
606 | 611 |
607 DCHECK(!needs_update_draw_properties_) << | 612 DCHECK(!needs_update_draw_properties_) << |
608 "CalcDrawProperties should not set_needs_update_draw_properties()"; | 613 "CalcDrawProperties should not set_needs_update_draw_properties()"; |
609 return true; | 614 return true; |
610 } | 615 } |
611 | 616 |
612 const LayerImplList& LayerTreeImpl::RenderSurfaceLayerList() const { | 617 const LayerImplList& LayerTreeImpl::RenderSurfaceLayerList() const { |
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1074 ResourceProvider::ResourceId LayerTreeImpl::ResourceIdForUIResource( | 1079 ResourceProvider::ResourceId LayerTreeImpl::ResourceIdForUIResource( |
1075 UIResourceId uid) const { | 1080 UIResourceId uid) const { |
1076 return layer_tree_host_impl_->ResourceIdForUIResource(uid); | 1081 return layer_tree_host_impl_->ResourceIdForUIResource(uid); |
1077 } | 1082 } |
1078 | 1083 |
1079 bool LayerTreeImpl::IsUIResourceOpaque(UIResourceId uid) const { | 1084 bool LayerTreeImpl::IsUIResourceOpaque(UIResourceId uid) const { |
1080 return layer_tree_host_impl_->IsUIResourceOpaque(uid); | 1085 return layer_tree_host_impl_->IsUIResourceOpaque(uid); |
1081 } | 1086 } |
1082 | 1087 |
1083 void LayerTreeImpl::ProcessUIResourceRequestQueue() { | 1088 void LayerTreeImpl::ProcessUIResourceRequestQueue() { |
1084 while (ui_resource_request_queue_.size() > 0) { | 1089 for (const auto& req : ui_resource_request_queue_) { |
1085 UIResourceRequest req = ui_resource_request_queue_.front(); | |
1086 ui_resource_request_queue_.pop_front(); | |
1087 | |
1088 switch (req.GetType()) { | 1090 switch (req.GetType()) { |
1089 case UIResourceRequest::UIResourceCreate: | 1091 case UIResourceRequest::UIResourceCreate: |
1090 layer_tree_host_impl_->CreateUIResource(req.GetId(), req.GetBitmap()); | 1092 layer_tree_host_impl_->CreateUIResource(req.GetId(), req.GetBitmap()); |
1091 break; | 1093 break; |
1092 case UIResourceRequest::UIResourceDelete: | 1094 case UIResourceRequest::UIResourceDelete: |
1093 layer_tree_host_impl_->DeleteUIResource(req.GetId()); | 1095 layer_tree_host_impl_->DeleteUIResource(req.GetId()); |
1094 break; | 1096 break; |
1095 case UIResourceRequest::UIResourceInvalidRequest: | 1097 case UIResourceRequest::UIResourceInvalidRequest: |
1096 NOTREACHED(); | 1098 NOTREACHED(); |
1097 break; | 1099 break; |
1098 } | 1100 } |
1099 } | 1101 } |
| 1102 ui_resource_request_queue_.clear(); |
1100 | 1103 |
1101 // If all UI resource evictions were not recreated by processing this queue, | 1104 // If all UI resource evictions were not recreated by processing this queue, |
1102 // then another commit is required. | 1105 // then another commit is required. |
1103 if (layer_tree_host_impl_->EvictedUIResourcesExist()) | 1106 if (layer_tree_host_impl_->EvictedUIResourcesExist()) |
1104 layer_tree_host_impl_->SetNeedsCommit(); | 1107 layer_tree_host_impl_->SetNeedsCommit(); |
1105 } | 1108 } |
1106 | 1109 |
1107 void LayerTreeImpl::AddLayerWithCopyOutputRequest(LayerImpl* layer) { | 1110 void LayerTreeImpl::AddLayerWithCopyOutputRequest(LayerImpl* layer) { |
1108 // Only the active tree needs to know about layers with copy requests, as | 1111 // Only the active tree needs to know about layers with copy requests, as |
1109 // they are aborted if not serviced during draw. | 1112 // they are aborted if not serviced during draw. |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1520 scoped_ptr<PendingPageScaleAnimation> pending_animation) { | 1523 scoped_ptr<PendingPageScaleAnimation> pending_animation) { |
1521 pending_page_scale_animation_ = pending_animation.Pass(); | 1524 pending_page_scale_animation_ = pending_animation.Pass(); |
1522 } | 1525 } |
1523 | 1526 |
1524 scoped_ptr<PendingPageScaleAnimation> | 1527 scoped_ptr<PendingPageScaleAnimation> |
1525 LayerTreeImpl::TakePendingPageScaleAnimation() { | 1528 LayerTreeImpl::TakePendingPageScaleAnimation() { |
1526 return pending_page_scale_animation_.Pass(); | 1529 return pending_page_scale_animation_.Pass(); |
1527 } | 1530 } |
1528 | 1531 |
1529 } // namespace cc | 1532 } // namespace cc |
OLD | NEW |