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

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

Issue 783543003: Update from https://crrev.com/306901 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years 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 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 requires_high_res_to_draw_(false), 230 requires_high_res_to_draw_(false),
231 required_for_draw_tile_is_top_of_raster_queue_(false) { 231 required_for_draw_tile_is_top_of_raster_queue_(false) {
232 DCHECK(proxy_->IsImplThread()); 232 DCHECK(proxy_->IsImplThread());
233 DidVisibilityChange(this, visible_); 233 DidVisibilityChange(this, visible_);
234 animation_registrar_->set_supports_scroll_animations( 234 animation_registrar_->set_supports_scroll_animations(
235 proxy_->SupportsImplScrolling()); 235 proxy_->SupportsImplScrolling());
236 236
237 SetDebugState(settings.initial_debug_state); 237 SetDebugState(settings.initial_debug_state);
238 238
239 // LTHI always has an active tree. 239 // LTHI always has an active tree.
240 active_tree_ = LayerTreeImpl::create(this); 240 active_tree_ = LayerTreeImpl::create(this, new SyncedProperty<ScaleGroup>());
241
241 TRACE_EVENT_OBJECT_CREATED_WITH_ID( 242 TRACE_EVENT_OBJECT_CREATED_WITH_ID(
242 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_); 243 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_);
243 244
244 if (settings.calculate_top_controls_position) { 245 if (settings.calculate_top_controls_position) {
245 top_controls_manager_ = 246 top_controls_manager_ =
246 TopControlsManager::Create(this, 247 TopControlsManager::Create(this,
247 settings.top_controls_height,
248 settings.top_controls_show_threshold, 248 settings.top_controls_show_threshold,
249 settings.top_controls_hide_threshold); 249 settings.top_controls_hide_threshold);
250
251 // TODO(bokan): This is a quick fix. The browser should lock the top
252 // controls to shown on creation but this appears not to work. Tracked
253 // in crbug.com/417680.
254 // Initialize with top controls showing.
255 SetControlsTopOffset(0.f);
256 } 250 }
257 } 251 }
258 252
259 LayerTreeHostImpl::~LayerTreeHostImpl() { 253 LayerTreeHostImpl::~LayerTreeHostImpl() {
260 DCHECK(proxy_->IsImplThread()); 254 DCHECK(proxy_->IsImplThread());
261 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); 255 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()");
262 TRACE_EVENT_OBJECT_DELETED_WITH_ID( 256 TRACE_EVENT_OBJECT_DELETED_WITH_ID(
263 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_); 257 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_);
264 258
265 if (input_handler_client_) { 259 if (input_handler_client_) {
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 gfx::ScrollOffset scroll_total = active_tree_->TotalScrollOffset(); 404 gfx::ScrollOffset scroll_total = active_tree_->TotalScrollOffset();
411 gfx::SizeF scaled_scrollable_size = active_tree_->ScrollableSize(); 405 gfx::SizeF scaled_scrollable_size = active_tree_->ScrollableSize();
412 gfx::SizeF viewport_size = 406 gfx::SizeF viewport_size =
413 active_tree_->InnerViewportContainerLayer()->bounds(); 407 active_tree_->InnerViewportContainerLayer()->bounds();
414 408
415 // Easing constants experimentally determined. 409 // Easing constants experimentally determined.
416 scoped_ptr<TimingFunction> timing_function = 410 scoped_ptr<TimingFunction> timing_function =
417 CubicBezierTimingFunction::Create(.8, 0, .3, .9); 411 CubicBezierTimingFunction::Create(.8, 0, .3, .9);
418 412
419 // TODO(miletus) : Pass in ScrollOffset. 413 // TODO(miletus) : Pass in ScrollOffset.
420 page_scale_animation_ = 414 page_scale_animation_ = PageScaleAnimation::Create(
421 PageScaleAnimation::Create(ScrollOffsetToVector2dF(scroll_total), 415 ScrollOffsetToVector2dF(scroll_total),
422 active_tree_->total_page_scale_factor(), 416 active_tree_->current_page_scale_factor(), viewport_size,
423 viewport_size, 417 scaled_scrollable_size, timing_function.Pass());
424 scaled_scrollable_size,
425 timing_function.Pass());
426 418
427 if (anchor_point) { 419 if (anchor_point) {
428 gfx::Vector2dF anchor(target_offset); 420 gfx::Vector2dF anchor(target_offset);
429 page_scale_animation_->ZoomWithAnchor(anchor, 421 page_scale_animation_->ZoomWithAnchor(anchor,
430 page_scale, 422 page_scale,
431 duration.InSecondsF()); 423 duration.InSecondsF());
432 } else { 424 } else {
433 gfx::Vector2dF scaled_target_offset = target_offset; 425 gfx::Vector2dF scaled_target_offset = target_offset;
434 page_scale_animation_->ZoomTo(scaled_target_offset, 426 page_scale_animation_->ZoomTo(scaled_target_offset,
435 page_scale, 427 page_scale,
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 false, 660 false,
669 gfx::PointF( 661 gfx::PointF(
670 screen_space_rect.x() / overhang_resource_scaled_size.width(), 662 screen_space_rect.x() / overhang_resource_scaled_size.width(),
671 screen_space_rect.y() / overhang_resource_scaled_size.height()), 663 screen_space_rect.y() / overhang_resource_scaled_size.height()),
672 gfx::PointF( 664 gfx::PointF(
673 screen_space_rect.right() / overhang_resource_scaled_size.width(), 665 screen_space_rect.right() / overhang_resource_scaled_size.width(),
674 screen_space_rect.bottom() / 666 screen_space_rect.bottom() /
675 overhang_resource_scaled_size.height()), 667 overhang_resource_scaled_size.height()),
676 screen_background_color, 668 screen_background_color,
677 vertex_opacity, 669 vertex_opacity,
670 false,
678 false); 671 false);
679 } 672 }
680 } 673 }
681 674
682 DrawResult LayerTreeHostImpl::CalculateRenderPasses( 675 DrawResult LayerTreeHostImpl::CalculateRenderPasses(
683 FrameData* frame) { 676 FrameData* frame) {
684 DCHECK(frame->render_passes.empty()); 677 DCHECK(frame->render_passes.empty());
685 DCHECK(CanDraw()); 678 DCHECK(CanDraw());
686 DCHECK(active_tree_->root_layer()); 679 DCHECK(active_tree_->root_layer());
687 680
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after
1101 EnforceManagedMemoryPolicy(ManagedMemoryPolicy(0)); 1094 EnforceManagedMemoryPolicy(ManagedMemoryPolicy(0));
1102 } 1095 }
1103 1096
1104 void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) { 1097 void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) {
1105 NOTREACHED(); 1098 NOTREACHED();
1106 } 1099 }
1107 1100
1108 void LayerTreeHostImpl::ResetTreesForTesting() { 1101 void LayerTreeHostImpl::ResetTreesForTesting() {
1109 if (active_tree_) 1102 if (active_tree_)
1110 active_tree_->DetachLayerTree(); 1103 active_tree_->DetachLayerTree();
1111 active_tree_ = LayerTreeImpl::create(this); 1104 active_tree_ =
1105 LayerTreeImpl::create(this, active_tree()->page_scale_factor());
1112 if (pending_tree_) 1106 if (pending_tree_)
1113 pending_tree_->DetachLayerTree(); 1107 pending_tree_->DetachLayerTree();
1114 pending_tree_ = nullptr; 1108 pending_tree_ = nullptr;
1115 if (recycle_tree_) 1109 if (recycle_tree_)
1116 recycle_tree_->DetachLayerTree(); 1110 recycle_tree_->DetachLayerTree();
1117 recycle_tree_ = nullptr; 1111 recycle_tree_ = nullptr;
1118 } 1112 }
1119 1113
1120 void LayerTreeHostImpl::EnforceManagedMemoryPolicy( 1114 void LayerTreeHostImpl::EnforceManagedMemoryPolicy(
1121 const ManagedMemoryPolicy& policy) { 1115 const ManagedMemoryPolicy& policy) {
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
1425 } 1419 }
1426 } 1420 }
1427 1421
1428 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() { 1422 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() {
1429 client_->OnCanDrawStateChanged(CanDraw()); 1423 client_->OnCanDrawStateChanged(CanDraw());
1430 } 1424 }
1431 1425
1432 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const { 1426 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const {
1433 CompositorFrameMetadata metadata; 1427 CompositorFrameMetadata metadata;
1434 metadata.device_scale_factor = device_scale_factor_; 1428 metadata.device_scale_factor = device_scale_factor_;
1435 metadata.page_scale_factor = active_tree_->total_page_scale_factor(); 1429 metadata.page_scale_factor = active_tree_->current_page_scale_factor();
1436 metadata.scrollable_viewport_size = active_tree_->ScrollableViewportSize(); 1430 metadata.scrollable_viewport_size = active_tree_->ScrollableViewportSize();
1437 metadata.root_layer_size = active_tree_->ScrollableSize(); 1431 metadata.root_layer_size = active_tree_->ScrollableSize();
1438 metadata.min_page_scale_factor = active_tree_->min_page_scale_factor(); 1432 metadata.min_page_scale_factor = active_tree_->min_page_scale_factor();
1439 metadata.max_page_scale_factor = active_tree_->max_page_scale_factor(); 1433 metadata.max_page_scale_factor = active_tree_->max_page_scale_factor();
1440 if (top_controls_manager_) { 1434 if (top_controls_manager_) {
1441 metadata.location_bar_offset = 1435 metadata.location_bar_offset =
1442 gfx::Vector2dF(0.f, top_controls_manager_->ControlsTopOffset()); 1436 gfx::Vector2dF(0.f, top_controls_manager_->ControlsTopOffset());
1443 metadata.location_bar_content_translation = 1437 metadata.location_bar_content_translation =
1444 gfx::Vector2dF(0.f, top_controls_manager_->ContentTopOffset()); 1438 gfx::Vector2dF(0.f, top_controls_manager_->ContentTopOffset());
1445 } 1439 }
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
1654 LayerImpl* outer_container = active_tree_->OuterViewportContainerLayer(); 1648 LayerImpl* outer_container = active_tree_->OuterViewportContainerLayer();
1655 1649
1656 if (!inner_container || !top_controls_manager_) 1650 if (!inner_container || !top_controls_manager_)
1657 return; 1651 return;
1658 1652
1659 ViewportAnchor anchor(InnerViewportScrollLayer(), 1653 ViewportAnchor anchor(InnerViewportScrollLayer(),
1660 OuterViewportScrollLayer()); 1654 OuterViewportScrollLayer());
1661 1655
1662 // Adjust the inner viewport by shrinking/expanding the container to account 1656 // Adjust the inner viewport by shrinking/expanding the container to account
1663 // for the change in top controls height since the last Resize from Blink. 1657 // for the change in top controls height since the last Resize from Blink.
1658 float top_controls_layout_height =
1659 active_tree_->top_controls_shrink_blink_size()
1660 ? active_tree_->top_controls_height()
1661 : 0.f;
1664 inner_container->SetBoundsDelta( 1662 inner_container->SetBoundsDelta(
1665 gfx::Vector2dF(0, active_tree_->top_controls_layout_height() - 1663 gfx::Vector2dF(0, top_controls_layout_height -
1666 active_tree_->total_top_controls_content_offset())); 1664 active_tree_->total_top_controls_content_offset()));
1667 1665
1668 if (!outer_container || outer_container->BoundsForScrolling().IsEmpty()) 1666 if (!outer_container || outer_container->BoundsForScrolling().IsEmpty())
1669 return; 1667 return;
1670 1668
1671 // Adjust the outer viewport container as well, since adjusting only the 1669 // Adjust the outer viewport container as well, since adjusting only the
1672 // inner may cause its bounds to exceed those of the outer, causing scroll 1670 // inner may cause its bounds to exceed those of the outer, causing scroll
1673 // clamping. We adjust it so it maintains the same aspect ratio as the 1671 // clamping. We adjust it so it maintains the same aspect ratio as the
1674 // inner viewport. 1672 // inner viewport.
1675 float aspect_ratio = inner_container->BoundsForScrolling().width() / 1673 float aspect_ratio = inner_container->BoundsForScrolling().width() /
1676 inner_container->BoundsForScrolling().height(); 1674 inner_container->BoundsForScrolling().height();
1677 float target_height = outer_container->BoundsForScrolling().width() / 1675 float target_height = outer_container->BoundsForScrolling().width() /
1678 aspect_ratio; 1676 aspect_ratio;
1679 float current_outer_height = outer_container->BoundsForScrolling().height() - 1677 float current_outer_height = outer_container->BoundsForScrolling().height() -
1680 outer_container->bounds_delta().y(); 1678 outer_container->bounds_delta().y();
1681 gfx::Vector2dF delta(0, target_height - current_outer_height); 1679 gfx::Vector2dF delta(0, target_height - current_outer_height);
1682 1680
1683 outer_container->SetBoundsDelta(delta); 1681 outer_container->SetBoundsDelta(delta);
1684 active_tree_->InnerViewportScrollLayer()->SetBoundsDelta(delta); 1682 active_tree_->InnerViewportScrollLayer()->SetBoundsDelta(delta);
1685 1683
1686 anchor.ResetViewportToAnchoredPosition(); 1684 anchor.ResetViewportToAnchoredPosition();
1687 } 1685 }
1688 1686
1689 void LayerTreeHostImpl::SetTopControlsLayoutHeight(float height) {
1690 if (active_tree_->top_controls_layout_height() == height)
1691 return;
1692
1693 active_tree_->set_top_controls_layout_height(height);
1694 UpdateViewportContainerSizes();
1695 SetFullRootLayerDamage();
1696 }
1697
1698 void LayerTreeHostImpl::SynchronouslyInitializeAllTiles() { 1687 void LayerTreeHostImpl::SynchronouslyInitializeAllTiles() {
1699 // Only valid for the single-threaded non-scheduled/synchronous case 1688 // Only valid for the single-threaded non-scheduled/synchronous case
1700 // using the zero copy raster worker pool. 1689 // using the zero copy raster worker pool.
1701 single_thread_synchronous_task_graph_runner_->RunUntilIdle(); 1690 single_thread_synchronous_task_graph_runner_->RunUntilIdle();
1702 } 1691 }
1703 1692
1704 void LayerTreeHostImpl::DidLoseOutputSurface() { 1693 void LayerTreeHostImpl::DidLoseOutputSurface() {
1705 if (resource_provider_) 1694 if (resource_provider_)
1706 resource_provider_->DidLoseOutputSurface(); 1695 resource_provider_->DidLoseOutputSurface();
1707 client_->DidLoseOutputSurfaceOnImplThread(); 1696 client_->DidLoseOutputSurfaceOnImplThread();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1751 return layer_impl->parent(); 1740 return layer_impl->parent();
1752 1741
1753 return NULL; 1742 return NULL;
1754 } 1743 }
1755 1744
1756 void LayerTreeHostImpl::CreatePendingTree() { 1745 void LayerTreeHostImpl::CreatePendingTree() {
1757 CHECK(!pending_tree_); 1746 CHECK(!pending_tree_);
1758 if (recycle_tree_) 1747 if (recycle_tree_)
1759 recycle_tree_.swap(pending_tree_); 1748 recycle_tree_.swap(pending_tree_);
1760 else 1749 else
1761 pending_tree_ = LayerTreeImpl::create(this); 1750 pending_tree_ =
1751 LayerTreeImpl::create(this, active_tree()->page_scale_factor());
1762 1752
1763 // Update the delta from the active tree, which may have 1753 // Update the delta from the active tree, which may have
1764 // adjusted its delta prior to the pending tree being created. 1754 // adjusted its delta prior to the pending tree being created.
1765 DCHECK_EQ(1.f, pending_tree_->sent_page_scale_delta());
1766 DCHECK_EQ(0.f, pending_tree_->sent_top_controls_delta()); 1755 DCHECK_EQ(0.f, pending_tree_->sent_top_controls_delta());
1767 pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() /
1768 active_tree_->sent_page_scale_delta());
1769 pending_tree_->set_top_controls_delta( 1756 pending_tree_->set_top_controls_delta(
1770 active_tree_->top_controls_delta() - 1757 active_tree_->top_controls_delta() -
1771 active_tree_->sent_top_controls_delta()); 1758 active_tree_->sent_top_controls_delta());
1759 pending_tree_->set_top_controls_height(active_tree_->top_controls_height());
1772 1760
1773 client_->OnCanDrawStateChanged(CanDraw()); 1761 client_->OnCanDrawStateChanged(CanDraw());
1774 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get()); 1762 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get());
1775 } 1763 }
1776 1764
1777 void LayerTreeHostImpl::ActivateSyncTree() { 1765 void LayerTreeHostImpl::ActivateSyncTree() {
1778 if (pending_tree_) { 1766 if (pending_tree_) {
1779 TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get()); 1767 TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get());
1780 1768
1781 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); 1769 active_tree_->SetRootLayerScrollOffsetDelegate(NULL);
(...skipping 16 matching lines...) Expand all
1798 // Now that we've synced everything from the pending tree to the active 1786 // Now that we've synced everything from the pending tree to the active
1799 // tree, rename the pending tree the recycle tree so we can reuse it on the 1787 // tree, rename the pending tree the recycle tree so we can reuse it on the
1800 // next sync. 1788 // next sync.
1801 DCHECK(!recycle_tree_); 1789 DCHECK(!recycle_tree_);
1802 pending_tree_.swap(recycle_tree_); 1790 pending_tree_.swap(recycle_tree_);
1803 1791
1804 active_tree_->SetRootLayerScrollOffsetDelegate( 1792 active_tree_->SetRootLayerScrollOffsetDelegate(
1805 root_layer_scroll_offset_delegate_); 1793 root_layer_scroll_offset_delegate_);
1806 1794
1807 if (top_controls_manager_) { 1795 if (top_controls_manager_) {
1796 top_controls_manager_->SetTopControlsHeight(
1797 active_tree_->top_controls_height());
1808 top_controls_manager_->SetControlsTopOffset( 1798 top_controls_manager_->SetControlsTopOffset(
1809 active_tree_->total_top_controls_content_offset() - 1799 active_tree_->total_top_controls_content_offset() -
1810 top_controls_manager_->top_controls_height()); 1800 active_tree_->top_controls_height());
1811 } 1801 }
1812 1802
1813 UpdateViewportContainerSizes(); 1803 UpdateViewportContainerSizes();
1814 } else { 1804 } else {
1815 active_tree_->ProcessUIResourceRequestQueue(); 1805 active_tree_->ProcessUIResourceRequestQueue();
1816 } 1806 }
1817 1807
1818 active_tree_->DidBecomeActive(); 1808 active_tree_->DidBecomeActive();
1819 ActivateAnimations(); 1809 ActivateAnimations();
1820 if (settings_.impl_side_painting) 1810 if (settings_.impl_side_painting)
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
2225 } 2215 }
2226 2216
2227 void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) { 2217 void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) {
2228 if (device_scale_factor == device_scale_factor_) 2218 if (device_scale_factor == device_scale_factor_)
2229 return; 2219 return;
2230 device_scale_factor_ = device_scale_factor; 2220 device_scale_factor_ = device_scale_factor;
2231 2221
2232 SetFullRootLayerDamage(); 2222 SetFullRootLayerDamage();
2233 } 2223 }
2234 2224
2225 void LayerTreeHostImpl::SetPageScaleOnActiveTree(float page_scale_factor) {
2226 active_tree_->SetPageScaleOnActiveTree(page_scale_factor);
2227 }
2228
2235 const gfx::Rect LayerTreeHostImpl::ViewportRectForTilePriority() const { 2229 const gfx::Rect LayerTreeHostImpl::ViewportRectForTilePriority() const {
2236 if (viewport_rect_for_tile_priority_.IsEmpty()) 2230 if (viewport_rect_for_tile_priority_.IsEmpty())
2237 return DeviceViewport(); 2231 return DeviceViewport();
2238 2232
2239 return viewport_rect_for_tile_priority_; 2233 return viewport_rect_for_tile_priority_;
2240 } 2234 }
2241 2235
2242 gfx::Size LayerTreeHostImpl::DrawViewportSize() const { 2236 gfx::Size LayerTreeHostImpl::DrawViewportSize() const {
2243 return DeviceViewport().size(); 2237 return DeviceViewport().size();
2244 } 2238 }
(...skipping 19 matching lines...) Expand all
2264 void LayerTreeHostImpl::DidChangeTopControlsPosition() { 2258 void LayerTreeHostImpl::DidChangeTopControlsPosition() {
2265 UpdateViewportContainerSizes(); 2259 UpdateViewportContainerSizes();
2266 SetNeedsRedraw(); 2260 SetNeedsRedraw();
2267 SetNeedsAnimate(); 2261 SetNeedsAnimate();
2268 active_tree_->set_needs_update_draw_properties(); 2262 active_tree_->set_needs_update_draw_properties();
2269 SetFullRootLayerDamage(); 2263 SetFullRootLayerDamage();
2270 } 2264 }
2271 2265
2272 void LayerTreeHostImpl::SetControlsTopOffset(float offset) { 2266 void LayerTreeHostImpl::SetControlsTopOffset(float offset) {
2273 float current_top_offset = active_tree_->top_controls_content_offset() - 2267 float current_top_offset = active_tree_->top_controls_content_offset() -
2274 top_controls_manager_->top_controls_height(); 2268 active_tree_->top_controls_height();
2275 active_tree_->set_top_controls_delta(offset - current_top_offset); 2269 active_tree_->set_top_controls_delta(offset - current_top_offset);
2276 } 2270 }
2277 2271
2278 float LayerTreeHostImpl::ControlsTopOffset() const { 2272 float LayerTreeHostImpl::ControlsTopOffset() const {
2279 return active_tree_->total_top_controls_content_offset() - 2273 return active_tree_->total_top_controls_content_offset() -
2280 top_controls_manager_->top_controls_height(); 2274 active_tree_->top_controls_height();
2281 } 2275 }
2282 2276
2283 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) { 2277 void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) {
2284 DCHECK(input_handler_client_ == NULL); 2278 DCHECK(input_handler_client_ == NULL);
2285 input_handler_client_ = client; 2279 input_handler_client_ = client;
2286 } 2280 }
2287 2281
2288 static LayerImpl* NextScrollLayer(LayerImpl* layer) { 2282 static LayerImpl* NextScrollLayer(LayerImpl* layer) {
2289 if (LayerImpl* scroll_parent = layer->scroll_parent()) 2283 if (LayerImpl* scroll_parent = layer->scroll_parent())
2290 return scroll_parent; 2284 return scroll_parent;
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
2640 // scrolling so we can just apply them directly, but the page scale factor 2634 // scrolling so we can just apply them directly, but the page scale factor
2641 // is applied to the scroll delta. 2635 // is applied to the scroll delta.
2642 if (!wheel_scrolling_) { 2636 if (!wheel_scrolling_) {
2643 float scale_from_viewport_to_screen_space = device_scale_factor_; 2637 float scale_from_viewport_to_screen_space = device_scale_factor_;
2644 applied_delta = 2638 applied_delta =
2645 ScrollLayerWithViewportSpaceDelta(layer_impl, 2639 ScrollLayerWithViewportSpaceDelta(layer_impl,
2646 scale_from_viewport_to_screen_space, 2640 scale_from_viewport_to_screen_space,
2647 viewport_point, pending_delta); 2641 viewport_point, pending_delta);
2648 } else { 2642 } else {
2649 applied_delta = ScrollLayerWithLocalDelta( 2643 applied_delta = ScrollLayerWithLocalDelta(
2650 layer_impl, pending_delta, active_tree_->total_page_scale_factor()); 2644 layer_impl, pending_delta, active_tree_->current_page_scale_factor());
2651 } 2645 }
2652 2646
2653 const float kEpsilon = 0.1f; 2647 const float kEpsilon = 0.1f;
2654 if (layer_impl == InnerViewportScrollLayer()) { 2648 if (layer_impl == InnerViewportScrollLayer()) {
2655 unused_root_delta.Subtract(applied_delta); 2649 unused_root_delta.Subtract(applied_delta);
2656 if (std::abs(unused_root_delta.x()) < kEpsilon) 2650 if (std::abs(unused_root_delta.x()) < kEpsilon)
2657 unused_root_delta.set_x(0.0f); 2651 unused_root_delta.set_x(0.0f);
2658 if (std::abs(unused_root_delta.y()) < kEpsilon) 2652 if (std::abs(unused_root_delta.y()) < kEpsilon)
2659 unused_root_delta.set_y(0.0f); 2653 unused_root_delta.set_y(0.0f);
2660 // Disable overscroll on axes which is impossible to scroll. 2654 // Disable overscroll on axes which is impossible to scroll.
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
2944 2938
2945 TRACE_EVENT0("cc", "LayerTreeHostImpl::PinchGestureUpdate"); 2939 TRACE_EVENT0("cc", "LayerTreeHostImpl::PinchGestureUpdate");
2946 2940
2947 // For a moment the scroll offset ends up being outside of the max range. This 2941 // For a moment the scroll offset ends up being outside of the max range. This
2948 // confuses the delegate so we switch it off till after we're done processing 2942 // confuses the delegate so we switch it off till after we're done processing
2949 // the pinch update. 2943 // the pinch update.
2950 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); 2944 active_tree_->SetRootLayerScrollOffsetDelegate(NULL);
2951 2945
2952 // Keep the center-of-pinch anchor specified by (x, y) in a stable 2946 // Keep the center-of-pinch anchor specified by (x, y) in a stable
2953 // position over the course of the magnify. 2947 // position over the course of the magnify.
2954 float page_scale_delta = active_tree_->page_scale_delta(); 2948 float page_scale = active_tree_->current_page_scale_factor();
2955 gfx::PointF previous_scale_anchor = 2949 gfx::PointF previous_scale_anchor = gfx::ScalePoint(anchor, 1.f / page_scale);
2956 gfx::ScalePoint(anchor, 1.f / page_scale_delta); 2950 active_tree_->SetPageScaleOnActiveTree(page_scale * magnify_delta);
2957 active_tree_->SetPageScaleDelta(page_scale_delta * magnify_delta); 2951 page_scale = active_tree_->current_page_scale_factor();
2958 page_scale_delta = active_tree_->page_scale_delta(); 2952 gfx::PointF new_scale_anchor = gfx::ScalePoint(anchor, 1.f / page_scale);
2959 gfx::PointF new_scale_anchor =
2960 gfx::ScalePoint(anchor, 1.f / page_scale_delta);
2961 gfx::Vector2dF move = previous_scale_anchor - new_scale_anchor; 2953 gfx::Vector2dF move = previous_scale_anchor - new_scale_anchor;
2962 2954
2963 previous_pinch_anchor_ = anchor; 2955 previous_pinch_anchor_ = anchor;
2964 2956
2965 move.Scale(1 / active_tree_->page_scale_factor());
2966 // If clamping the inner viewport scroll offset causes a change, it should 2957 // If clamping the inner viewport scroll offset causes a change, it should
2967 // be accounted for from the intended move. 2958 // be accounted for from the intended move.
2968 move -= InnerViewportScrollLayer()->ClampScrollToMaxScrollOffset(); 2959 move -= InnerViewportScrollLayer()->ClampScrollToMaxScrollOffset();
2969 2960
2970 // We manually manage the bubbling behaviour here as it is different to that 2961 // We manually manage the bubbling behaviour here as it is different to that
2971 // implemented in LayerTreeHostImpl::ScrollBy(). Specifically: 2962 // implemented in LayerTreeHostImpl::ScrollBy(). Specifically:
2972 // 1) we want to explicit limit the bubbling to the outer/inner viewports, 2963 // 1) we want to explicit limit the bubbling to the outer/inner viewports,
2973 // 2) we don't want the directional limitations on the unused parts that 2964 // 2) we don't want the directional limitations on the unused parts that
2974 // ScrollBy() implements, and 2965 // ScrollBy() implements, and
2975 // 3) pinching should not engage the top controls manager. 2966 // 3) pinching should not engage the top controls manager.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
3022 } 3013 }
3023 3014
3024 for (size_t i = 0; i < layer_impl->children().size(); ++i) 3015 for (size_t i = 0; i < layer_impl->children().size(); ++i)
3025 CollectScrollDeltas(scroll_info, layer_impl->children()[i]); 3016 CollectScrollDeltas(scroll_info, layer_impl->children()[i]);
3026 } 3017 }
3027 3018
3028 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::ProcessScrollDeltas() { 3019 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::ProcessScrollDeltas() {
3029 scoped_ptr<ScrollAndScaleSet> scroll_info(new ScrollAndScaleSet()); 3020 scoped_ptr<ScrollAndScaleSet> scroll_info(new ScrollAndScaleSet());
3030 3021
3031 CollectScrollDeltas(scroll_info.get(), active_tree_->root_layer()); 3022 CollectScrollDeltas(scroll_info.get(), active_tree_->root_layer());
3032 scroll_info->page_scale_delta = active_tree_->page_scale_delta(); 3023 scroll_info->page_scale_delta =
3033 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta); 3024 active_tree_->page_scale_factor()->PullDeltaForMainThread();
3034 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_); 3025 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_);
3035 scroll_info->top_controls_delta = active_tree()->top_controls_delta(); 3026 scroll_info->top_controls_delta = active_tree()->top_controls_delta();
3036 active_tree_->set_sent_top_controls_delta(scroll_info->top_controls_delta); 3027 active_tree_->set_sent_top_controls_delta(scroll_info->top_controls_delta);
3037 3028
3038 return scroll_info.Pass(); 3029 return scroll_info.Pass();
3039 } 3030 }
3040 3031
3041 void LayerTreeHostImpl::SetFullRootLayerDamage() { 3032 void LayerTreeHostImpl::SetFullRootLayerDamage() {
3042 SetViewportDamage(gfx::Rect(DrawViewportSize())); 3033 SetViewportDamage(gfx::Rect(DrawViewportSize()));
3043 } 3034 }
(...skipping 21 matching lines...) Expand all
3065 3056
3066 void LayerTreeHostImpl::AnimatePageScale(base::TimeTicks monotonic_time) { 3057 void LayerTreeHostImpl::AnimatePageScale(base::TimeTicks monotonic_time) {
3067 if (!page_scale_animation_) 3058 if (!page_scale_animation_)
3068 return; 3059 return;
3069 3060
3070 gfx::ScrollOffset scroll_total = active_tree_->TotalScrollOffset(); 3061 gfx::ScrollOffset scroll_total = active_tree_->TotalScrollOffset();
3071 3062
3072 if (!page_scale_animation_->IsAnimationStarted()) 3063 if (!page_scale_animation_->IsAnimationStarted())
3073 page_scale_animation_->StartAnimation(monotonic_time); 3064 page_scale_animation_->StartAnimation(monotonic_time);
3074 3065
3075 active_tree_->SetPageScaleDelta( 3066 active_tree_->SetPageScaleOnActiveTree(
3076 page_scale_animation_->PageScaleFactorAtTime(monotonic_time) / 3067 page_scale_animation_->PageScaleFactorAtTime(monotonic_time));
3077 active_tree_->page_scale_factor());
3078 gfx::ScrollOffset next_scroll = gfx::ScrollOffset( 3068 gfx::ScrollOffset next_scroll = gfx::ScrollOffset(
3079 page_scale_animation_->ScrollOffsetAtTime(monotonic_time)); 3069 page_scale_animation_->ScrollOffsetAtTime(monotonic_time));
3080 3070
3081 ScrollViewportInnerFirst(next_scroll.DeltaFrom(scroll_total)); 3071 ScrollViewportInnerFirst(next_scroll.DeltaFrom(scroll_total));
3082 SetNeedsRedraw(); 3072 SetNeedsRedraw();
3083 3073
3084 if (page_scale_animation_->IsAnimationCompleteAtTime(monotonic_time)) { 3074 if (page_scale_animation_->IsAnimationCompleteAtTime(monotonic_time)) {
3085 page_scale_animation_ = nullptr; 3075 page_scale_animation_ = nullptr;
3086 client_->SetNeedsCommitOnImplThread(); 3076 client_->SetNeedsCommitOnImplThread();
3087 client_->RenewTreePriority(); 3077 client_->RenewTreePriority();
(...skipping 11 matching lines...) Expand all
3099 if (top_controls_manager_->animation()) 3089 if (top_controls_manager_->animation())
3100 SetNeedsAnimate(); 3090 SetNeedsAnimate();
3101 3091
3102 if (active_tree_->TotalScrollOffset().y() == 0.f) 3092 if (active_tree_->TotalScrollOffset().y() == 0.f)
3103 return; 3093 return;
3104 3094
3105 if (scroll.IsZero()) 3095 if (scroll.IsZero())
3106 return; 3096 return;
3107 3097
3108 ScrollViewportBy(gfx::ScaleVector2d( 3098 ScrollViewportBy(gfx::ScaleVector2d(
3109 scroll, 1.f / active_tree_->total_page_scale_factor())); 3099 scroll, 1.f / active_tree_->current_page_scale_factor()));
3110 SetNeedsRedraw(); 3100 SetNeedsRedraw();
3111 client_->SetNeedsCommitOnImplThread(); 3101 client_->SetNeedsCommitOnImplThread();
3112 client_->RenewTreePriority(); 3102 client_->RenewTreePriority();
3113 } 3103 }
3114 3104
3115 void LayerTreeHostImpl::AnimateLayers(base::TimeTicks monotonic_time) { 3105 void LayerTreeHostImpl::AnimateLayers(base::TimeTicks monotonic_time) {
3116 if (!settings_.accelerated_animation_enabled || 3106 if (!settings_.accelerated_animation_enabled ||
3117 !needs_animate_layers() || 3107 !needs_animate_layers() ||
3118 !active_tree_->root_layer()) 3108 !active_tree_->root_layer())
3119 return; 3109 return;
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
3487 } 3477 }
3488 3478
3489 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { 3479 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) {
3490 std::vector<PictureLayerImpl*>::iterator it = 3480 std::vector<PictureLayerImpl*>::iterator it =
3491 std::find(picture_layers_.begin(), picture_layers_.end(), layer); 3481 std::find(picture_layers_.begin(), picture_layers_.end(), layer);
3492 DCHECK(it != picture_layers_.end()); 3482 DCHECK(it != picture_layers_.end());
3493 picture_layers_.erase(it); 3483 picture_layers_.erase(it);
3494 } 3484 }
3495 3485
3496 } // namespace cc 3486 } // 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