| 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 |