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

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: Rebased Created 6 years 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 SetDebugState(settings.initial_debug_state); 236 SetDebugState(settings.initial_debug_state);
237 237
238 // LTHI always has an active tree. 238 // LTHI always has an active tree.
239 active_tree_ = LayerTreeImpl::create(this); 239 active_tree_ = LayerTreeImpl::create(this);
240 TRACE_EVENT_OBJECT_CREATED_WITH_ID( 240 TRACE_EVENT_OBJECT_CREATED_WITH_ID(
241 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_); 241 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_);
242 242
243 if (settings.calculate_top_controls_position) { 243 if (settings.calculate_top_controls_position) {
244 top_controls_manager_ = 244 top_controls_manager_ =
245 TopControlsManager::Create(this, 245 TopControlsManager::Create(this,
246 settings.top_controls_height,
247 settings.top_controls_show_threshold, 246 settings.top_controls_show_threshold,
248 settings.top_controls_hide_threshold); 247 settings.top_controls_hide_threshold);
249
250 // TODO(bokan): This is a quick fix. The browser should lock the top
251 // controls to shown on creation but this appears not to work. Tracked
252 // in crbug.com/417680.
253 // Initialize with top controls showing.
254 SetControlsTopOffset(0.f);
255 } 248 }
256 } 249 }
257 250
258 LayerTreeHostImpl::~LayerTreeHostImpl() { 251 LayerTreeHostImpl::~LayerTreeHostImpl() {
259 DCHECK(proxy_->IsImplThread()); 252 DCHECK(proxy_->IsImplThread());
260 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); 253 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()");
261 TRACE_EVENT_OBJECT_DELETED_WITH_ID( 254 TRACE_EVENT_OBJECT_DELETED_WITH_ID(
262 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_); 255 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_);
263 256
264 if (input_handler_client_) { 257 if (input_handler_client_) {
(...skipping 1388 matching lines...) Expand 10 before | Expand all | Expand 10 after
1653 LayerImpl* outer_container = active_tree_->OuterViewportContainerLayer(); 1646 LayerImpl* outer_container = active_tree_->OuterViewportContainerLayer();
1654 1647
1655 if (!inner_container || !top_controls_manager_) 1648 if (!inner_container || !top_controls_manager_)
1656 return; 1649 return;
1657 1650
1658 ViewportAnchor anchor(InnerViewportScrollLayer(), 1651 ViewportAnchor anchor(InnerViewportScrollLayer(),
1659 OuterViewportScrollLayer()); 1652 OuterViewportScrollLayer());
1660 1653
1661 // Adjust the inner viewport by shrinking/expanding the container to account 1654 // Adjust the inner viewport by shrinking/expanding the container to account
1662 // for the change in top controls height since the last Resize from Blink. 1655 // for the change in top controls height since the last Resize from Blink.
1656 float top_controls_layout_height =
1657 active_tree_->top_controls_shrink_blink_size()
1658 ? active_tree_->top_controls_height()
1659 : 0.f;
1663 inner_container->SetBoundsDelta( 1660 inner_container->SetBoundsDelta(
1664 gfx::Vector2dF(0, active_tree_->top_controls_layout_height() - 1661 gfx::Vector2dF(0, top_controls_layout_height -
1665 active_tree_->total_top_controls_content_offset())); 1662 active_tree_->total_top_controls_content_offset()));
1666 1663
1667 if (!outer_container || outer_container->BoundsForScrolling().IsEmpty()) 1664 if (!outer_container || outer_container->BoundsForScrolling().IsEmpty())
1668 return; 1665 return;
1669 1666
1670 // Adjust the outer viewport container as well, since adjusting only the 1667 // Adjust the outer viewport container as well, since adjusting only the
1671 // inner may cause its bounds to exceed those of the outer, causing scroll 1668 // inner may cause its bounds to exceed those of the outer, causing scroll
1672 // clamping. We adjust it so it maintains the same aspect ratio as the 1669 // clamping. We adjust it so it maintains the same aspect ratio as the
1673 // inner viewport. 1670 // inner viewport.
1674 float aspect_ratio = inner_container->BoundsForScrolling().width() / 1671 float aspect_ratio = inner_container->BoundsForScrolling().width() /
1675 inner_container->BoundsForScrolling().height(); 1672 inner_container->BoundsForScrolling().height();
1676 float target_height = outer_container->BoundsForScrolling().width() / 1673 float target_height = outer_container->BoundsForScrolling().width() /
1677 aspect_ratio; 1674 aspect_ratio;
1678 float current_outer_height = outer_container->BoundsForScrolling().height() - 1675 float current_outer_height = outer_container->BoundsForScrolling().height() -
1679 outer_container->bounds_delta().y(); 1676 outer_container->bounds_delta().y();
1680 gfx::Vector2dF delta(0, target_height - current_outer_height); 1677 gfx::Vector2dF delta(0, target_height - current_outer_height);
1681 1678
1682 outer_container->SetBoundsDelta(delta); 1679 outer_container->SetBoundsDelta(delta);
1683 active_tree_->InnerViewportScrollLayer()->SetBoundsDelta(delta); 1680 active_tree_->InnerViewportScrollLayer()->SetBoundsDelta(delta);
1684 1681
1685 anchor.ResetViewportToAnchoredPosition(); 1682 anchor.ResetViewportToAnchoredPosition();
1686 } 1683 }
1687 1684
1688 void LayerTreeHostImpl::SetTopControlsLayoutHeight(float height) {
1689 if (active_tree_->top_controls_layout_height() == height)
1690 return;
1691
1692 active_tree_->set_top_controls_layout_height(height);
1693 UpdateViewportContainerSizes();
1694 SetFullRootLayerDamage();
1695 }
1696
1697 void LayerTreeHostImpl::SynchronouslyInitializeAllTiles() { 1685 void LayerTreeHostImpl::SynchronouslyInitializeAllTiles() {
1698 // Only valid for the single-threaded non-scheduled/synchronous case 1686 // Only valid for the single-threaded non-scheduled/synchronous case
1699 // using the zero copy raster worker pool. 1687 // using the zero copy raster worker pool.
1700 single_thread_synchronous_task_graph_runner_->RunUntilIdle(); 1688 single_thread_synchronous_task_graph_runner_->RunUntilIdle();
1701 } 1689 }
1702 1690
1703 void LayerTreeHostImpl::DidLoseOutputSurface() { 1691 void LayerTreeHostImpl::DidLoseOutputSurface() {
1704 if (resource_provider_) 1692 if (resource_provider_)
1705 resource_provider_->DidLoseOutputSurface(); 1693 resource_provider_->DidLoseOutputSurface();
1706 client_->DidLoseOutputSurfaceOnImplThread(); 1694 client_->DidLoseOutputSurfaceOnImplThread();
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1761 1749
1762 // Update the delta from the active tree, which may have 1750 // Update the delta from the active tree, which may have
1763 // adjusted its delta prior to the pending tree being created. 1751 // adjusted its delta prior to the pending tree being created.
1764 DCHECK_EQ(1.f, pending_tree_->sent_page_scale_delta()); 1752 DCHECK_EQ(1.f, pending_tree_->sent_page_scale_delta());
1765 DCHECK_EQ(0.f, pending_tree_->sent_top_controls_delta()); 1753 DCHECK_EQ(0.f, pending_tree_->sent_top_controls_delta());
1766 pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() / 1754 pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() /
1767 active_tree_->sent_page_scale_delta()); 1755 active_tree_->sent_page_scale_delta());
1768 pending_tree_->set_top_controls_delta( 1756 pending_tree_->set_top_controls_delta(
1769 active_tree_->top_controls_delta() - 1757 active_tree_->top_controls_delta() -
1770 active_tree_->sent_top_controls_delta()); 1758 active_tree_->sent_top_controls_delta());
1759 pending_tree_->set_top_controls_height(active_tree_->top_controls_height());
1771 1760
1772 client_->OnCanDrawStateChanged(CanDraw()); 1761 client_->OnCanDrawStateChanged(CanDraw());
1773 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get()); 1762 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get());
1774 } 1763 }
1775 1764
1776 void LayerTreeHostImpl::ActivateSyncTree() { 1765 void LayerTreeHostImpl::ActivateSyncTree() {
1777 if (pending_tree_) { 1766 if (pending_tree_) {
1778 TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get()); 1767 TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get());
1779 1768
1780 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); 1769 active_tree_->SetRootLayerScrollOffsetDelegate(NULL);
(...skipping 16 matching lines...) Expand all
1797 // Now that we've synced everything from the pending tree to the active 1786 // Now that we've synced everything from the pending tree to the active
1798 // tree, rename the pending tree the recycle tree so we can reuse it on the 1787 // tree, rename the pending tree the recycle tree so we can reuse it on the
1799 // next sync. 1788 // next sync.
1800 DCHECK(!recycle_tree_); 1789 DCHECK(!recycle_tree_);
1801 pending_tree_.swap(recycle_tree_); 1790 pending_tree_.swap(recycle_tree_);
1802 1791
1803 active_tree_->SetRootLayerScrollOffsetDelegate( 1792 active_tree_->SetRootLayerScrollOffsetDelegate(
1804 root_layer_scroll_offset_delegate_); 1793 root_layer_scroll_offset_delegate_);
1805 1794
1806 if (top_controls_manager_) { 1795 if (top_controls_manager_) {
1796 top_controls_manager_->SetTopControlsHeight(
1797 active_tree_->top_controls_height());
1807 top_controls_manager_->SetControlsTopOffset( 1798 top_controls_manager_->SetControlsTopOffset(
1808 active_tree_->total_top_controls_content_offset() - 1799 active_tree_->total_top_controls_content_offset() -
1809 top_controls_manager_->top_controls_height()); 1800 active_tree_->top_controls_height());
1810 } 1801 }
1811 1802
1812 UpdateViewportContainerSizes(); 1803 UpdateViewportContainerSizes();
1813 } else { 1804 } else {
1814 active_tree_->ProcessUIResourceRequestQueue(); 1805 active_tree_->ProcessUIResourceRequestQueue();
1815 } 1806 }
1816 1807
1817 active_tree_->DidBecomeActive(); 1808 active_tree_->DidBecomeActive();
1818 ActivateAnimations(); 1809 ActivateAnimations();
1819 if (settings_.impl_side_painting) 1810 if (settings_.impl_side_painting)
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
2263 void LayerTreeHostImpl::DidChangeTopControlsPosition() { 2254 void LayerTreeHostImpl::DidChangeTopControlsPosition() {
2264 UpdateViewportContainerSizes(); 2255 UpdateViewportContainerSizes();
2265 SetNeedsRedraw(); 2256 SetNeedsRedraw();
2266 SetNeedsAnimate(); 2257 SetNeedsAnimate();
2267 active_tree_->set_needs_update_draw_properties(); 2258 active_tree_->set_needs_update_draw_properties();
2268 SetFullRootLayerDamage(); 2259 SetFullRootLayerDamage();
2269 } 2260 }
2270 2261
2271 void LayerTreeHostImpl::SetControlsTopOffset(float offset) { 2262 void LayerTreeHostImpl::SetControlsTopOffset(float offset) {
2272 float current_top_offset = active_tree_->top_controls_content_offset() - 2263 float current_top_offset = active_tree_->top_controls_content_offset() -
2273 top_controls_manager_->top_controls_height(); 2264 active_tree_->top_controls_height();
2274 active_tree_->set_top_controls_delta(offset - current_top_offset); 2265 active_tree_->set_top_controls_delta(offset - current_top_offset);
2275 } 2266 }
2276 2267
2277 float LayerTreeHostImpl::ControlsTopOffset() const { 2268 float LayerTreeHostImpl::ControlsTopOffset() const {
2278 return active_tree_->total_top_controls_content_offset() - 2269 return active_tree_->total_top_controls_content_offset() -
2279 top_controls_manager_->top_controls_height(); 2270 active_tree_->top_controls_height();
2280 } 2271 }
2281 2272
2282 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) { 2273 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) {
2283 DCHECK(input_handler_client_ == NULL); 2274 DCHECK(input_handler_client_ == NULL);
2284 input_handler_client_ = client; 2275 input_handler_client_ = client;
2285 } 2276 }
2286 2277
2287 static LayerImpl* NextScrollLayer(LayerImpl* layer) { 2278 static LayerImpl* NextScrollLayer(LayerImpl* layer) {
2288 if (LayerImpl* scroll_parent = layer->scroll_parent()) 2279 if (LayerImpl* scroll_parent = layer->scroll_parent())
2289 return scroll_parent; 2280 return scroll_parent;
(...skipping 1196 matching lines...) Expand 10 before | Expand all | Expand 10 after
3486 } 3477 }
3487 3478
3488 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { 3479 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) {
3489 std::vector<PictureLayerImpl*>::iterator it = 3480 std::vector<PictureLayerImpl*>::iterator it =
3490 std::find(picture_layers_.begin(), picture_layers_.end(), layer); 3481 std::find(picture_layers_.begin(), picture_layers_.end(), layer);
3491 DCHECK(it != picture_layers_.end()); 3482 DCHECK(it != picture_layers_.end());
3492 picture_layers_.erase(it); 3483 picture_layers_.erase(it);
3493 } 3484 }
3494 3485
3495 } // namespace cc 3486 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698