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

Side by Side Diff: cc/trees/layer_tree_host.cc

Issue 1088773003: Reuse property trees (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: no more first tick nonsense. Created 5 years, 8 months 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 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_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <stack> 8 #include <stack>
9 #include <string> 9 #include <string>
10 10
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 "LayerTreeHost::SetNeedsCommit::cancel prepaint", 502 "LayerTreeHost::SetNeedsCommit::cancel prepaint",
503 TRACE_EVENT_SCOPE_THREAD); 503 TRACE_EVENT_SCOPE_THREAD);
504 prepaint_callback_.Cancel(); 504 prepaint_callback_.Cancel();
505 } 505 }
506 proxy_->SetNeedsCommit(); 506 proxy_->SetNeedsCommit();
507 NotifySwapPromiseMonitorsOfSetNeedsCommit(); 507 NotifySwapPromiseMonitorsOfSetNeedsCommit();
508 } 508 }
509 509
510 void LayerTreeHost::SetNeedsFullTreeSync() { 510 void LayerTreeHost::SetNeedsFullTreeSync() {
511 needs_full_tree_sync_ = true; 511 needs_full_tree_sync_ = true;
512
513 property_trees_.needs_rebuild = true;
512 SetNeedsCommit(); 514 SetNeedsCommit();
513 } 515 }
514 516
515 void LayerTreeHost::SetNeedsRedraw() { 517 void LayerTreeHost::SetNeedsRedraw() {
516 SetNeedsRedrawRect(gfx::Rect(device_viewport_size_)); 518 SetNeedsRedrawRect(gfx::Rect(device_viewport_size_));
517 } 519 }
518 520
519 void LayerTreeHost::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { 521 void LayerTreeHost::SetNeedsRedrawRect(const gfx::Rect& damage_rect) {
520 proxy_->SetNeedsRedraw(damage_rect); 522 proxy_->SetNeedsRedraw(damage_rect);
521 } 523 }
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 "has_trigger", 621 "has_trigger",
620 has_gpu_rasterization_trigger_); 622 has_gpu_rasterization_trigger_);
621 } 623 }
622 624
623 void LayerTreeHost::SetViewportSize(const gfx::Size& device_viewport_size) { 625 void LayerTreeHost::SetViewportSize(const gfx::Size& device_viewport_size) {
624 if (device_viewport_size == device_viewport_size_) 626 if (device_viewport_size == device_viewport_size_)
625 return; 627 return;
626 628
627 device_viewport_size_ = device_viewport_size; 629 device_viewport_size_ = device_viewport_size;
628 630
631 property_trees_.needs_rebuild = true;
629 SetNeedsCommit(); 632 SetNeedsCommit();
630 } 633 }
631 634
632 void LayerTreeHost::SetTopControlsHeight(float height, bool shrink) { 635 void LayerTreeHost::SetTopControlsHeight(float height, bool shrink) {
633 if (top_controls_height_ == height && 636 if (top_controls_height_ == height &&
634 top_controls_shrink_blink_size_ == shrink) 637 top_controls_shrink_blink_size_ == shrink)
635 return; 638 return;
636 639
637 top_controls_height_ = height; 640 top_controls_height_ = height;
638 top_controls_shrink_blink_size_ = shrink; 641 top_controls_shrink_blink_size_ = shrink;
639 SetNeedsCommit(); 642 SetNeedsCommit();
640 } 643 }
641 644
642 void LayerTreeHost::SetTopControlsShownRatio(float ratio) { 645 void LayerTreeHost::SetTopControlsShownRatio(float ratio) {
643 if (top_controls_shown_ratio_ == ratio) 646 if (top_controls_shown_ratio_ == ratio)
644 return; 647 return;
645 648
646 top_controls_shown_ratio_ = ratio; 649 top_controls_shown_ratio_ = ratio;
647 SetNeedsCommit(); 650 SetNeedsCommit();
648 } 651 }
649 652
650 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) { 653 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) {
651 DCHECK(CommitRequested()); 654 DCHECK(CommitRequested());
655 if (page_scale_delta == 1.f)
656 return;
652 page_scale_factor_ *= page_scale_delta; 657 page_scale_factor_ *= page_scale_delta;
658 property_trees_.needs_rebuild = true;
653 } 659 }
654 660
655 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, 661 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor,
656 float min_page_scale_factor, 662 float min_page_scale_factor,
657 float max_page_scale_factor) { 663 float max_page_scale_factor) {
658 if (page_scale_factor == page_scale_factor_ && 664 if (page_scale_factor == page_scale_factor_ &&
659 min_page_scale_factor == min_page_scale_factor_ && 665 min_page_scale_factor == min_page_scale_factor_ &&
660 max_page_scale_factor == max_page_scale_factor_) 666 max_page_scale_factor == max_page_scale_factor_)
661 return; 667 return;
662 668
663 page_scale_factor_ = page_scale_factor; 669 page_scale_factor_ = page_scale_factor;
664 min_page_scale_factor_ = min_page_scale_factor; 670 min_page_scale_factor_ = min_page_scale_factor;
665 max_page_scale_factor_ = max_page_scale_factor; 671 max_page_scale_factor_ = max_page_scale_factor;
672 property_trees_.needs_rebuild = true;
666 SetNeedsCommit(); 673 SetNeedsCommit();
667 } 674 }
668 675
669 void LayerTreeHost::SetVisible(bool visible) { 676 void LayerTreeHost::SetVisible(bool visible) {
670 if (visible_ == visible) 677 if (visible_ == visible)
671 return; 678 return;
672 visible_ = visible; 679 visible_ = visible;
673 if (!visible) 680 if (!visible)
674 ReduceMemoryUsage(); 681 ReduceMemoryUsage();
675 proxy_->SetVisible(visible); 682 proxy_->SetVisible(visible);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 hud_layer_->PrepareForCalculateDrawProperties( 796 hud_layer_->PrepareForCalculateDrawProperties(
790 device_viewport_size(), device_scale_factor_); 797 device_viewport_size(), device_scale_factor_);
791 } 798 }
792 799
793 TRACE_EVENT0("cc", "LayerTreeHost::UpdateLayers::CalcDrawProps"); 800 TRACE_EVENT0("cc", "LayerTreeHost::UpdateLayers::CalcDrawProps");
794 bool can_render_to_separate_surface = true; 801 bool can_render_to_separate_surface = true;
795 // TODO(vmpstr): Passing 0 as the current render surface layer list id means 802 // TODO(vmpstr): Passing 0 as the current render surface layer list id means
796 // that we won't be able to detect if a layer is part of |update_list|. 803 // that we won't be able to detect if a layer is part of |update_list|.
797 // Change this if this information is required. 804 // Change this if this information is required.
798 int render_surface_layer_list_id = 0; 805 int render_surface_layer_list_id = 0;
799 PropertyTrees property_trees;
800 LayerTreeHostCommon::CalcDrawPropsMainInputs inputs( 806 LayerTreeHostCommon::CalcDrawPropsMainInputs inputs(
801 root_layer, device_viewport_size(), gfx::Transform(), 807 root_layer, device_viewport_size(), gfx::Transform(),
802 device_scale_factor_, page_scale_factor_, page_scale_layer, 808 device_scale_factor_, page_scale_factor_, page_scale_layer,
803 elastic_overscroll_, overscroll_elasticity_layer_.get(), 809 elastic_overscroll_, overscroll_elasticity_layer_.get(),
804 GetRendererCapabilities().max_texture_size, settings_.can_use_lcd_text, 810 GetRendererCapabilities().max_texture_size, settings_.can_use_lcd_text,
805 settings_.layers_always_allowed_lcd_text, 811 settings_.layers_always_allowed_lcd_text,
806 can_render_to_separate_surface, 812 can_render_to_separate_surface,
807 settings_.layer_transforms_should_scale_layer_contents, 813 settings_.layer_transforms_should_scale_layer_contents,
808 settings_.verify_property_trees, &update_list, 814 settings_.verify_property_trees, &update_list,
809 render_surface_layer_list_id, &property_trees); 815 render_surface_layer_list_id, &property_trees_);
810 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 816 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
811 } 817 }
812 818
813 // Reset partial texture update requests. 819 // Reset partial texture update requests.
814 partial_texture_update_requests_ = 0; 820 partial_texture_update_requests_ = 0;
815 821
816 bool did_paint_content = false; 822 bool did_paint_content = false;
817 bool need_more_updates = false; 823 bool need_more_updates = false;
818 PaintLayerContents( 824 PaintLayerContents(
819 update_list, queue, &did_paint_content, &need_more_updates); 825 update_list, queue, &did_paint_content, &need_more_updates);
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 root_layer_.get(), info->scrolls[i].layer_id); 1018 root_layer_.get(), info->scrolls[i].layer_id);
1013 if (!layer) 1019 if (!layer)
1014 continue; 1020 continue;
1015 if (layer == outer_viewport_scroll_layer_.get()) { 1021 if (layer == outer_viewport_scroll_layer_.get()) {
1016 outer_viewport_scroll_delta += info->scrolls[i].scroll_delta; 1022 outer_viewport_scroll_delta += info->scrolls[i].scroll_delta;
1017 } else if (layer == inner_viewport_scroll_layer_.get()) { 1023 } else if (layer == inner_viewport_scroll_layer_.get()) {
1018 inner_viewport_scroll_delta += info->scrolls[i].scroll_delta; 1024 inner_viewport_scroll_delta += info->scrolls[i].scroll_delta;
1019 } else { 1025 } else {
1020 layer->SetScrollOffsetFromImplSide( 1026 layer->SetScrollOffsetFromImplSide(
1021 gfx::ScrollOffsetWithDelta(layer->scroll_offset(), 1027 gfx::ScrollOffsetWithDelta(layer->scroll_offset(),
1022 info->scrolls[i].scroll_delta)); 1028 info->scrolls[i].scroll_delta),
1029 this);
1023 } 1030 }
1024 } 1031 }
1025 } 1032 }
1026 1033
1027 if (!inner_viewport_scroll_delta.IsZero() || 1034 if (!inner_viewport_scroll_delta.IsZero() ||
1028 !outer_viewport_scroll_delta.IsZero() || info->page_scale_delta != 1.f || 1035 !outer_viewport_scroll_delta.IsZero() || info->page_scale_delta != 1.f ||
1029 !info->elastic_overscroll_delta.IsZero() || info->top_controls_delta) { 1036 !info->elastic_overscroll_delta.IsZero() || info->top_controls_delta) {
1030 // Preemptively apply the scroll offset and scale delta here before sending 1037 // Preemptively apply the scroll offset and scale delta here before sending
1031 // it to the client. If the client comes back and sets it to the same 1038 // it to the client. If the client comes back and sets it to the same
1032 // value, then the layer can early out without needing a full commit. 1039 // value, then the layer can early out without needing a full commit.
1033 if (inner_viewport_scroll_layer_.get()) { 1040 if (inner_viewport_scroll_layer_.get()) {
1034 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( 1041 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide(
1035 gfx::ScrollOffsetWithDelta( 1042 gfx::ScrollOffsetWithDelta(
1036 inner_viewport_scroll_layer_->scroll_offset(), 1043 inner_viewport_scroll_layer_->scroll_offset(),
1037 inner_viewport_scroll_delta)); 1044 inner_viewport_scroll_delta),
1045 this);
1038 } 1046 }
1039 1047
1040 if (outer_viewport_scroll_layer_.get()) { 1048 if (outer_viewport_scroll_layer_.get()) {
1041 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide( 1049 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide(
1042 gfx::ScrollOffsetWithDelta( 1050 gfx::ScrollOffsetWithDelta(
1043 outer_viewport_scroll_layer_->scroll_offset(), 1051 outer_viewport_scroll_layer_->scroll_offset(),
1044 outer_viewport_scroll_delta)); 1052 outer_viewport_scroll_delta),
1053 this);
1045 } 1054 }
1046 1055
1047 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta); 1056 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta);
1048 elastic_overscroll_ += info->elastic_overscroll_delta; 1057 elastic_overscroll_ += info->elastic_overscroll_delta;
1049 if (!settings_.use_pinch_virtual_viewport) { 1058 if (!settings_.use_pinch_virtual_viewport) {
1050 // TODO(miletus): Make sure either this code path is totally gone, 1059 // TODO(miletus): Make sure either this code path is totally gone,
1051 // or revisit the flooring here if the old pinch viewport code path 1060 // or revisit the flooring here if the old pinch viewport code path
1052 // is causing problems with fractional scroll offset. 1061 // is causing problems with fractional scroll offset.
1053 client_->ApplyViewportDeltas( 1062 client_->ApplyViewportDeltas(
1054 gfx::ToFlooredVector2d(inner_viewport_scroll_delta + 1063 gfx::ToFlooredVector2d(inner_viewport_scroll_delta +
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1112 1121
1113 partial_texture_update_requests_++; 1122 partial_texture_update_requests_++;
1114 return true; 1123 return true;
1115 } 1124 }
1116 1125
1117 void LayerTreeHost::SetDeviceScaleFactor(float device_scale_factor) { 1126 void LayerTreeHost::SetDeviceScaleFactor(float device_scale_factor) {
1118 if (device_scale_factor == device_scale_factor_) 1127 if (device_scale_factor == device_scale_factor_)
1119 return; 1128 return;
1120 device_scale_factor_ = device_scale_factor; 1129 device_scale_factor_ = device_scale_factor;
1121 1130
1131 property_trees_.needs_rebuild = true;
1122 SetNeedsCommit(); 1132 SetNeedsCommit();
1123 } 1133 }
1124 1134
1125 void LayerTreeHost::UpdateTopControlsState(TopControlsState constraints, 1135 void LayerTreeHost::UpdateTopControlsState(TopControlsState constraints,
1126 TopControlsState current, 1136 TopControlsState current,
1127 bool animate) { 1137 bool animate) {
1128 // Top controls are only used in threaded mode. 1138 // Top controls are only used in threaded mode.
1129 proxy_->ImplThreadTaskRunner()->PostTask( 1139 proxy_->ImplThreadTaskRunner()->PostTask(
1130 FROM_HERE, 1140 FROM_HERE,
1131 base::Bind(&TopControlsManager::UpdateTopControlsState, 1141 base::Bind(&TopControlsManager::UpdateTopControlsState,
1132 top_controls_manager_weak_ptr_, 1142 top_controls_manager_weak_ptr_,
1133 constraints, 1143 constraints,
1134 current, 1144 current,
1135 animate)); 1145 animate));
1136 } 1146 }
1137 1147
1138 void LayerTreeHost::AnimateLayers(base::TimeTicks monotonic_time) { 1148 void LayerTreeHost::AnimateLayers(base::TimeTicks monotonic_time) {
1139 if (!settings_.accelerated_animation_enabled) 1149 if (!settings_.accelerated_animation_enabled)
1140 return; 1150 return;
1141 1151
1142 if (animation_registrar_->AnimateLayers(monotonic_time)) 1152 AnimationEventsVector events;
1143 animation_registrar_->UpdateAnimationState(true, NULL); 1153 if (animation_registrar_->AnimateLayers(monotonic_time)) {
1154 animation_registrar_->UpdateAnimationState(true, &events);
1155 if (!events.empty())
1156 property_trees_.needs_rebuild = true;
1157 }
1144 } 1158 }
1145 1159
1146 UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) { 1160 UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) {
1147 DCHECK(client); 1161 DCHECK(client);
1148 1162
1149 UIResourceId next_id = next_ui_resource_id_++; 1163 UIResourceId next_id = next_ui_resource_id_++;
1150 DCHECK(ui_resource_client_map_.find(next_id) == 1164 DCHECK(ui_resource_client_map_.find(next_id) ==
1151 ui_resource_client_map_.end()); 1165 ui_resource_client_map_.end());
1152 1166
1153 bool resource_lost = false; 1167 bool resource_lost = false;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1273 const BeginFrameArgs& args) const { 1287 const BeginFrameArgs& args) const {
1274 client_->SendBeginFramesToChildren(args); 1288 client_->SendBeginFramesToChildren(args);
1275 } 1289 }
1276 1290
1277 void LayerTreeHost::SetAuthoritativeVSyncInterval( 1291 void LayerTreeHost::SetAuthoritativeVSyncInterval(
1278 const base::TimeDelta& interval) { 1292 const base::TimeDelta& interval) {
1279 proxy_->SetAuthoritativeVSyncInterval(interval); 1293 proxy_->SetAuthoritativeVSyncInterval(interval);
1280 } 1294 }
1281 1295
1282 } // namespace cc 1296 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698