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

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: Fixed crash + mojo example build break 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
« 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 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 paint_time_counter_(PaintTimeCounter::Create()), 250 paint_time_counter_(PaintTimeCounter::Create()),
251 memory_history_(MemoryHistory::Create()), 251 memory_history_(MemoryHistory::Create()),
252 debug_rect_history_(DebugRectHistory::Create()), 252 debug_rect_history_(DebugRectHistory::Create()),
253 texture_mailbox_deleter_(new TextureMailboxDeleter( 253 texture_mailbox_deleter_(new TextureMailboxDeleter(
254 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() 254 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner()
255 : proxy_->MainThreadTaskRunner())), 255 : proxy_->MainThreadTaskRunner())),
256 max_memory_needed_bytes_(0), 256 max_memory_needed_bytes_(0),
257 zero_budget_(false), 257 zero_budget_(false),
258 device_scale_factor_(1.f), 258 device_scale_factor_(1.f),
259 overhang_ui_resource_id_(0), 259 overhang_ui_resource_id_(0),
260 top_controls_layout_height_(0.f),
261 resourceless_software_draw_(false), 260 resourceless_software_draw_(false),
262 begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()), 261 begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()),
263 animation_registrar_(AnimationRegistrar::Create()), 262 animation_registrar_(AnimationRegistrar::Create()),
264 rendering_stats_instrumentation_(rendering_stats_instrumentation), 263 rendering_stats_instrumentation_(rendering_stats_instrumentation),
265 micro_benchmark_controller_(this), 264 micro_benchmark_controller_(this),
266 need_to_update_visible_tiles_before_draw_(false), 265 need_to_update_visible_tiles_before_draw_(false),
267 shared_bitmap_manager_(manager), 266 shared_bitmap_manager_(manager),
268 id_(id), 267 id_(id),
269 transfer_buffer_memory_limit_(0u) { 268 transfer_buffer_memory_limit_(0u) {
270 DCHECK(proxy_->IsImplThread()); 269 DCHECK(proxy_->IsImplThread());
(...skipping 1201 matching lines...) Expand 10 before | Expand all | Expand 10 after
1472 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const { 1471 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const {
1473 CompositorFrameMetadata metadata; 1472 CompositorFrameMetadata metadata;
1474 metadata.device_scale_factor = device_scale_factor_; 1473 metadata.device_scale_factor = device_scale_factor_;
1475 metadata.page_scale_factor = active_tree_->total_page_scale_factor(); 1474 metadata.page_scale_factor = active_tree_->total_page_scale_factor();
1476 metadata.scrollable_viewport_size = active_tree_->ScrollableViewportSize(); 1475 metadata.scrollable_viewport_size = active_tree_->ScrollableViewportSize();
1477 metadata.root_layer_size = active_tree_->ScrollableSize(); 1476 metadata.root_layer_size = active_tree_->ScrollableSize();
1478 metadata.min_page_scale_factor = active_tree_->min_page_scale_factor(); 1477 metadata.min_page_scale_factor = active_tree_->min_page_scale_factor();
1479 metadata.max_page_scale_factor = active_tree_->max_page_scale_factor(); 1478 metadata.max_page_scale_factor = active_tree_->max_page_scale_factor();
1480 if (top_controls_manager_) { 1479 if (top_controls_manager_) {
1481 metadata.location_bar_offset = 1480 metadata.location_bar_offset =
1482 gfx::Vector2dF(0.f, top_controls_manager_->controls_top_offset()); 1481 gfx::Vector2dF(0.f, top_controls_manager_->ControlsTopOffset());
1483 metadata.location_bar_content_translation = 1482 metadata.location_bar_content_translation =
1484 gfx::Vector2dF(0.f, top_controls_manager_->content_top_offset()); 1483 gfx::Vector2dF(0.f, top_controls_manager_->ContentTopOffset());
1485 } 1484 }
1486 1485
1487 active_tree_->GetViewportSelection(&metadata.selection_start, 1486 active_tree_->GetViewportSelection(&metadata.selection_start,
1488 &metadata.selection_end); 1487 &metadata.selection_end);
1489 1488
1490 if (!InnerViewportScrollLayer()) 1489 if (!InnerViewportScrollLayer())
1491 return metadata; 1490 return metadata;
1492 1491
1493 metadata.root_scroll_offset = active_tree_->TotalScrollOffset(); 1492 metadata.root_scroll_offset = active_tree_->TotalScrollOffset();
1494 1493
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1685 UpdateCurrentBeginFrameArgs(args); 1684 UpdateCurrentBeginFrameArgs(args);
1686 // Cache the begin impl frame interval 1685 // Cache the begin impl frame interval
1687 begin_impl_frame_interval_ = args.interval; 1686 begin_impl_frame_interval_ = args.interval;
1688 } 1687 }
1689 1688
1690 void LayerTreeHostImpl::UpdateInnerViewportContainerSize() { 1689 void LayerTreeHostImpl::UpdateInnerViewportContainerSize() {
1691 LayerImpl* container_layer = active_tree_->InnerViewportContainerLayer(); 1690 LayerImpl* container_layer = active_tree_->InnerViewportContainerLayer();
1692 if (!container_layer) 1691 if (!container_layer)
1693 return; 1692 return;
1694 1693
1695 if (top_controls_manager_) 1694 if (top_controls_manager_) {
1696 container_layer->SetBoundsDelta( 1695 container_layer->SetBoundsDelta(
1697 gfx::Vector2dF(0, 1696 gfx::Vector2dF(0, active_tree_->top_controls_layout_height() -
1698 top_controls_layout_height_ - 1697 active_tree_->total_top_controls_top_offset() -
1699 top_controls_manager_->content_top_offset())); 1698 top_controls_manager_->controls_height()));
1699 }
1700 }
1701
1702 void LayerTreeHostImpl::SetTopControlsLayoutHeight(float height) {
1703 if (active_tree_->top_controls_layout_height() == height)
1704 return;
1705
1706 active_tree_->set_top_controls_layout_height(height);
1707 UpdateInnerViewportContainerSize();
1708 SetFullRootLayerDamage();
1700 } 1709 }
1701 1710
1702 void LayerTreeHostImpl::DidLoseOutputSurface() { 1711 void LayerTreeHostImpl::DidLoseOutputSurface() {
1703 if (resource_provider_) 1712 if (resource_provider_)
1704 resource_provider_->DidLoseOutputSurface(); 1713 resource_provider_->DidLoseOutputSurface();
1705 client_->DidLoseOutputSurfaceOnImplThread(); 1714 client_->DidLoseOutputSurfaceOnImplThread();
1706 } 1715 }
1707 1716
1708 bool LayerTreeHostImpl::HaveRootScrollLayer() const { 1717 bool LayerTreeHostImpl::HaveRootScrollLayer() const {
1709 return !!InnerViewportScrollLayer(); 1718 return !!InnerViewportScrollLayer();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1754 void LayerTreeHostImpl::CreatePendingTree() { 1763 void LayerTreeHostImpl::CreatePendingTree() {
1755 CHECK(!pending_tree_); 1764 CHECK(!pending_tree_);
1756 if (recycle_tree_) 1765 if (recycle_tree_)
1757 recycle_tree_.swap(pending_tree_); 1766 recycle_tree_.swap(pending_tree_);
1758 else 1767 else
1759 pending_tree_ = LayerTreeImpl::create(this); 1768 pending_tree_ = LayerTreeImpl::create(this);
1760 1769
1761 // Update the delta from the active tree, which may have 1770 // Update the delta from the active tree, which may have
1762 // adjusted its delta prior to the pending tree being created. 1771 // adjusted its delta prior to the pending tree being created.
1763 DCHECK_EQ(1.f, pending_tree_->sent_page_scale_delta()); 1772 DCHECK_EQ(1.f, pending_tree_->sent_page_scale_delta());
1773 DCHECK_EQ(0.f, pending_tree_->sent_top_controls_delta());
1764 pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() / 1774 pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() /
1765 active_tree_->sent_page_scale_delta()); 1775 active_tree_->sent_page_scale_delta());
1776 pending_tree_->set_top_controls_delta(
1777 active_tree_->top_controls_delta() -
1778 active_tree_->sent_top_controls_delta());
1766 1779
1767 client_->OnCanDrawStateChanged(CanDraw()); 1780 client_->OnCanDrawStateChanged(CanDraw());
1768 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get()); 1781 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get());
1769 } 1782 }
1770 1783
1771 void LayerTreeHostImpl::UpdateVisibleTiles() { 1784 void LayerTreeHostImpl::UpdateVisibleTiles() {
1772 if (tile_manager_ && tile_manager_->UpdateVisibleTiles()) 1785 if (tile_manager_ && tile_manager_->UpdateVisibleTiles())
1773 DidInitializeVisibleTile(); 1786 DidInitializeVisibleTile();
1774 need_to_update_visible_tiles_before_draw_ = false; 1787 need_to_update_visible_tiles_before_draw_ = false;
1775 } 1788 }
(...skipping 22 matching lines...) Expand all
1798 pending_tree_->PushPropertiesTo(active_tree_.get()); 1811 pending_tree_->PushPropertiesTo(active_tree_.get());
1799 1812
1800 // Now that we've synced everything from the pending tree to the active 1813 // Now that we've synced everything from the pending tree to the active
1801 // tree, rename the pending tree the recycle tree so we can reuse it on the 1814 // tree, rename the pending tree the recycle tree so we can reuse it on the
1802 // next sync. 1815 // next sync.
1803 DCHECK(!recycle_tree_); 1816 DCHECK(!recycle_tree_);
1804 pending_tree_.swap(recycle_tree_); 1817 pending_tree_.swap(recycle_tree_);
1805 1818
1806 active_tree_->SetRootLayerScrollOffsetDelegate( 1819 active_tree_->SetRootLayerScrollOffsetDelegate(
1807 root_layer_scroll_offset_delegate_); 1820 root_layer_scroll_offset_delegate_);
1821
1822 if (top_controls_manager_) {
1823 top_controls_manager_->SetControlsTopOffset(
1824 active_tree_->total_top_controls_top_offset());
1825 }
1826
1808 UpdateInnerViewportContainerSize(); 1827 UpdateInnerViewportContainerSize();
1809 } else { 1828 } else {
1810 active_tree_->ProcessUIResourceRequestQueue(); 1829 active_tree_->ProcessUIResourceRequestQueue();
1811 } 1830 }
1812 1831
1813 active_tree_->DidBecomeActive(); 1832 active_tree_->DidBecomeActive();
1814 ActivateAnimations(); 1833 ActivateAnimations();
1815 if (settings_.impl_side_painting) 1834 if (settings_.impl_side_painting)
1816 client_->RenewTreePriority(); 1835 client_->RenewTreePriority();
1817 1836
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
2151 active_tree_->SetViewportSizeInvalid(); 2170 active_tree_->SetViewportSizeInvalid();
2152 2171
2153 device_viewport_size_ = device_viewport_size; 2172 device_viewport_size_ = device_viewport_size;
2154 2173
2155 UpdateInnerViewportContainerSize(); 2174 UpdateInnerViewportContainerSize();
2156 client_->OnCanDrawStateChanged(CanDraw()); 2175 client_->OnCanDrawStateChanged(CanDraw());
2157 SetFullRootLayerDamage(); 2176 SetFullRootLayerDamage();
2158 active_tree_->set_needs_update_draw_properties(); 2177 active_tree_->set_needs_update_draw_properties();
2159 } 2178 }
2160 2179
2161 void LayerTreeHostImpl::SetTopControlsLayoutHeight(
2162 float top_controls_layout_height) {
2163 if (top_controls_layout_height_ == top_controls_layout_height)
2164 return;
2165 top_controls_layout_height_ = top_controls_layout_height;
2166
2167 UpdateInnerViewportContainerSize();
2168 SetFullRootLayerDamage();
2169 }
2170
2171 void LayerTreeHostImpl::SetOverhangUIResource( 2180 void LayerTreeHostImpl::SetOverhangUIResource(
2172 UIResourceId overhang_ui_resource_id, 2181 UIResourceId overhang_ui_resource_id,
2173 const gfx::Size& overhang_ui_resource_size) { 2182 const gfx::Size& overhang_ui_resource_size) {
2174 overhang_ui_resource_id_ = overhang_ui_resource_id; 2183 overhang_ui_resource_id_ = overhang_ui_resource_id;
2175 overhang_ui_resource_size_ = overhang_ui_resource_size; 2184 overhang_ui_resource_size_ = overhang_ui_resource_size;
2176 } 2185 }
2177 2186
2178 void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) { 2187 void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) {
2179 if (device_scale_factor == device_scale_factor_) 2188 if (device_scale_factor == device_scale_factor_)
2180 return; 2189 return;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2213 } 2222 }
2214 2223
2215 void LayerTreeHostImpl::DidChangeTopControlsPosition() { 2224 void LayerTreeHostImpl::DidChangeTopControlsPosition() {
2216 UpdateInnerViewportContainerSize(); 2225 UpdateInnerViewportContainerSize();
2217 SetNeedsRedraw(); 2226 SetNeedsRedraw();
2218 SetNeedsAnimate(); 2227 SetNeedsAnimate();
2219 active_tree_->set_needs_update_draw_properties(); 2228 active_tree_->set_needs_update_draw_properties();
2220 SetFullRootLayerDamage(); 2229 SetFullRootLayerDamage();
2221 } 2230 }
2222 2231
2232 void LayerTreeHostImpl::SetControlsTopOffset(float offset) {
2233 active_tree_->set_top_controls_delta(
2234 offset - active_tree_->top_controls_top_offset());
2235 }
2236
2237 float LayerTreeHostImpl::ControlsTopOffset() const {
2238 return active_tree_->total_top_controls_top_offset();
2239 }
2240
2223 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) { 2241 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) {
2224 DCHECK(input_handler_client_ == NULL); 2242 DCHECK(input_handler_client_ == NULL);
2225 input_handler_client_ = client; 2243 input_handler_client_ = client;
2226 } 2244 }
2227 2245
2228 static LayerImpl* NextScrollLayer(LayerImpl* layer) { 2246 static LayerImpl* NextScrollLayer(LayerImpl* layer) {
2229 if (LayerImpl* scroll_parent = layer->scroll_parent()) 2247 if (LayerImpl* scroll_parent = layer->scroll_parent())
2230 return scroll_parent; 2248 return scroll_parent;
2231 return layer->parent(); 2249 return layer->parent();
2232 } 2250 }
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after
2913 CollectScrollDeltas(scroll_info, layer_impl->children()[i]); 2931 CollectScrollDeltas(scroll_info, layer_impl->children()[i]);
2914 } 2932 }
2915 2933
2916 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::ProcessScrollDeltas() { 2934 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::ProcessScrollDeltas() {
2917 scoped_ptr<ScrollAndScaleSet> scroll_info(new ScrollAndScaleSet()); 2935 scoped_ptr<ScrollAndScaleSet> scroll_info(new ScrollAndScaleSet());
2918 2936
2919 CollectScrollDeltas(scroll_info.get(), active_tree_->root_layer()); 2937 CollectScrollDeltas(scroll_info.get(), active_tree_->root_layer());
2920 scroll_info->page_scale_delta = active_tree_->page_scale_delta(); 2938 scroll_info->page_scale_delta = active_tree_->page_scale_delta();
2921 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta); 2939 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta);
2922 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_); 2940 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_);
2941 scroll_info->top_controls_delta = active_tree()->top_controls_delta();
2942 active_tree_->set_sent_top_controls_delta(scroll_info->top_controls_delta);
2923 2943
2924 return scroll_info.Pass(); 2944 return scroll_info.Pass();
2925 } 2945 }
2926 2946
2927 void LayerTreeHostImpl::SetFullRootLayerDamage() { 2947 void LayerTreeHostImpl::SetFullRootLayerDamage() {
2928 SetViewportDamage(gfx::Rect(DrawViewportSize())); 2948 SetViewportDamage(gfx::Rect(DrawViewportSize()));
2929 } 2949 }
2930 2950
2931 void LayerTreeHostImpl::ScrollViewportBy(gfx::Vector2dF scroll_delta) { 2951 void LayerTreeHostImpl::ScrollViewportBy(gfx::Vector2dF scroll_delta) {
2932 DCHECK(InnerViewportScrollLayer()); 2952 DCHECK(InnerViewportScrollLayer());
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after
3358 } 3378 }
3359 3379
3360 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { 3380 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) {
3361 std::vector<PictureLayerImpl*>::iterator it = 3381 std::vector<PictureLayerImpl*>::iterator it =
3362 std::find(picture_layers_.begin(), picture_layers_.end(), layer); 3382 std::find(picture_layers_.begin(), picture_layers_.end(), layer);
3363 DCHECK(it != picture_layers_.end()); 3383 DCHECK(it != picture_layers_.end());
3364 picture_layers_.erase(it); 3384 picture_layers_.erase(it);
3365 } 3385 }
3366 3386
3367 } // namespace cc 3387 } // 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