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

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

Issue 16679011: Add viewport scrollbar class to support overlay scrollbars for pinch zoom virtual viewport. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add scrollbars layers in compositor, plumb layer ids to LayerTreeImpl. Created 7 years, 6 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 | Annotate | Revision Log
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 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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698