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

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

Issue 901813002: Normalize top controls offset to (0, 1), Chromium-side. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 is_likely_to_require_a_draw_(false), 232 is_likely_to_require_a_draw_(false),
233 frame_timing_tracker_(FrameTimingTracker::Create()) { 233 frame_timing_tracker_(FrameTimingTracker::Create()) {
234 DCHECK(proxy_->IsImplThread()); 234 DCHECK(proxy_->IsImplThread());
235 DidVisibilityChange(this, visible_); 235 DidVisibilityChange(this, visible_);
236 animation_registrar_->set_supports_scroll_animations( 236 animation_registrar_->set_supports_scroll_animations(
237 proxy_->SupportsImplScrolling()); 237 proxy_->SupportsImplScrolling());
238 238
239 SetDebugState(settings.initial_debug_state); 239 SetDebugState(settings.initial_debug_state);
240 240
241 // LTHI always has an active tree. 241 // LTHI always has an active tree.
242 active_tree_ = LayerTreeImpl::create(this, new SyncedProperty<ScaleGroup>(), 242 active_tree_ =
243 new SyncedElasticOverscroll); 243 LayerTreeImpl::create(this, new SyncedProperty<ScaleGroup>(),
244 new SyncedTopControls, new SyncedElasticOverscroll);
244 245
245 TRACE_EVENT_OBJECT_CREATED_WITH_ID( 246 TRACE_EVENT_OBJECT_CREATED_WITH_ID(
246 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_); 247 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_);
247 248
248 if (settings.calculate_top_controls_position) { 249 if (settings.calculate_top_controls_position) {
249 top_controls_manager_ = 250 top_controls_manager_ =
250 TopControlsManager::Create(this, 251 TopControlsManager::Create(this,
251 settings.top_controls_show_threshold, 252 settings.top_controls_show_threshold,
252 settings.top_controls_hide_threshold); 253 settings.top_controls_hide_threshold);
253 } 254 }
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after
1086 EnforceManagedMemoryPolicy(ManagedMemoryPolicy(0)); 1087 EnforceManagedMemoryPolicy(ManagedMemoryPolicy(0));
1087 } 1088 }
1088 1089
1089 void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) { 1090 void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) {
1090 NOTREACHED(); 1091 NOTREACHED();
1091 } 1092 }
1092 1093
1093 void LayerTreeHostImpl::ResetTreesForTesting() { 1094 void LayerTreeHostImpl::ResetTreesForTesting() {
1094 if (active_tree_) 1095 if (active_tree_)
1095 active_tree_->DetachLayerTree(); 1096 active_tree_->DetachLayerTree();
1096 active_tree_ = LayerTreeImpl::create(this, active_tree()->page_scale_factor(), 1097 active_tree_ =
1097 active_tree()->elastic_overscroll()); 1098 LayerTreeImpl::create(this, active_tree()->page_scale_factor(),
1099 active_tree()->top_controls_shown_ratio(),
1100 active_tree()->elastic_overscroll());
1098 if (pending_tree_) 1101 if (pending_tree_)
1099 pending_tree_->DetachLayerTree(); 1102 pending_tree_->DetachLayerTree();
1100 pending_tree_ = nullptr; 1103 pending_tree_ = nullptr;
1101 if (recycle_tree_) 1104 if (recycle_tree_)
1102 recycle_tree_->DetachLayerTree(); 1105 recycle_tree_->DetachLayerTree();
1103 recycle_tree_ = nullptr; 1106 recycle_tree_ = nullptr;
1104 } 1107 }
1105 1108
1106 void LayerTreeHostImpl::EnforceManagedMemoryPolicy( 1109 void LayerTreeHostImpl::EnforceManagedMemoryPolicy(
1107 const ManagedMemoryPolicy& policy) { 1110 const ManagedMemoryPolicy& policy) {
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
1650 1653
1651 ViewportAnchor anchor(InnerViewportScrollLayer(), 1654 ViewportAnchor anchor(InnerViewportScrollLayer(),
1652 OuterViewportScrollLayer()); 1655 OuterViewportScrollLayer());
1653 1656
1654 // Adjust the inner viewport by shrinking/expanding the container to account 1657 // Adjust the inner viewport by shrinking/expanding the container to account
1655 // for the change in top controls height since the last Resize from Blink. 1658 // for the change in top controls height since the last Resize from Blink.
1656 float top_controls_layout_height = 1659 float top_controls_layout_height =
1657 active_tree_->top_controls_shrink_blink_size() 1660 active_tree_->top_controls_shrink_blink_size()
1658 ? active_tree_->top_controls_height() 1661 ? active_tree_->top_controls_height()
1659 : 0.f; 1662 : 0.f;
1660 inner_container->SetBoundsDelta( 1663 inner_container->SetBoundsDelta(gfx::Vector2dF(
1661 gfx::Vector2dF(0, top_controls_layout_height - 1664 0,
1662 active_tree_->total_top_controls_content_offset())); 1665 top_controls_layout_height - top_controls_manager_->ContentTopOffset()));
1663 1666
1664 if (!outer_container || outer_container->BoundsForScrolling().IsEmpty()) 1667 if (!outer_container || outer_container->BoundsForScrolling().IsEmpty())
1665 return; 1668 return;
1666 1669
1667 // Adjust the outer viewport container as well, since adjusting only the 1670 // Adjust the outer viewport container as well, since adjusting only the
1668 // inner may cause its bounds to exceed those of the outer, causing scroll 1671 // inner may cause its bounds to exceed those of the outer, causing scroll
1669 // clamping. We adjust it so it maintains the same aspect ratio as the 1672 // clamping. We adjust it so it maintains the same aspect ratio as the
1670 // inner viewport. 1673 // inner viewport.
1671 float aspect_ratio = inner_container->BoundsForScrolling().width() / 1674 float aspect_ratio = inner_container->BoundsForScrolling().width() /
1672 inner_container->BoundsForScrolling().height(); 1675 inner_container->BoundsForScrolling().height();
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1740 return NULL; 1743 return NULL;
1741 } 1744 }
1742 1745
1743 void LayerTreeHostImpl::CreatePendingTree() { 1746 void LayerTreeHostImpl::CreatePendingTree() {
1744 CHECK(!pending_tree_); 1747 CHECK(!pending_tree_);
1745 if (recycle_tree_) 1748 if (recycle_tree_)
1746 recycle_tree_.swap(pending_tree_); 1749 recycle_tree_.swap(pending_tree_);
1747 else 1750 else
1748 pending_tree_ = 1751 pending_tree_ =
1749 LayerTreeImpl::create(this, active_tree()->page_scale_factor(), 1752 LayerTreeImpl::create(this, active_tree()->page_scale_factor(),
1753 active_tree()->top_controls_shown_ratio(),
1750 active_tree()->elastic_overscroll()); 1754 active_tree()->elastic_overscroll());
1751 1755
1752 // Update the delta from the active tree, which may have
1753 // adjusted its delta prior to the pending tree being created.
1754 DCHECK_EQ(0.f, pending_tree_->sent_top_controls_delta());
1755 pending_tree_->set_top_controls_delta(
1756 active_tree_->top_controls_delta() -
1757 active_tree_->sent_top_controls_delta());
1758 pending_tree_->set_top_controls_height(active_tree_->top_controls_height());
1759
1760 client_->OnCanDrawStateChanged(CanDraw()); 1756 client_->OnCanDrawStateChanged(CanDraw());
1761 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get()); 1757 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get());
1762 } 1758 }
1763 1759
1764 void LayerTreeHostImpl::ActivateSyncTree() { 1760 void LayerTreeHostImpl::ActivateSyncTree() {
1765 if (pending_tree_) { 1761 if (pending_tree_) {
1766 TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get()); 1762 TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get());
1767 1763
1768 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); 1764 active_tree_->SetRootLayerScrollOffsetDelegate(NULL);
1769 active_tree_->PushPersistedState(pending_tree_.get()); 1765 active_tree_->PushPersistedState(pending_tree_.get());
(...skipping 14 matching lines...) Expand all
1784 1780
1785 // Now that we've synced everything from the pending tree to the active 1781 // Now that we've synced everything from the pending tree to the active
1786 // tree, rename the pending tree the recycle tree so we can reuse it on the 1782 // tree, rename the pending tree the recycle tree so we can reuse it on the
1787 // next sync. 1783 // next sync.
1788 DCHECK(!recycle_tree_); 1784 DCHECK(!recycle_tree_);
1789 pending_tree_.swap(recycle_tree_); 1785 pending_tree_.swap(recycle_tree_);
1790 1786
1791 active_tree_->SetRootLayerScrollOffsetDelegate( 1787 active_tree_->SetRootLayerScrollOffsetDelegate(
1792 root_layer_scroll_offset_delegate_); 1788 root_layer_scroll_offset_delegate_);
1793 1789
1794 if (top_controls_manager_) {
1795 top_controls_manager_->SetTopControlsHeight(
1796 active_tree_->top_controls_height());
1797 top_controls_manager_->SetControlsTopOffset(
1798 active_tree_->total_top_controls_content_offset() -
1799 active_tree_->top_controls_height());
1800 }
1801
1802 UpdateViewportContainerSizes(); 1790 UpdateViewportContainerSizes();
1803 } else { 1791 } else {
1804 active_tree_->ProcessUIResourceRequestQueue(); 1792 active_tree_->ProcessUIResourceRequestQueue();
1805 } 1793 }
1806 1794
1807 active_tree_->DidBecomeActive(); 1795 active_tree_->DidBecomeActive();
1808 ActivateAnimations(); 1796 ActivateAnimations();
1809 if (settings_.impl_side_painting) { 1797 if (settings_.impl_side_painting) {
1810 client_->RenewTreePriority(); 1798 client_->RenewTreePriority();
1811 // If we have any picture layers, then by activating we also modified tile 1799 // If we have any picture layers, then by activating we also modified tile
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
2251 } 2239 }
2252 2240
2253 void LayerTreeHostImpl::DidChangeTopControlsPosition() { 2241 void LayerTreeHostImpl::DidChangeTopControlsPosition() {
2254 UpdateViewportContainerSizes(); 2242 UpdateViewportContainerSizes();
2255 SetNeedsRedraw(); 2243 SetNeedsRedraw();
2256 SetNeedsAnimate(); 2244 SetNeedsAnimate();
2257 active_tree_->set_needs_update_draw_properties(); 2245 active_tree_->set_needs_update_draw_properties();
2258 SetFullRootLayerDamage(); 2246 SetFullRootLayerDamage();
2259 } 2247 }
2260 2248
2261 void LayerTreeHostImpl::SetControlsTopOffset(float offset) { 2249 float LayerTreeHostImpl::TopControlsHeight() const {
2262 float current_top_offset = active_tree_->top_controls_content_offset() - 2250 return active_tree_->top_controls_height();
2263 active_tree_->top_controls_height();
2264 active_tree_->set_top_controls_delta(offset - current_top_offset);
2265 } 2251 }
2266 2252
2267 float LayerTreeHostImpl::ControlsTopOffset() const { 2253 void LayerTreeHostImpl::SetCurrentTopControlsShownRatio(float ratio) {
2268 return active_tree_->total_top_controls_content_offset() - 2254 if (active_tree_->SetCurrentTopControlsShownRatio(ratio))
2269 active_tree_->top_controls_height(); 2255 DidChangeTopControlsPosition();
2256 }
2257
2258 float LayerTreeHostImpl::CurrentTopControlsShownRatio() const {
2259 return active_tree_->CurrentTopControlsShownRatio();
2270 } 2260 }
2271 2261
2272 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) { 2262 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) {
2273 DCHECK(input_handler_client_ == NULL); 2263 DCHECK(input_handler_client_ == NULL);
2274 input_handler_client_ = client; 2264 input_handler_client_ = client;
2275 } 2265 }
2276 2266
2277 static LayerImpl* NextScrollLayer(LayerImpl* layer) { 2267 static LayerImpl* NextScrollLayer(LayerImpl* layer) {
2278 if (LayerImpl* scroll_parent = layer->scroll_parent()) 2268 if (LayerImpl* scroll_parent = layer->scroll_parent())
2279 return scroll_parent; 2269 return scroll_parent;
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after
3014 for (size_t i = 0; i < layer_impl->children().size(); ++i) 3004 for (size_t i = 0; i < layer_impl->children().size(); ++i)
3015 CollectScrollDeltas(scroll_info, layer_impl->children()[i]); 3005 CollectScrollDeltas(scroll_info, layer_impl->children()[i]);
3016 } 3006 }
3017 3007
3018 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::ProcessScrollDeltas() { 3008 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::ProcessScrollDeltas() {
3019 scoped_ptr<ScrollAndScaleSet> scroll_info(new ScrollAndScaleSet()); 3009 scoped_ptr<ScrollAndScaleSet> scroll_info(new ScrollAndScaleSet());
3020 3010
3021 CollectScrollDeltas(scroll_info.get(), active_tree_->root_layer()); 3011 CollectScrollDeltas(scroll_info.get(), active_tree_->root_layer());
3022 scroll_info->page_scale_delta = 3012 scroll_info->page_scale_delta =
3023 active_tree_->page_scale_factor()->PullDeltaForMainThread(); 3013 active_tree_->page_scale_factor()->PullDeltaForMainThread();
3014 scroll_info->top_controls_delta =
3015 active_tree()->top_controls_shown_ratio()->PullDeltaForMainThread();
3024 scroll_info->elastic_overscroll_delta = 3016 scroll_info->elastic_overscroll_delta =
3025 active_tree_->elastic_overscroll()->PullDeltaForMainThread(); 3017 active_tree_->elastic_overscroll()->PullDeltaForMainThread();
3026 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_); 3018 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_);
3027 scroll_info->top_controls_delta = active_tree()->top_controls_delta();
3028 active_tree_->set_sent_top_controls_delta(scroll_info->top_controls_delta);
3029 3019
3030 return scroll_info.Pass(); 3020 return scroll_info.Pass();
3031 } 3021 }
3032 3022
3033 void LayerTreeHostImpl::SetFullRootLayerDamage() { 3023 void LayerTreeHostImpl::SetFullRootLayerDamage() {
3034 SetViewportDamage(gfx::Rect(DrawViewportSize())); 3024 SetViewportDamage(gfx::Rect(DrawViewportSize()));
3035 } 3025 }
3036 3026
3037 void LayerTreeHostImpl::ScrollViewportInnerFirst(gfx::Vector2dF scroll_delta) { 3027 void LayerTreeHostImpl::ScrollViewportInnerFirst(gfx::Vector2dF scroll_delta) {
3038 DCHECK(InnerViewportScrollLayer()); 3028 DCHECK(InnerViewportScrollLayer());
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
3478 } 3468 }
3479 3469
3480 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { 3470 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) {
3481 std::vector<PictureLayerImpl*>::iterator it = 3471 std::vector<PictureLayerImpl*>::iterator it =
3482 std::find(picture_layers_.begin(), picture_layers_.end(), layer); 3472 std::find(picture_layers_.begin(), picture_layers_.end(), layer);
3483 DCHECK(it != picture_layers_.end()); 3473 DCHECK(it != picture_layers_.end());
3484 picture_layers_.erase(it); 3474 picture_layers_.erase(it);
3485 } 3475 }
3486 3476
3487 } // namespace cc 3477 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698