OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |