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

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

Issue 714003002: Allow changing top controls height (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added more invalidates when setting the height Created 6 years, 1 month 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 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 SetDebugState(settings.initial_debug_state); 252 SetDebugState(settings.initial_debug_state);
253 253
254 // LTHI always has an active tree. 254 // LTHI always has an active tree.
255 active_tree_ = LayerTreeImpl::create(this); 255 active_tree_ = LayerTreeImpl::create(this);
256 TRACE_EVENT_OBJECT_CREATED_WITH_ID( 256 TRACE_EVENT_OBJECT_CREATED_WITH_ID(
257 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_); 257 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_);
258 258
259 if (settings.calculate_top_controls_position) { 259 if (settings.calculate_top_controls_position) {
260 top_controls_manager_ = 260 top_controls_manager_ =
261 TopControlsManager::Create(this, 261 TopControlsManager::Create(this,
262 settings.top_controls_height,
263 settings.top_controls_show_threshold, 262 settings.top_controls_show_threshold,
264 settings.top_controls_hide_threshold); 263 settings.top_controls_hide_threshold);
265
266 // TODO(bokan): This is a quick fix. The browser should lock the top
267 // controls to shown on creation but this appears not to work. Tracked
268 // in crbug.com/417680.
269 // Initialize with top controls showing.
270 SetControlsTopOffset(0.f);
271 } 264 }
272 } 265 }
273 266
274 LayerTreeHostImpl::~LayerTreeHostImpl() { 267 LayerTreeHostImpl::~LayerTreeHostImpl() {
275 DCHECK(proxy_->IsImplThread()); 268 DCHECK(proxy_->IsImplThread());
276 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); 269 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()");
277 TRACE_EVENT_OBJECT_DELETED_WITH_ID( 270 TRACE_EVENT_OBJECT_DELETED_WITH_ID(
278 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_); 271 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_);
279 272
280 if (input_handler_client_) { 273 if (input_handler_client_) {
(...skipping 1345 matching lines...) Expand 10 before | Expand all | Expand 10 after
1626 LayerImpl* outer_container = active_tree_->OuterViewportContainerLayer(); 1619 LayerImpl* outer_container = active_tree_->OuterViewportContainerLayer();
1627 1620
1628 if (!inner_container || !top_controls_manager_) 1621 if (!inner_container || !top_controls_manager_)
1629 return; 1622 return;
1630 1623
1631 ViewportAnchor anchor(InnerViewportScrollLayer(), 1624 ViewportAnchor anchor(InnerViewportScrollLayer(),
1632 OuterViewportScrollLayer()); 1625 OuterViewportScrollLayer());
1633 1626
1634 // Adjust the inner viewport by shrinking/expanding the container to account 1627 // Adjust the inner viewport by shrinking/expanding the container to account
1635 // for the change in top controls height since the last Resize from Blink. 1628 // for the change in top controls height since the last Resize from Blink.
1629 float top_controls_layout_height =
1630 active_tree_->top_controls_shrink_blink_size()
1631 ? active_tree_->top_controls_height()
1632 : 0.f;
1636 inner_container->SetBoundsDelta( 1633 inner_container->SetBoundsDelta(
1637 gfx::Vector2dF(0, active_tree_->top_controls_layout_height() - 1634 gfx::Vector2dF(0, top_controls_layout_height -
1638 active_tree_->total_top_controls_content_offset())); 1635 active_tree_->total_top_controls_content_offset()));
1639 1636
1640 if (!outer_container || outer_container->BoundsForScrolling().IsEmpty()) 1637 if (!outer_container || outer_container->BoundsForScrolling().IsEmpty())
1641 return; 1638 return;
1642 1639
1643 // Adjust the outer viewport container as well, since adjusting only the 1640 // Adjust the outer viewport container as well, since adjusting only the
1644 // inner may cause its bounds to exceed those of the outer, causing scroll 1641 // inner may cause its bounds to exceed those of the outer, causing scroll
1645 // clamping. We adjust it so it maintains the same aspect ratio as the 1642 // clamping. We adjust it so it maintains the same aspect ratio as the
1646 // inner viewport. 1643 // inner viewport.
1647 float aspect_ratio = inner_container->BoundsForScrolling().width() / 1644 float aspect_ratio = inner_container->BoundsForScrolling().width() /
1648 inner_container->BoundsForScrolling().height(); 1645 inner_container->BoundsForScrolling().height();
1649 float target_height = outer_container->BoundsForScrolling().width() / 1646 float target_height = outer_container->BoundsForScrolling().width() /
1650 aspect_ratio; 1647 aspect_ratio;
1651 float current_outer_height = outer_container->BoundsForScrolling().height() - 1648 float current_outer_height = outer_container->BoundsForScrolling().height() -
1652 outer_container->bounds_delta().y(); 1649 outer_container->bounds_delta().y();
1653 gfx::Vector2dF delta(0, target_height - current_outer_height); 1650 gfx::Vector2dF delta(0, target_height - current_outer_height);
1654 1651
1655 outer_container->SetBoundsDelta(delta); 1652 outer_container->SetBoundsDelta(delta);
1656 active_tree_->InnerViewportScrollLayer()->SetBoundsDelta(delta); 1653 active_tree_->InnerViewportScrollLayer()->SetBoundsDelta(delta);
1657 1654
1658 anchor.ResetViewportToAnchoredPosition(); 1655 anchor.ResetViewportToAnchoredPosition();
1659 } 1656 }
1660 1657
1661 void LayerTreeHostImpl::SetTopControlsLayoutHeight(float height) { 1658 void LayerTreeHostImpl::SetTopControlsHeight(float height) {
1662 if (active_tree_->top_controls_layout_height() == height) 1659 if (active_tree_->top_controls_height() == height)
1663 return; 1660 return;
1664 1661
1665 active_tree_->set_top_controls_layout_height(height); 1662 // Adjust the delta to maintain the current top controls offset.
1663 active_tree_->set_top_controls_delta(active_tree_->top_controls_delta() -
1664 active_tree_->top_controls_height() +
1665 height);
1666 active_tree_->set_top_controls_height(height);
1667 UpdateViewportContainerSizes();
1668 SetNeedsRedraw();
1669 active_tree_->set_needs_update_draw_properties();
1670 SetFullRootLayerDamage();
1671 }
1672
1673 void LayerTreeHostImpl::SetTopControlsShrinkBlinkSize(bool shrink) {
aelias_OOO_until_Jul13 2014/11/21 04:19:21 I don't see any calls to this method in this patch
aelias_OOO_until_Jul13 2014/11/21 04:19:21 I don't see any calls to this method in this patch
David Trainor- moved to gerrit 2014/11/22 00:35:30 Good call. Removed.
1674 if (active_tree_->top_controls_shrink_blink_size() == shrink)
1675 return;
1676
1677 active_tree_->set_top_controls_shrink_blink_size(shrink);
1666 UpdateViewportContainerSizes(); 1678 UpdateViewportContainerSizes();
1667 SetFullRootLayerDamage(); 1679 SetFullRootLayerDamage();
1668 } 1680 }
1669 1681
1670 void LayerTreeHostImpl::SynchronouslyInitializeAllTiles() { 1682 void LayerTreeHostImpl::SynchronouslyInitializeAllTiles() {
1671 // Only valid for the single-threaded non-scheduled/synchronous case 1683 // Only valid for the single-threaded non-scheduled/synchronous case
1672 // using the zero copy raster worker pool. 1684 // using the zero copy raster worker pool.
1673 single_thread_synchronous_task_graph_runner_->RunUntilIdle(); 1685 single_thread_synchronous_task_graph_runner_->RunUntilIdle();
1674 } 1686 }
1675 1687
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1734 1746
1735 // Update the delta from the active tree, which may have 1747 // Update the delta from the active tree, which may have
1736 // adjusted its delta prior to the pending tree being created. 1748 // adjusted its delta prior to the pending tree being created.
1737 DCHECK_EQ(1.f, pending_tree_->sent_page_scale_delta()); 1749 DCHECK_EQ(1.f, pending_tree_->sent_page_scale_delta());
1738 DCHECK_EQ(0.f, pending_tree_->sent_top_controls_delta()); 1750 DCHECK_EQ(0.f, pending_tree_->sent_top_controls_delta());
1739 pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() / 1751 pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() /
1740 active_tree_->sent_page_scale_delta()); 1752 active_tree_->sent_page_scale_delta());
1741 pending_tree_->set_top_controls_delta( 1753 pending_tree_->set_top_controls_delta(
1742 active_tree_->top_controls_delta() - 1754 active_tree_->top_controls_delta() -
1743 active_tree_->sent_top_controls_delta()); 1755 active_tree_->sent_top_controls_delta());
1756 pending_tree_->set_top_controls_height(active_tree_->top_controls_height());
1744 1757
1745 client_->OnCanDrawStateChanged(CanDraw()); 1758 client_->OnCanDrawStateChanged(CanDraw());
1746 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get()); 1759 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get());
1747 } 1760 }
1748 1761
1749 void LayerTreeHostImpl::ActivateSyncTree() { 1762 void LayerTreeHostImpl::ActivateSyncTree() {
1750 if (pending_tree_) { 1763 if (pending_tree_) {
1751 TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get()); 1764 TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get());
1752 1765
1753 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); 1766 active_tree_->SetRootLayerScrollOffsetDelegate(NULL);
(...skipping 16 matching lines...) Expand all
1770 // Now that we've synced everything from the pending tree to the active 1783 // Now that we've synced everything from the pending tree to the active
1771 // tree, rename the pending tree the recycle tree so we can reuse it on the 1784 // tree, rename the pending tree the recycle tree so we can reuse it on the
1772 // next sync. 1785 // next sync.
1773 DCHECK(!recycle_tree_); 1786 DCHECK(!recycle_tree_);
1774 pending_tree_.swap(recycle_tree_); 1787 pending_tree_.swap(recycle_tree_);
1775 1788
1776 active_tree_->SetRootLayerScrollOffsetDelegate( 1789 active_tree_->SetRootLayerScrollOffsetDelegate(
1777 root_layer_scroll_offset_delegate_); 1790 root_layer_scroll_offset_delegate_);
1778 1791
1779 if (top_controls_manager_) { 1792 if (top_controls_manager_) {
1793 top_controls_manager_->SetTopControlsHeight(
1794 active_tree_->top_controls_height());
1780 top_controls_manager_->SetControlsTopOffset( 1795 top_controls_manager_->SetControlsTopOffset(
1781 active_tree_->total_top_controls_content_offset() - 1796 active_tree_->total_top_controls_content_offset() -
1782 top_controls_manager_->top_controls_height()); 1797 top_controls_manager_->top_controls_height());
1783 } 1798 }
1784 1799
1785 UpdateViewportContainerSizes(); 1800 UpdateViewportContainerSizes();
1786 } else { 1801 } else {
1787 active_tree_->ProcessUIResourceRequestQueue(); 1802 active_tree_->ProcessUIResourceRequestQueue();
1788 } 1803 }
1789 1804
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after
2235 void LayerTreeHostImpl::DidChangeTopControlsPosition() { 2250 void LayerTreeHostImpl::DidChangeTopControlsPosition() {
2236 UpdateViewportContainerSizes(); 2251 UpdateViewportContainerSizes();
2237 SetNeedsRedraw(); 2252 SetNeedsRedraw();
2238 SetNeedsAnimate(); 2253 SetNeedsAnimate();
2239 active_tree_->set_needs_update_draw_properties(); 2254 active_tree_->set_needs_update_draw_properties();
2240 SetFullRootLayerDamage(); 2255 SetFullRootLayerDamage();
2241 } 2256 }
2242 2257
2243 void LayerTreeHostImpl::SetControlsTopOffset(float offset) { 2258 void LayerTreeHostImpl::SetControlsTopOffset(float offset) {
2244 float current_top_offset = active_tree_->top_controls_content_offset() - 2259 float current_top_offset = active_tree_->top_controls_content_offset() -
2245 top_controls_manager_->top_controls_height(); 2260 active_tree_->top_controls_height();
2246 active_tree_->set_top_controls_delta(offset - current_top_offset); 2261 active_tree_->set_top_controls_delta(offset - current_top_offset);
2247 } 2262 }
2248 2263
2249 float LayerTreeHostImpl::ControlsTopOffset() const { 2264 float LayerTreeHostImpl::ControlsTopOffset() const {
2250 return active_tree_->total_top_controls_content_offset() - 2265 return active_tree_->total_top_controls_content_offset() -
2251 top_controls_manager_->top_controls_height(); 2266 active_tree_->top_controls_height();
2252 } 2267 }
2253 2268
2254 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) { 2269 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) {
2255 DCHECK(input_handler_client_ == NULL); 2270 DCHECK(input_handler_client_ == NULL);
2256 input_handler_client_ = client; 2271 input_handler_client_ = client;
2257 } 2272 }
2258 2273
2259 static LayerImpl* NextScrollLayer(LayerImpl* layer) { 2274 static LayerImpl* NextScrollLayer(LayerImpl* layer) {
2260 if (LayerImpl* scroll_parent = layer->scroll_parent()) 2275 if (LayerImpl* scroll_parent = layer->scroll_parent())
2261 return scroll_parent; 2276 return scroll_parent;
(...skipping 1180 matching lines...) Expand 10 before | Expand all | Expand 10 after
3442 } 3457 }
3443 3458
3444 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { 3459 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) {
3445 std::vector<PictureLayerImpl*>::iterator it = 3460 std::vector<PictureLayerImpl*>::iterator it =
3446 std::find(picture_layers_.begin(), picture_layers_.end(), layer); 3461 std::find(picture_layers_.begin(), picture_layers_.end(), layer);
3447 DCHECK(it != picture_layers_.end()); 3462 DCHECK(it != picture_layers_.end());
3448 picture_layers_.erase(it); 3463 picture_layers_.erase(it);
3449 } 3464 }
3450 3465
3451 } // namespace cc 3466 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698