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 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |