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_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 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
12 #include "base/debug/trace_event.h" | 12 #include "base/debug/trace_event.h" |
13 #include "base/message_loop.h" | 13 #include "base/message_loop.h" |
14 #include "base/metrics/histogram.h" | 14 #include "base/metrics/histogram.h" |
15 #include "base/stl_util.h" | 15 #include "base/stl_util.h" |
16 #include "base/strings/string_number_conversions.h" | 16 #include "base/strings/string_number_conversions.h" |
17 #include "cc/animation/animation_registrar.h" | 17 #include "cc/animation/animation_registrar.h" |
18 #include "cc/animation/layer_animation_controller.h" | 18 #include "cc/animation/layer_animation_controller.h" |
19 #include "cc/base/math_util.h" | 19 #include "cc/base/math_util.h" |
20 #include "cc/base/thread.h" | 20 #include "cc/base/thread.h" |
21 #include "cc/debug/overdraw_metrics.h" | 21 #include "cc/debug/overdraw_metrics.h" |
22 #include "cc/debug/rendering_stats_instrumentation.h" | 22 #include "cc/debug/rendering_stats_instrumentation.h" |
| 23 #include "cc/input/inner_viewport_scrollbar.h" |
23 #include "cc/input/top_controls_manager.h" | 24 #include "cc/input/top_controls_manager.h" |
24 #include "cc/layers/heads_up_display_layer.h" | 25 #include "cc/layers/heads_up_display_layer.h" |
25 #include "cc/layers/heads_up_display_layer_impl.h" | 26 #include "cc/layers/heads_up_display_layer_impl.h" |
26 #include "cc/layers/layer.h" | 27 #include "cc/layers/layer.h" |
27 #include "cc/layers/layer_iterator.h" | 28 #include "cc/layers/layer_iterator.h" |
28 #include "cc/layers/render_surface.h" | 29 #include "cc/layers/render_surface.h" |
29 #include "cc/layers/scrollbar_layer.h" | 30 #include "cc/layers/scrollbar_layer.h" |
30 #include "cc/resources/prioritized_resource_manager.h" | 31 #include "cc/resources/prioritized_resource_manager.h" |
31 #include "cc/trees/layer_tree_host_client.h" | 32 #include "cc/trees/layer_tree_host_client.h" |
32 #include "cc/trees/layer_tree_host_common.h" | 33 #include "cc/trees/layer_tree_host_common.h" |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 } else { | 308 } else { |
308 sync_tree->set_hud_layer(NULL); | 309 sync_tree->set_hud_layer(NULL); |
309 } | 310 } |
310 | 311 |
311 sync_tree->set_source_frame_number(commit_number()); | 312 sync_tree->set_source_frame_number(commit_number()); |
312 sync_tree->set_background_color(background_color_); | 313 sync_tree->set_background_color(background_color_); |
313 sync_tree->set_has_transparent_background(has_transparent_background_); | 314 sync_tree->set_has_transparent_background(has_transparent_background_); |
314 | 315 |
315 sync_tree->FindRootScrollLayer(); | 316 sync_tree->FindRootScrollLayer(); |
316 | 317 |
| 318 if (settings_.use_pinch_virtual_viewport && page_scale_layer_) { |
| 319 DCHECK(inner_viewport_scroll_layer_); |
| 320 DCHECK(outer_viewport_scroll_layer_); |
| 321 sync_tree->SetPinchViewportLayerIds(page_scale_layer_->id(), |
| 322 inner_viewport_scroll_layer_->id(), |
| 323 outer_viewport_scroll_layer_->id()); |
| 324 } |
| 325 |
317 float page_scale_delta, sent_page_scale_delta; | 326 float page_scale_delta, sent_page_scale_delta; |
318 if (settings_.impl_side_painting) { | 327 if (settings_.impl_side_painting) { |
319 // Update the delta from the active tree, which may have | 328 // Update the delta from the active tree, which may have |
320 // adjusted its delta prior to the pending tree being created. | 329 // adjusted its delta prior to the pending tree being created. |
321 // This code is equivalent to that in LayerTreeImpl::SetPageScaleDelta. | 330 // This code is equivalent to that in LayerTreeImpl::SetPageScaleDelta. |
322 DCHECK_EQ(1.f, sync_tree->sent_page_scale_delta()); | 331 DCHECK_EQ(1.f, sync_tree->sent_page_scale_delta()); |
323 page_scale_delta = host_impl->active_tree()->page_scale_delta(); | 332 page_scale_delta = host_impl->active_tree()->page_scale_delta(); |
324 sent_page_scale_delta = host_impl->active_tree()->sent_page_scale_delta(); | 333 sent_page_scale_delta = host_impl->active_tree()->sent_page_scale_delta(); |
325 } else { | 334 } else { |
326 page_scale_delta = sync_tree->page_scale_delta(); | 335 page_scale_delta = sync_tree->page_scale_delta(); |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 root_layer_ = root_layer; | 546 root_layer_ = root_layer; |
538 if (root_layer_.get()) | 547 if (root_layer_.get()) |
539 root_layer_->SetLayerTreeHost(this); | 548 root_layer_->SetLayerTreeHost(this); |
540 | 549 |
541 if (hud_layer_.get()) | 550 if (hud_layer_.get()) |
542 hud_layer_->RemoveFromParent(); | 551 hud_layer_->RemoveFromParent(); |
543 | 552 |
544 SetNeedsFullTreeSync(); | 553 SetNeedsFullTreeSync(); |
545 } | 554 } |
546 | 555 |
| 556 static void SetupInnerViewportScrollbar(Layer* parent, |
| 557 scoped_refptr<Layer>& scrollbar, |
| 558 scoped_refptr<Layer> scroll_layer, |
| 559 scoped_refptr<Layer> clip_layer, |
| 560 ScrollbarOrientation orientation) { |
| 561 int scrollbar_thickness = |
| 562 orientation == HORIZONTAL ? parent->bounds().height() |
| 563 : parent->bounds().width(); |
| 564 scrollbar = ScrollbarLayer::Create( |
| 565 make_scoped_ptr(new InnerViewportScrollbar( |
| 566 scroll_layer, clip_layer, orientation, scrollbar_thickness)) |
| 567 .PassAs<Scrollbar>(), |
| 568 scroll_layer->id()); |
| 569 parent->RemoveAllChildren(); |
| 570 parent->AddChild(scrollbar); |
| 571 scrollbar->SetBounds(parent->bounds()); |
| 572 scrollbar->SetIsDrawable(true); |
| 573 } |
| 574 |
| 575 void LayerTreeHost::RegisterPinchViewportLayers( |
| 576 scoped_refptr<Layer> inner_viewport_clip_layer, |
| 577 scoped_refptr<Layer> page_scale_layer, |
| 578 scoped_refptr<Layer> inner_viewport_scroll_layer, |
| 579 scoped_refptr<Layer> outer_viewport_scroll_layer, |
| 580 scoped_refptr<Layer> inner_viewport_horizontal_scrollbar_layer, |
| 581 scoped_refptr<Layer> inner_viewport_vertical_scrollbar_layer) { |
| 582 inner_viewport_clip_layer_ = inner_viewport_clip_layer; |
| 583 page_scale_layer_ = page_scale_layer; |
| 584 inner_viewport_scroll_layer_ = inner_viewport_scroll_layer; |
| 585 outer_viewport_scroll_layer_ = outer_viewport_scroll_layer; |
| 586 |
| 587 if (inner_viewport_horizontal_scrollbar_layer) { |
| 588 SetupInnerViewportScrollbar(inner_viewport_horizontal_scrollbar_layer, |
| 589 inner_viewport_horizontal_scrollbar_layer_, |
| 590 inner_viewport_scroll_layer, |
| 591 inner_viewport_clip_layer, |
| 592 HORIZONTAL); |
| 593 } else { |
| 594 inner_viewport_horizontal_scrollbar_layer_ = nullptr; |
| 595 } |
| 596 |
| 597 if (inner_viewport_vertical_scrollbar_layer) { |
| 598 SetupInnerViewportScrollbar(inner_viewport_vertical_scrollbar_layer, |
| 599 inner_viewport_vertical_scrollbar_layer_, |
| 600 inner_viewport_scroll_layer, |
| 601 inner_viewport_clip_layer, |
| 602 VERTICAL); |
| 603 } else { |
| 604 inner_viewport_vertical_scrollbar_layer_ = nullptr; |
| 605 } |
| 606 } |
| 607 |
547 void LayerTreeHost::SetDebugState(const LayerTreeDebugState& debug_state) { | 608 void LayerTreeHost::SetDebugState(const LayerTreeDebugState& debug_state) { |
548 LayerTreeDebugState new_debug_state = | 609 LayerTreeDebugState new_debug_state = |
549 LayerTreeDebugState::Unite(settings_.initial_debug_state, debug_state); | 610 LayerTreeDebugState::Unite(settings_.initial_debug_state, debug_state); |
550 | 611 |
551 if (LayerTreeDebugState::Equal(debug_state_, new_debug_state)) | 612 if (LayerTreeDebugState::Equal(debug_state_, new_debug_state)) |
552 return; | 613 return; |
553 | 614 |
554 debug_state_ = new_debug_state; | 615 debug_state_ = new_debug_state; |
555 | 616 |
556 rendering_stats_instrumentation_->set_record_rendering_stats( | 617 rendering_stats_instrumentation_->set_record_rendering_stats( |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
710 void LayerTreeHost::UpdateLayers(Layer* root_layer, | 771 void LayerTreeHost::UpdateLayers(Layer* root_layer, |
711 ResourceUpdateQueue* queue) { | 772 ResourceUpdateQueue* queue) { |
712 TRACE_EVENT1("cc", "LayerTreeHost::UpdateLayers", | 773 TRACE_EVENT1("cc", "LayerTreeHost::UpdateLayers", |
713 "commit_number", commit_number()); | 774 "commit_number", commit_number()); |
714 | 775 |
715 LayerList update_list; | 776 LayerList update_list; |
716 { | 777 { |
717 UpdateHudLayer(); | 778 UpdateHudLayer(); |
718 | 779 |
719 Layer* root_scroll = FindFirstScrollableLayer(root_layer); | 780 Layer* root_scroll = FindFirstScrollableLayer(root_layer); |
| 781 Layer* page_scale_layer = |
| 782 page_scale_layer_ ? page_scale_layer_.get() : root_scroll; |
720 | 783 |
721 TRACE_EVENT0("cc", "LayerTreeHost::UpdateLayers::CalcDrawProps"); | 784 TRACE_EVENT0("cc", "LayerTreeHost::UpdateLayers::CalcDrawProps"); |
722 LayerTreeHostCommon::CalculateDrawProperties( | 785 LayerTreeHostCommon::CalculateDrawProperties( |
723 root_layer, | 786 root_layer, |
724 device_viewport_size(), | 787 device_viewport_size(), |
725 gfx::Transform(), | 788 gfx::Transform(), |
726 device_scale_factor_, | 789 device_scale_factor_, |
727 page_scale_factor_, | 790 page_scale_factor_, |
728 root_scroll, | 791 page_scale_layer, |
729 GetRendererCapabilities().max_texture_size, | 792 GetRendererCapabilities().max_texture_size, |
730 settings_.can_use_lcd_text, | 793 settings_.can_use_lcd_text, |
731 settings_.layer_transforms_should_scale_layer_contents, | 794 settings_.layer_transforms_should_scale_layer_contents, |
732 &update_list); | 795 &update_list); |
733 | 796 |
734 if (total_frames_used_for_lcd_text_metrics_ <= | 797 if (total_frames_used_for_lcd_text_metrics_ <= |
735 kTotalFramesToUseForLCDTextMetrics) { | 798 kTotalFramesToUseForLCDTextMetrics) { |
736 LayerTreeHostCommon::CallFunctionForSubtree< | 799 LayerTreeHostCommon::CallFunctionForSubtree< |
737 CalculateLCDTextMetricsFunctor, Layer>(root_layer); | 800 CalculateLCDTextMetricsFunctor, Layer>(root_layer); |
738 total_frames_used_for_lcd_text_metrics_++; | 801 total_frames_used_for_lcd_text_metrics_++; |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1080 bool start_ready_animations = true; | 1143 bool start_ready_animations = true; |
1081 (*iter).second->UpdateState(start_ready_animations, NULL); | 1144 (*iter).second->UpdateState(start_ready_animations, NULL); |
1082 } | 1145 } |
1083 } | 1146 } |
1084 | 1147 |
1085 skia::RefPtr<SkPicture> LayerTreeHost::CapturePicture() { | 1148 skia::RefPtr<SkPicture> LayerTreeHost::CapturePicture() { |
1086 return proxy_->CapturePicture(); | 1149 return proxy_->CapturePicture(); |
1087 } | 1150 } |
1088 | 1151 |
1089 } // namespace cc | 1152 } // namespace cc |
OLD | NEW |