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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 12093015: Move page scale ownership to LayerTreeImpl. (Closed) Base URL: http://git.chromium.org/chromium/src.git@coordchange3
Patch Set: Rebase to 179503 Created 7 years, 10 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/layer_tree_host_impl.h ('k') | cc/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/layer_tree_host_impl.h" 5 #include "cc/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 } 258 }
259 259
260 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati on) 260 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati on)
261 { 261 {
262 if (!rootScrollLayer()) 262 if (!rootScrollLayer())
263 return; 263 return;
264 264
265 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); 265 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta();
266 gfx::SizeF scaledScrollableSize = activeTree()->ScrollableSize(); 266 gfx::SizeF scaledScrollableSize = activeTree()->ScrollableSize();
267 if (!m_settings.pageScalePinchZoomEnabled) { 267 if (!m_settings.pageScalePinchZoomEnabled) {
268 scrollTotal.Scale(1 / m_pinchZoomViewport.page_scale_factor()); 268 scrollTotal.Scale(1 / activeTree()->page_scale_factor());
269 scaledScrollableSize.Scale(1 / m_pinchZoomViewport.page_scale_factor()); 269 scaledScrollableSize.Scale(1 / activeTree()->page_scale_factor());
270 } 270 }
271 gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceS caleFactor); 271 gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceS caleFactor);
272 272
273 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); 273 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF();
274 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomVi ewport.total_page_scale_factor(), viewportSize, scaledScrollableSize, startTimeS econds); 274 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, activeTree()- >total_page_scale_factor(), viewportSize, scaledScrollableSize, startTimeSeconds );
275 275
276 if (anchorPoint) { 276 if (anchorPoint) {
277 gfx::Vector2dF anchor(targetOffset); 277 gfx::Vector2dF anchor(targetOffset);
278 if (!m_settings.pageScalePinchZoomEnabled) 278 if (!m_settings.pageScalePinchZoomEnabled)
279 anchor.Scale(1 / pageScale); 279 anchor.Scale(1 / pageScale);
280 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon dsF()); 280 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon dsF());
281 } else { 281 } else {
282 gfx::Vector2dF scaledTargetOffset = targetOffset; 282 gfx::Vector2dF scaledTargetOffset = targetOffset;
283 if (!m_settings.pageScalePinchZoomEnabled) 283 if (!m_settings.pageScalePinchZoomEnabled)
284 scaledTargetOffset.Scale(1 / pageScale); 284 scaledTargetOffset.Scale(1 / pageScale);
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 } 747 }
748 748
749 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) 749 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*)
750 { 750 {
751 m_client->onCanDrawStateChanged(canDraw()); 751 m_client->onCanDrawStateChanged(canDraw());
752 } 752 }
753 753
754 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const 754 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const
755 { 755 {
756 CompositorFrameMetadata metadata; 756 CompositorFrameMetadata metadata;
757 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); 757 metadata.page_scale_factor = activeTree()->total_page_scale_factor();
758 metadata.viewport_size = activeTree()->ScrollableViewportSize(); 758 metadata.viewport_size = activeTree()->ScrollableViewportSize();
759 metadata.root_layer_size = activeTree()->ScrollableSize(); 759 metadata.root_layer_size = activeTree()->ScrollableSize();
760 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor() ; 760 metadata.min_page_scale_factor = activeTree()->min_page_scale_factor();
761 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor() ; 761 metadata.max_page_scale_factor = activeTree()->max_page_scale_factor();
762 if (m_topControlsManager) { 762 if (m_topControlsManager) {
763 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager- >controls_top_offset()); 763 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager- >controls_top_offset());
764 metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon trolsManager->content_top_offset()); 764 metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon trolsManager->content_top_offset());
765 } 765 }
766 766
767 if (!rootScrollLayer()) 767 if (!rootScrollLayer())
768 return metadata; 768 return metadata;
769 769
770 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta(); 770 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta();
771 if (!m_settings.pageScalePinchZoomEnabled) 771 if (!m_settings.pageScalePinchZoomEnabled)
772 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.page_scale_fac tor()); 772 metadata.root_scroll_offset.Scale(1 / activeTree()->page_scale_factor()) ;
773 773
774 return metadata; 774 return metadata;
775 } 775 }
776 776
777 void LayerTreeHostImpl::drawLayers(FrameData& frame) 777 void LayerTreeHostImpl::drawLayers(FrameData& frame)
778 { 778 {
779 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); 779 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers");
780 DCHECK(canDraw()); 780 DCHECK(canDraw());
781 DCHECK(!frame.renderPasses.empty()); 781 DCHECK(!frame.renderPasses.empty());
782 782
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 void LayerTreeHostImpl::activatePendingTree() 977 void LayerTreeHostImpl::activatePendingTree()
978 { 978 {
979 CHECK(m_pendingTree); 979 CHECK(m_pendingTree);
980 TRACE_EVENT_ASYNC_END0("cc", "PendingTree", m_pendingTree.get()); 980 TRACE_EVENT_ASYNC_END0("cc", "PendingTree", m_pendingTree.get());
981 981
982 m_activeTree->PushPersistedState(m_pendingTree.get()); 982 m_activeTree->PushPersistedState(m_pendingTree.get());
983 m_activeTree->SetRootLayer(TreeSynchronizer::synchronizeTrees(m_pendingTree- >RootLayer(), m_activeTree->DetachLayerTree(), m_activeTree.get())); 983 m_activeTree->SetRootLayer(TreeSynchronizer::synchronizeTrees(m_pendingTree- >RootLayer(), m_activeTree->DetachLayerTree(), m_activeTree.get()));
984 TreeSynchronizer::pushProperties(m_pendingTree->RootLayer(), m_activeTree->R ootLayer()); 984 TreeSynchronizer::pushProperties(m_pendingTree->RootLayer(), m_activeTree->R ootLayer());
985 DCHECK(!m_recycleTree); 985 DCHECK(!m_recycleTree);
986 986
987 // This should match the property synchronization in 987 m_pendingTree->pushPropertiesTo(m_activeTree.get());
988 // LayerTreeHost::finishCommitOnImplThread().
989 m_activeTree->set_source_frame_number(m_pendingTree->source_frame_number());
990 m_activeTree->set_background_color(m_pendingTree->background_color());
991 m_activeTree->set_has_transparent_background(m_pendingTree->has_transparent_ background());
992 if (m_pendingTree->ContentsTexturesPurged())
993 m_activeTree->SetContentsTexturesPurged();
994 else
995 m_activeTree->ResetContentsTexturesPurged();
996 if (m_pendingTree->hud_layer())
997 m_activeTree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(LayerT reeHostCommon::findLayerInSubtree(m_activeTree->RootLayer(), m_pendingTree->hud_ layer()->id())));
998 else
999 m_activeTree->set_hud_layer(NULL);
1000 988
1001 // Now that we've synced everything from the pending tree to the active 989 // Now that we've synced everything from the pending tree to the active
1002 // tree, rename the pending tree the recycle tree so we can reuse it on the 990 // tree, rename the pending tree the recycle tree so we can reuse it on the
1003 // next sync. 991 // next sync.
1004 m_pendingTree.swap(m_recycleTree); 992 m_pendingTree.swap(m_recycleTree);
1005 m_recycleTree->ClearRenderSurfaces(); 993 m_recycleTree->ClearRenderSurfaces();
1006 994
1007 m_activeTree->DidBecomeActive(); 995 m_activeTree->DidBecomeActive();
1008 996
1009 m_client->onCanDrawStateChanged(canDraw()); 997 m_client->onCanDrawStateChanged(canDraw());
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 } 1075 }
1088 1076
1089 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize) 1077 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize)
1090 { 1078 {
1091 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize) 1079 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize)
1092 return; 1080 return;
1093 1081
1094 m_layoutViewportSize = layoutViewportSize; 1082 m_layoutViewportSize = layoutViewportSize;
1095 m_deviceViewportSize = deviceViewportSize; 1083 m_deviceViewportSize = deviceViewportSize;
1096 1084
1097 m_pinchZoomViewport.set_layout_viewport_size(layoutViewportSize);
1098 m_pinchZoomViewport.set_device_viewport_size(deviceViewportSize);
1099
1100 updateMaxScrollOffset(); 1085 updateMaxScrollOffset();
1101 1086
1102 if (m_renderer) 1087 if (m_renderer)
1103 m_renderer->viewportChanged(); 1088 m_renderer->viewportChanged();
1104 1089
1105 m_client->onCanDrawStateChanged(canDraw()); 1090 m_client->onCanDrawStateChanged(canDraw());
1106 } 1091 }
1107 1092
1108 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal eChange) 1093 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal eChange)
1109 { 1094 {
1110 if (!layerImpl) 1095 if (!layerImpl)
1111 return; 1096 return;
1112 1097
1113 if (layerImpl->scrollable()) { 1098 if (layerImpl->scrollable()) {
1114 // We need to convert impl-side scroll deltas to pageScale space. 1099 // We need to convert impl-side scroll deltas to pageScale space.
1115 gfx::Vector2dF scrollDelta = layerImpl->scrollDelta(); 1100 gfx::Vector2dF scrollDelta = layerImpl->scrollDelta();
1116 scrollDelta.Scale(pageScaleChange); 1101 scrollDelta.Scale(pageScaleChange);
1117 layerImpl->setScrollDelta(scrollDelta); 1102 layerImpl->setScrollDelta(scrollDelta);
1118 } 1103 }
1119 1104
1120 for (size_t i = 0; i < layerImpl->children().size(); ++i) 1105 for (size_t i = 0; i < layerImpl->children().size(); ++i)
1121 adjustScrollsForPageScaleChange(layerImpl->children()[i], pageScaleChang e); 1106 adjustScrollsForPageScaleChange(layerImpl->children()[i], pageScaleChang e);
1122 } 1107 }
1123 1108
1124 void LayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor) 1109 void LayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor)
1125 { 1110 {
1126 if (deviceScaleFactor == m_deviceScaleFactor) 1111 if (deviceScaleFactor == m_deviceScaleFactor)
1127 return; 1112 return;
1128 m_deviceScaleFactor = deviceScaleFactor; 1113 m_deviceScaleFactor = deviceScaleFactor;
1129 m_pinchZoomViewport.set_device_scale_factor(m_deviceScaleFactor);
1130 1114
1131 updateMaxScrollOffset(); 1115 updateMaxScrollOffset();
1132 } 1116 }
1133 1117
1134 float LayerTreeHostImpl::pageScaleFactor() const
1135 {
1136 return m_pinchZoomViewport.page_scale_factor();
1137 }
1138
1139 void LayerTreeHostImpl::setPageScaleFactorAndLimits(float pageScaleFactor, float minPageScaleFactor, float maxPageScaleFactor)
1140 {
1141 if (!pageScaleFactor)
1142 return;
1143
1144 float pageScaleChange = pageScaleFactor / m_pinchZoomViewport.page_scale_fac tor();
1145 m_pinchZoomViewport.SetPageScaleFactorAndLimits(pageScaleFactor, minPageScal eFactor, maxPageScaleFactor);
1146
1147 if (!m_settings.pageScalePinchZoomEnabled && pageScaleChange != 1)
1148 adjustScrollsForPageScaleChange(rootScrollLayer(), pageScaleChange);
1149
1150 // Clamp delta to limits and refresh display matrix.
1151 setPageScaleDelta(m_pinchZoomViewport.page_scale_delta() / m_pinchZoomViewpo rt.sent_page_scale_delta());
1152 m_pinchZoomViewport.set_sent_page_scale_delta(1);
1153 }
1154
1155 void LayerTreeHostImpl::setPageScaleDelta(float delta)
1156 {
1157 if (m_pinchZoomViewport.page_scale_delta() == delta)
1158 return;
1159
1160 m_pinchZoomViewport.set_page_scale_delta(delta);
1161
1162 updateMaxScrollOffset();
1163 activeTree()->set_needs_update_draw_properties();
1164 if (pendingTree())
1165 pendingTree()->set_needs_update_draw_properties();
1166 }
1167
1168 void LayerTreeHostImpl::updateMaxScrollOffset() 1118 void LayerTreeHostImpl::updateMaxScrollOffset()
1169 { 1119 {
1170 activeTree()->UpdateMaxScrollOffset(); 1120 activeTree()->UpdateMaxScrollOffset();
1171 } 1121 }
1172 1122
1173 void LayerTreeHostImpl::setActiveTreeNeedsUpdateDrawProperties() 1123 void LayerTreeHostImpl::setActiveTreeNeedsUpdateDrawProperties()
1174 { 1124 {
1175 activeTree()->set_needs_update_draw_properties(); 1125 activeTree()->set_needs_update_draw_properties();
1176 } 1126 }
1177 1127
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 1328
1379 void LayerTreeHostImpl::pinchGestureUpdate(float magnifyDelta, gfx::Point anchor ) 1329 void LayerTreeHostImpl::pinchGestureUpdate(float magnifyDelta, gfx::Point anchor )
1380 { 1330 {
1381 TRACE_EVENT0("cc", "LayerTreeHostImpl::pinchGestureUpdate"); 1331 TRACE_EVENT0("cc", "LayerTreeHostImpl::pinchGestureUpdate");
1382 1332
1383 if (!rootScrollLayer()) 1333 if (!rootScrollLayer())
1384 return; 1334 return;
1385 1335
1386 // Keep the center-of-pinch anchor specified by (x, y) in a stable 1336 // Keep the center-of-pinch anchor specified by (x, y) in a stable
1387 // position over the course of the magnify. 1337 // position over the course of the magnify.
1388 float pageScaleDelta = m_pinchZoomViewport.page_scale_delta(); 1338 float pageScaleDelta = activeTree()->page_scale_delta();
1389 gfx::PointF previousScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta ); 1339 gfx::PointF previousScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta );
1390 setPageScaleDelta(pageScaleDelta * magnifyDelta); 1340 activeTree()->SetPageScaleDelta(pageScaleDelta * magnifyDelta);
1391 pageScaleDelta = m_pinchZoomViewport.page_scale_delta(); 1341 pageScaleDelta = activeTree()->page_scale_delta();
1392 gfx::PointF newScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta); 1342 gfx::PointF newScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta);
1393 gfx::Vector2dF move = previousScaleAnchor - newScaleAnchor; 1343 gfx::Vector2dF move = previousScaleAnchor - newScaleAnchor;
1394 1344
1395 m_previousPinchAnchor = anchor; 1345 m_previousPinchAnchor = anchor;
1396 1346
1397 if (m_settings.pageScalePinchZoomEnabled) { 1347 if (m_settings.pageScalePinchZoomEnabled)
1398 // Compute the application of the delta with respect to the current page zoom of the page. 1348 move.Scale(1 / activeTree()->page_scale_factor());
1399 move.Scale(1 / m_pinchZoomViewport.page_scale_factor());
1400 }
1401 1349
1402 rootScrollLayer()->scrollBy(move); 1350 rootScrollLayer()->scrollBy(move);
1403 1351
1404 if (rootScrollLayer()->scrollbarAnimationController()) 1352 if (rootScrollLayer()->scrollbarAnimationController())
1405 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate (base::TimeTicks::Now()); 1353 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate (base::TimeTicks::Now());
1406 1354
1407 m_client->setNeedsCommitOnImplThread(); 1355 m_client->setNeedsCommitOnImplThread();
1408 m_client->setNeedsRedrawOnImplThread(); 1356 m_client->setNeedsRedrawOnImplThread();
1409 m_client->renewTreePriority(); 1357 m_client->renewTreePriority();
1410 } 1358 }
1411 1359
1412 void LayerTreeHostImpl::pinchGestureEnd() 1360 void LayerTreeHostImpl::pinchGestureEnd()
1413 { 1361 {
1414 m_pinchGestureActive = false; 1362 m_pinchGestureActive = false;
1415 1363
1416 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController()) 1364 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController())
1417 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureEnd(ba se::TimeTicks::Now()); 1365 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureEnd(ba se::TimeTicks::Now());
1418 1366
1419 m_client->setNeedsCommitOnImplThread(); 1367 m_client->setNeedsCommitOnImplThread();
1420 } 1368 }
1421 1369
1422 void LayerTreeHostImpl::computeDoubleTapZoomDeltas(ScrollAndScaleSet* scrollInfo ) 1370 void LayerTreeHostImpl::computeDoubleTapZoomDeltas(ScrollAndScaleSet* scrollInfo )
1423 { 1371 {
1424 gfx::Vector2dF scaledScrollOffset = m_pageScaleAnimation->targetScrollOffset (); 1372 gfx::Vector2dF scaledScrollOffset = m_pageScaleAnimation->targetScrollOffset ();
1425 if (!m_settings.pageScalePinchZoomEnabled) 1373 if (!m_settings.pageScalePinchZoomEnabled)
1426 scaledScrollOffset.Scale(m_pinchZoomViewport.page_scale_factor()); 1374 scaledScrollOffset.Scale(activeTree()->page_scale_factor());
1427 makeScrollAndScaleSet(scrollInfo, ToFlooredVector2d(scaledScrollOffset), m_p ageScaleAnimation->targetPageScaleFactor()); 1375 makeScrollAndScaleSet(scrollInfo, ToFlooredVector2d(scaledScrollOffset), m_p ageScaleAnimation->targetPageScaleFactor());
1428 } 1376 }
1429 1377
1430 void LayerTreeHostImpl::computePinchZoomDeltas(ScrollAndScaleSet* scrollInfo) 1378 void LayerTreeHostImpl::computePinchZoomDeltas(ScrollAndScaleSet* scrollInfo)
1431 { 1379 {
1432 if (!rootScrollLayer()) 1380 if (!rootScrollLayer())
1433 return; 1381 return;
1434 1382
1435 // Only send fake scroll/zoom deltas if we're pinch zooming out by a 1383 // Only send fake scroll/zoom deltas if we're pinch zooming out by a
1436 // significant amount. This also ensures only one fake delta set will be 1384 // significant amount. This also ensures only one fake delta set will be
1437 // sent. 1385 // sent.
1438 const float pinchZoomOutSensitivity = 0.95f; 1386 const float pinchZoomOutSensitivity = 0.95f;
1439 if (m_pinchZoomViewport.page_scale_delta() > pinchZoomOutSensitivity) 1387 if (activeTree()->page_scale_delta() > pinchZoomOutSensitivity)
1440 return; 1388 return;
1441 1389
1442 // Compute where the scroll offset/page scale would be if fully pinch-zoomed 1390 // Compute where the scroll offset/page scale would be if fully pinch-zoomed
1443 // out from the anchor point. 1391 // out from the anchor point.
1444 gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); 1392 gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta();
1445 scrollBegin.Scale(m_pinchZoomViewport.page_scale_delta()); 1393 scrollBegin.Scale(activeTree()->page_scale_delta());
1446 float scaleBegin = m_pinchZoomViewport.total_page_scale_factor(); 1394 float scaleBegin = activeTree()->total_page_scale_factor();
1447 float pageScaleDeltaToSend = m_pinchZoomViewport.min_page_scale_factor() / m _pinchZoomViewport.page_scale_factor(); 1395 float pageScaleDeltaToSend = activeTree()->min_page_scale_factor() / activeT ree()->page_scale_factor();
1448 gfx::SizeF scaledScrollableSize = gfx::ScaleSize(activeTree()->ScrollableSiz e(), pageScaleDeltaToSend); 1396 gfx::SizeF scaledScrollableSize = gfx::ScaleSize(activeTree()->ScrollableSiz e(), pageScaleDeltaToSend);
1449 1397
1450 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); 1398 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin();
1451 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; 1399 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset;
1452 scrollEnd.Scale(m_pinchZoomViewport.min_page_scale_factor() / scaleBegin); 1400 scrollEnd.Scale(activeTree()->min_page_scale_factor() / scaleBegin);
1453 scrollEnd -= anchorOffset; 1401 scrollEnd -= anchorOffset;
1454 scrollEnd.ClampToMax(gfx::RectF(scaledScrollableSize).bottom_right() - gfx:: Rect(m_deviceViewportSize).bottom_right()); 1402 scrollEnd.ClampToMax(gfx::RectF(scaledScrollableSize).bottom_right() - gfx:: Rect(m_deviceViewportSize).bottom_right());
1455 scrollEnd.ClampToMin(gfx::Vector2d()); 1403 scrollEnd.ClampToMin(gfx::Vector2d());
1456 scrollEnd.Scale(1 / pageScaleDeltaToSend); 1404 scrollEnd.Scale(1 / pageScaleDeltaToSend);
1457 scrollEnd.Scale(m_deviceScaleFactor); 1405 scrollEnd.Scale(m_deviceScaleFactor);
1458 1406
1459 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), m_pinch ZoomViewport.min_page_scale_factor()); 1407 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), activeT ree()->min_page_scale_factor());
1460 }
1461
1462 void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx ::Vector2d scrollOffset, float pageScale)
1463 {
1464 if (!rootScrollLayer())
1465 return;
1466
1467 LayerTreeHostCommon::ScrollUpdateInfo scroll;
1468 scroll.layerId = rootScrollLayer()->id();
1469 scroll.scrollDelta = scrollOffset - rootScrollLayer()->scrollOffset();
1470 scrollInfo->scrolls.push_back(scroll);
1471 activeTree()->RootScrollLayer()->setSentScrollDelta(scroll.scrollDelta);
1472 scrollInfo->pageScaleDelta = pageScale / m_pinchZoomViewport.page_scale_fact or();
1473 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta);
1474 } 1408 }
1475 1409
1476 static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI mpl) 1410 static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI mpl)
1477 { 1411 {
1478 if (!layerImpl) 1412 if (!layerImpl)
1479 return; 1413 return;
1480 1414
1481 gfx::Vector2d scrollDelta = gfx::ToFlooredVector2d(layerImpl->scrollDelta()) ; 1415 gfx::Vector2d scrollDelta = gfx::ToFlooredVector2d(layerImpl->scrollDelta()) ;
1482 if (!scrollDelta.IsZero()) { 1416 if (!scrollDelta.IsZero()) {
1483 LayerTreeHostCommon::ScrollUpdateInfo scroll; 1417 LayerTreeHostCommon::ScrollUpdateInfo scroll;
1484 scroll.layerId = layerImpl->id(); 1418 scroll.layerId = layerImpl->id();
1485 scroll.scrollDelta = scrollDelta; 1419 scroll.scrollDelta = scrollDelta;
1486 scrollInfo->scrolls.push_back(scroll); 1420 scrollInfo->scrolls.push_back(scroll);
1487 layerImpl->setSentScrollDelta(scrollDelta); 1421 layerImpl->setSentScrollDelta(scrollDelta);
1488 } 1422 }
1489 1423
1490 for (size_t i = 0; i < layerImpl->children().size(); ++i) 1424 for (size_t i = 0; i < layerImpl->children().size(); ++i)
1491 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); 1425 collectScrollDeltas(scrollInfo, layerImpl->children()[i]);
1492 } 1426 }
1493 1427
1428 void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx ::Vector2d scrollOffset, float pageScale)
1429 {
1430 if (!rootScrollLayer())
1431 return;
1432
1433 LayerTreeHostCommon::ScrollUpdateInfo scroll;
1434 scroll.layerId = rootScrollLayer()->id();
1435 scroll.scrollDelta = scrollOffset - rootScrollLayer()->scrollOffset();
1436 scrollInfo->scrolls.push_back(scroll);
1437 activeTree()->RootScrollLayer()->setSentScrollDelta(scroll.scrollDelta);
1438 scrollInfo->pageScaleDelta = pageScale / activeTree()->page_scale_factor();
1439 activeTree()->set_sent_page_scale_delta(scrollInfo->pageScaleDelta);
1440 }
1441
1494 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas() 1442 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas()
1495 { 1443 {
1496 scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet()); 1444 scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet());
1497 1445
1498 if (!m_settings.pageScalePinchZoomEnabled && (m_pinchGestureActive || m_page ScaleAnimation)) { 1446 if (!m_settings.pageScalePinchZoomEnabled && (m_pinchGestureActive || m_page ScaleAnimation)) {
1499 scrollInfo->pageScaleDelta = 1; 1447 scrollInfo->pageScaleDelta = 1;
1500 m_pinchZoomViewport.set_sent_page_scale_delta(1); 1448 activeTree()->set_sent_page_scale_delta(1);
1501 if (m_pinchGestureActive) 1449 if (m_pinchGestureActive)
1502 computePinchZoomDeltas(scrollInfo.get()); 1450 computePinchZoomDeltas(scrollInfo.get());
1503 else if (m_pageScaleAnimation.get()) 1451 else if (m_pageScaleAnimation.get())
1504 computeDoubleTapZoomDeltas(scrollInfo.get()); 1452 computeDoubleTapZoomDeltas(scrollInfo.get());
1505 return scrollInfo.Pass(); 1453 return scrollInfo.Pass();
1506 } 1454 }
1507 1455
1508 collectScrollDeltas(scrollInfo.get(), rootLayer()); 1456 collectScrollDeltas(scrollInfo.get(), rootLayer());
1509 scrollInfo->pageScaleDelta = m_pinchZoomViewport.page_scale_delta(); 1457 scrollInfo->pageScaleDelta = activeTree()->page_scale_delta();
1510 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); 1458 activeTree()->set_sent_page_scale_delta(scrollInfo->pageScaleDelta);
1511 1459
1512 return scrollInfo.Pass(); 1460 return scrollInfo.Pass();
1513 } 1461 }
1514 1462
1515 gfx::Transform LayerTreeHostImpl::implTransform() const
1516 {
1517 return m_pinchZoomViewport.ImplTransform(m_settings.pageScalePinchZoomEnable d);
1518 }
1519
1520 void LayerTreeHostImpl::setFullRootLayerDamage() 1463 void LayerTreeHostImpl::setFullRootLayerDamage()
1521 { 1464 {
1522 if (rootLayer()) { 1465 if (rootLayer()) {
1523 RenderSurfaceImpl* renderSurface = rootLayer()->renderSurface(); 1466 RenderSurfaceImpl* renderSurface = rootLayer()->renderSurface();
1524 if (renderSurface) 1467 if (renderSurface)
1525 renderSurface->damageTracker()->forceFullDamageNextUpdate(); 1468 renderSurface->damageTracker()->forceFullDamageNextUpdate();
1526 } 1469 }
1527 } 1470 }
1528 1471
1529 void LayerTreeHostImpl::animatePageScale(base::TimeTicks time) 1472 void LayerTreeHostImpl::animatePageScale(base::TimeTicks time)
1530 { 1473 {
1531 if (!m_pageScaleAnimation || !rootScrollLayer()) 1474 if (!m_pageScaleAnimation || !rootScrollLayer())
1532 return; 1475 return;
1533 1476
1534 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); 1477 double monotonicTime = (time - base::TimeTicks()).InSecondsF();
1535 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); 1478 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta();
1536 1479
1537 setPageScaleDelta(m_pageScaleAnimation->pageScaleFactorAtTime(monotonicTime) / m_pinchZoomViewport.page_scale_factor()); 1480 activeTree()->SetPageScaleDelta(m_pageScaleAnimation->pageScaleFactorAtTime( monotonicTime) / activeTree()->page_scale_factor());
1538 gfx::Vector2dF nextScroll = m_pageScaleAnimation->scrollOffsetAtTime(monoton icTime); 1481 gfx::Vector2dF nextScroll = m_pageScaleAnimation->scrollOffsetAtTime(monoton icTime);
1539 1482
1540 if (!m_settings.pageScalePinchZoomEnabled) 1483 if (!m_settings.pageScalePinchZoomEnabled)
1541 nextScroll.Scale(m_pinchZoomViewport.page_scale_factor()); 1484 nextScroll.Scale(activeTree()->page_scale_factor());
1542 rootScrollLayer()->scrollBy(nextScroll - scrollTotal); 1485 rootScrollLayer()->scrollBy(nextScroll - scrollTotal);
1543 m_client->setNeedsRedrawOnImplThread(); 1486 m_client->setNeedsRedrawOnImplThread();
1544 1487
1545 if (m_pageScaleAnimation->isAnimationCompleteAtTime(monotonicTime)) { 1488 if (m_pageScaleAnimation->isAnimationCompleteAtTime(monotonicTime)) {
1546 m_pageScaleAnimation.reset(); 1489 m_pageScaleAnimation.reset();
1547 m_client->setNeedsCommitOnImplThread(); 1490 m_client->setNeedsCommitOnImplThread();
1548 } 1491 }
1549 } 1492 }
1550 1493
1551 void LayerTreeHostImpl::animateLayers(base::TimeTicks monotonicTime, base::Time wallClockTime) 1494 void LayerTreeHostImpl::animateLayers(base::TimeTicks monotonicTime, base::Time wallClockTime)
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
1738 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); 1681 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer());
1739 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); 1682 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>();
1740 } 1683 }
1741 1684
1742 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) 1685 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime)
1743 { 1686 {
1744 m_paintTimeCounter->SavePaintTime(totalPaintTime); 1687 m_paintTimeCounter->SavePaintTime(totalPaintTime);
1745 } 1688 }
1746 1689
1747 } // namespace cc 1690 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layer_tree_host_impl.h ('k') | cc/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698