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

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

Issue 511253003: Made Blink aware of top controls offset (Chromium-side) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added top_controls_content_offset Created 6 years, 3 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 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 paint_time_counter_(PaintTimeCounter::Create()), 242 paint_time_counter_(PaintTimeCounter::Create()),
243 memory_history_(MemoryHistory::Create()), 243 memory_history_(MemoryHistory::Create()),
244 debug_rect_history_(DebugRectHistory::Create()), 244 debug_rect_history_(DebugRectHistory::Create()),
245 texture_mailbox_deleter_(new TextureMailboxDeleter( 245 texture_mailbox_deleter_(new TextureMailboxDeleter(
246 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() 246 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner()
247 : proxy_->MainThreadTaskRunner())), 247 : proxy_->MainThreadTaskRunner())),
248 max_memory_needed_bytes_(0), 248 max_memory_needed_bytes_(0),
249 zero_budget_(false), 249 zero_budget_(false),
250 device_scale_factor_(1.f), 250 device_scale_factor_(1.f),
251 overhang_ui_resource_id_(0), 251 overhang_ui_resource_id_(0),
252 top_controls_layout_height_(0.f),
253 resourceless_software_draw_(false), 252 resourceless_software_draw_(false),
254 begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()), 253 begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()),
255 animation_registrar_(AnimationRegistrar::Create()), 254 animation_registrar_(AnimationRegistrar::Create()),
256 rendering_stats_instrumentation_(rendering_stats_instrumentation), 255 rendering_stats_instrumentation_(rendering_stats_instrumentation),
257 micro_benchmark_controller_(this), 256 micro_benchmark_controller_(this),
258 need_to_update_visible_tiles_before_draw_(false), 257 need_to_update_visible_tiles_before_draw_(false),
259 shared_bitmap_manager_(manager), 258 shared_bitmap_manager_(manager),
260 id_(id), 259 id_(id),
261 transfer_buffer_memory_limit_(0u) { 260 transfer_buffer_memory_limit_(0u) {
262 DCHECK(proxy_->IsImplThread()); 261 DCHECK(proxy_->IsImplThread());
(...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after
1458 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const { 1457 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const {
1459 CompositorFrameMetadata metadata; 1458 CompositorFrameMetadata metadata;
1460 metadata.device_scale_factor = device_scale_factor_; 1459 metadata.device_scale_factor = device_scale_factor_;
1461 metadata.page_scale_factor = active_tree_->total_page_scale_factor(); 1460 metadata.page_scale_factor = active_tree_->total_page_scale_factor();
1462 metadata.scrollable_viewport_size = active_tree_->ScrollableViewportSize(); 1461 metadata.scrollable_viewport_size = active_tree_->ScrollableViewportSize();
1463 metadata.root_layer_size = active_tree_->ScrollableSize(); 1462 metadata.root_layer_size = active_tree_->ScrollableSize();
1464 metadata.min_page_scale_factor = active_tree_->min_page_scale_factor(); 1463 metadata.min_page_scale_factor = active_tree_->min_page_scale_factor();
1465 metadata.max_page_scale_factor = active_tree_->max_page_scale_factor(); 1464 metadata.max_page_scale_factor = active_tree_->max_page_scale_factor();
1466 if (top_controls_manager_) { 1465 if (top_controls_manager_) {
1467 metadata.location_bar_offset = 1466 metadata.location_bar_offset =
1468 gfx::Vector2dF(0.f, top_controls_manager_->controls_top_offset()); 1467 gfx::Vector2dF(0.f, top_controls_manager_->ControlsTopOffset());
1469 metadata.location_bar_content_translation = 1468 metadata.location_bar_content_translation =
1470 gfx::Vector2dF(0.f, top_controls_manager_->content_top_offset()); 1469 gfx::Vector2dF(0.f, top_controls_manager_->ContentTopOffset());
1471 } 1470 }
1472 1471
1473 active_tree_->GetViewportSelection(&metadata.selection_start, 1472 active_tree_->GetViewportSelection(&metadata.selection_start,
1474 &metadata.selection_end); 1473 &metadata.selection_end);
1475 1474
1476 if (!InnerViewportScrollLayer()) 1475 if (!InnerViewportScrollLayer())
1477 return metadata; 1476 return metadata;
1478 1477
1479 metadata.root_scroll_offset = active_tree_->TotalScrollOffset(); 1478 metadata.root_scroll_offset = active_tree_->TotalScrollOffset();
1480 1479
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1671 UpdateCurrentBeginFrameArgs(args); 1670 UpdateCurrentBeginFrameArgs(args);
1672 // Cache the begin impl frame interval 1671 // Cache the begin impl frame interval
1673 begin_impl_frame_interval_ = args.interval; 1672 begin_impl_frame_interval_ = args.interval;
1674 } 1673 }
1675 1674
1676 void LayerTreeHostImpl::UpdateInnerViewportContainerSize() { 1675 void LayerTreeHostImpl::UpdateInnerViewportContainerSize() {
1677 LayerImpl* container_layer = active_tree_->InnerViewportContainerLayer(); 1676 LayerImpl* container_layer = active_tree_->InnerViewportContainerLayer();
1678 if (!container_layer) 1677 if (!container_layer)
1679 return; 1678 return;
1680 1679
1681 if (top_controls_manager_) 1680 if (top_controls_manager_) {
1682 container_layer->SetBoundsDelta( 1681 container_layer->SetBoundsDelta(
1683 gfx::Vector2dF(0, 1682 gfx::Vector2dF(0, active_tree_->top_controls_layout_height() -
1684 top_controls_layout_height_ - 1683 active_tree_->total_top_controls_content_offset()));
1685 top_controls_manager_->content_top_offset())); 1684 }
1686 } 1685 }
1687 1686
1688 void LayerTreeHostImpl::DidLoseOutputSurface() { 1687 void LayerTreeHostImpl::DidLoseOutputSurface() {
1689 if (resource_provider_) 1688 if (resource_provider_)
1690 resource_provider_->DidLoseOutputSurface(); 1689 resource_provider_->DidLoseOutputSurface();
1691 client_->DidLoseOutputSurfaceOnImplThread(); 1690 client_->DidLoseOutputSurfaceOnImplThread();
1692 } 1691 }
1693 1692
1694 bool LayerTreeHostImpl::HaveRootScrollLayer() const { 1693 bool LayerTreeHostImpl::HaveRootScrollLayer() const {
1695 return !!InnerViewportScrollLayer(); 1694 return !!InnerViewportScrollLayer();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1740 void LayerTreeHostImpl::CreatePendingTree() { 1739 void LayerTreeHostImpl::CreatePendingTree() {
1741 CHECK(!pending_tree_); 1740 CHECK(!pending_tree_);
1742 if (recycle_tree_) 1741 if (recycle_tree_)
1743 recycle_tree_.swap(pending_tree_); 1742 recycle_tree_.swap(pending_tree_);
1744 else 1743 else
1745 pending_tree_ = LayerTreeImpl::create(this); 1744 pending_tree_ = LayerTreeImpl::create(this);
1746 1745
1747 // Update the delta from the active tree, which may have 1746 // Update the delta from the active tree, which may have
1748 // adjusted its delta prior to the pending tree being created. 1747 // adjusted its delta prior to the pending tree being created.
1749 DCHECK_EQ(1.f, pending_tree_->sent_page_scale_delta()); 1748 DCHECK_EQ(1.f, pending_tree_->sent_page_scale_delta());
1749 DCHECK_EQ(1.f, pending_tree_->sent_top_controls_delta());
1750 pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() / 1750 pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() /
1751 active_tree_->sent_page_scale_delta()); 1751 active_tree_->sent_page_scale_delta());
1752 pending_tree_->set_top_controls_delta(
1753 active_tree_->top_controls_delta() /
1754 active_tree_->sent_top_controls_delta());
1752 1755
1753 client_->OnCanDrawStateChanged(CanDraw()); 1756 client_->OnCanDrawStateChanged(CanDraw());
1754 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get()); 1757 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get());
1755 } 1758 }
1756 1759
1757 void LayerTreeHostImpl::UpdateVisibleTiles() { 1760 void LayerTreeHostImpl::UpdateVisibleTiles() {
1758 if (tile_manager_ && tile_manager_->UpdateVisibleTiles()) 1761 if (tile_manager_ && tile_manager_->UpdateVisibleTiles())
1759 DidInitializeVisibleTile(); 1762 DidInitializeVisibleTile();
1760 need_to_update_visible_tiles_before_draw_ = false; 1763 need_to_update_visible_tiles_before_draw_ = false;
1761 } 1764 }
(...skipping 22 matching lines...) Expand all
1784 pending_tree_->PushPropertiesTo(active_tree_.get()); 1787 pending_tree_->PushPropertiesTo(active_tree_.get());
1785 1788
1786 // Now that we've synced everything from the pending tree to the active 1789 // Now that we've synced everything from the pending tree to the active
1787 // tree, rename the pending tree the recycle tree so we can reuse it on the 1790 // tree, rename the pending tree the recycle tree so we can reuse it on the
1788 // next sync. 1791 // next sync.
1789 DCHECK(!recycle_tree_); 1792 DCHECK(!recycle_tree_);
1790 pending_tree_.swap(recycle_tree_); 1793 pending_tree_.swap(recycle_tree_);
1791 1794
1792 active_tree_->SetRootLayerScrollOffsetDelegate( 1795 active_tree_->SetRootLayerScrollOffsetDelegate(
1793 root_layer_scroll_offset_delegate_); 1796 root_layer_scroll_offset_delegate_);
1797
1798 top_controls_manager_->SetControlsTopOffset(
1799 active_tree_->total_top_controls_content_offset()
1800 - top_controls_manager_->top_controls_height());
1801
1794 UpdateInnerViewportContainerSize(); 1802 UpdateInnerViewportContainerSize();
1795 } else { 1803 } else {
1796 active_tree_->ProcessUIResourceRequestQueue(); 1804 active_tree_->ProcessUIResourceRequestQueue();
1797 } 1805 }
1798 1806
1799 active_tree_->DidBecomeActive(); 1807 active_tree_->DidBecomeActive();
1800 ActivateAnimations(); 1808 ActivateAnimations();
1801 if (settings_.impl_side_painting) 1809 if (settings_.impl_side_painting)
1802 client_->RenewTreePriority(); 1810 client_->RenewTreePriority();
1803 1811
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
2139 active_tree_->SetViewportSizeInvalid(); 2147 active_tree_->SetViewportSizeInvalid();
2140 2148
2141 device_viewport_size_ = device_viewport_size; 2149 device_viewport_size_ = device_viewport_size;
2142 2150
2143 UpdateInnerViewportContainerSize(); 2151 UpdateInnerViewportContainerSize();
2144 client_->OnCanDrawStateChanged(CanDraw()); 2152 client_->OnCanDrawStateChanged(CanDraw());
2145 SetFullRootLayerDamage(); 2153 SetFullRootLayerDamage();
2146 active_tree_->set_needs_update_draw_properties(); 2154 active_tree_->set_needs_update_draw_properties();
2147 } 2155 }
2148 2156
2149 void LayerTreeHostImpl::SetTopControlsLayoutHeight(
2150 float top_controls_layout_height) {
2151 if (top_controls_layout_height_ == top_controls_layout_height)
2152 return;
2153 top_controls_layout_height_ = top_controls_layout_height;
2154
2155 UpdateInnerViewportContainerSize();
2156 SetFullRootLayerDamage();
2157 }
2158
2159 void LayerTreeHostImpl::SetOverhangUIResource( 2157 void LayerTreeHostImpl::SetOverhangUIResource(
2160 UIResourceId overhang_ui_resource_id, 2158 UIResourceId overhang_ui_resource_id,
2161 const gfx::Size& overhang_ui_resource_size) { 2159 const gfx::Size& overhang_ui_resource_size) {
2162 overhang_ui_resource_id_ = overhang_ui_resource_id; 2160 overhang_ui_resource_id_ = overhang_ui_resource_id;
2163 overhang_ui_resource_size_ = overhang_ui_resource_size; 2161 overhang_ui_resource_size_ = overhang_ui_resource_size;
2164 } 2162 }
2165 2163
2166 void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) { 2164 void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) {
2167 if (device_scale_factor == device_scale_factor_) 2165 if (device_scale_factor == device_scale_factor_)
2168 return; 2166 return;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2201 } 2199 }
2202 2200
2203 void LayerTreeHostImpl::DidChangeTopControlsPosition() { 2201 void LayerTreeHostImpl::DidChangeTopControlsPosition() {
2204 UpdateInnerViewportContainerSize(); 2202 UpdateInnerViewportContainerSize();
2205 SetNeedsRedraw(); 2203 SetNeedsRedraw();
2206 SetNeedsAnimate(); 2204 SetNeedsAnimate();
2207 active_tree_->set_needs_update_draw_properties(); 2205 active_tree_->set_needs_update_draw_properties();
2208 SetFullRootLayerDamage(); 2206 SetFullRootLayerDamage();
2209 } 2207 }
2210 2208
2209 void LayerTreeHostImpl::SetControlsTopOffset(float offset) {
2210 float target_content_top =
2211 offset + top_controls_manager_->controls_height();
2212
2213 active_tree_->set_top_controls_delta(
2214 target_content_top - active_tree_->top_controls_content_offset());
2215 }
2216
2217 float LayerTreeHostImpl::ControlsTopOffset() const {
2218 return active_tree_->total_top_controls_content_offset() -
2219 top_controls_manager_->controls_height();
2220 }
2221
2211 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) { 2222 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) {
2212 DCHECK(input_handler_client_ == NULL); 2223 DCHECK(input_handler_client_ == NULL);
2213 input_handler_client_ = client; 2224 input_handler_client_ = client;
2214 } 2225 }
2215 2226
2216 static LayerImpl* NextScrollLayer(LayerImpl* layer) { 2227 static LayerImpl* NextScrollLayer(LayerImpl* layer) {
2217 if (LayerImpl* scroll_parent = layer->scroll_parent()) 2228 if (LayerImpl* scroll_parent = layer->scroll_parent())
2218 return scroll_parent; 2229 return scroll_parent;
2219 return layer->parent(); 2230 return layer->parent();
2220 } 2231 }
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after
2901 CollectScrollDeltas(scroll_info, layer_impl->children()[i]); 2912 CollectScrollDeltas(scroll_info, layer_impl->children()[i]);
2902 } 2913 }
2903 2914
2904 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::ProcessScrollDeltas() { 2915 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::ProcessScrollDeltas() {
2905 scoped_ptr<ScrollAndScaleSet> scroll_info(new ScrollAndScaleSet()); 2916 scoped_ptr<ScrollAndScaleSet> scroll_info(new ScrollAndScaleSet());
2906 2917
2907 CollectScrollDeltas(scroll_info.get(), active_tree_->root_layer()); 2918 CollectScrollDeltas(scroll_info.get(), active_tree_->root_layer());
2908 scroll_info->page_scale_delta = active_tree_->page_scale_delta(); 2919 scroll_info->page_scale_delta = active_tree_->page_scale_delta();
2909 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta); 2920 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta);
2910 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_); 2921 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_);
2922 scroll_info->top_controls_delta = active_tree()->top_controls_delta();
2923 active_tree_->set_sent_top_controls_delta(scroll_info->top_controls_delta);
2911 2924
2912 return scroll_info.Pass(); 2925 return scroll_info.Pass();
2913 } 2926 }
2914 2927
2915 void LayerTreeHostImpl::SetFullRootLayerDamage() { 2928 void LayerTreeHostImpl::SetFullRootLayerDamage() {
2916 SetViewportDamage(gfx::Rect(DrawViewportSize())); 2929 SetViewportDamage(gfx::Rect(DrawViewportSize()));
2917 } 2930 }
2918 2931
2919 void LayerTreeHostImpl::ScrollViewportBy(gfx::Vector2dF scroll_delta) { 2932 void LayerTreeHostImpl::ScrollViewportBy(gfx::Vector2dF scroll_delta) {
2920 DCHECK(InnerViewportScrollLayer()); 2933 DCHECK(InnerViewportScrollLayer());
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
3332 } 3345 }
3333 3346
3334 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { 3347 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) {
3335 std::vector<PictureLayerImpl*>::iterator it = 3348 std::vector<PictureLayerImpl*>::iterator it =
3336 std::find(picture_layers_.begin(), picture_layers_.end(), layer); 3349 std::find(picture_layers_.begin(), picture_layers_.end(), layer);
3337 DCHECK(it != picture_layers_.end()); 3350 DCHECK(it != picture_layers_.end());
3338 picture_layers_.erase(it); 3351 picture_layers_.erase(it);
3339 } 3352 }
3340 3353
3341 } // namespace cc 3354 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698