| 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/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 736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 747 | 747 |
| 748 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) | 748 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) |
| 749 { | 749 { |
| 750 m_client->onCanDrawStateChanged(canDraw()); | 750 m_client->onCanDrawStateChanged(canDraw()); |
| 751 } | 751 } |
| 752 | 752 |
| 753 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const | 753 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const |
| 754 { | 754 { |
| 755 CompositorFrameMetadata metadata; | 755 CompositorFrameMetadata metadata; |
| 756 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); | 756 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); |
| 757 metadata.viewport_size = m_pinchZoomViewport.ZoomedViewport().size(); | 757 metadata.viewport_size = activeTree()->ScrollableViewportSize(); |
| 758 metadata.root_layer_size = activeTree()->ScrollableSize(); | 758 metadata.root_layer_size = activeTree()->ScrollableSize(); |
| 759 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor()
; | 759 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor()
; |
| 760 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor()
; | 760 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor()
; |
| 761 if (m_topControlsManager) { | 761 if (m_topControlsManager) { |
| 762 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager-
>controls_top_offset()); | 762 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager-
>controls_top_offset()); |
| 763 metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon
trolsManager->content_top_offset()); | 763 metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon
trolsManager->content_top_offset()); |
| 764 } | 764 } |
| 765 | 765 |
| 766 if (!rootScrollLayer()) | 766 if (!rootScrollLayer()) |
| 767 return metadata; | 767 return metadata; |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1128 return; | 1128 return; |
| 1129 | 1129 |
| 1130 m_pinchZoomViewport.set_page_scale_delta(delta); | 1130 m_pinchZoomViewport.set_page_scale_delta(delta); |
| 1131 | 1131 |
| 1132 updateMaxScrollOffset(); | 1132 updateMaxScrollOffset(); |
| 1133 activeTree()->set_needs_update_draw_properties(); | 1133 activeTree()->set_needs_update_draw_properties(); |
| 1134 if (pendingTree()) | 1134 if (pendingTree()) |
| 1135 pendingTree()->set_needs_update_draw_properties(); | 1135 pendingTree()->set_needs_update_draw_properties(); |
| 1136 } | 1136 } |
| 1137 | 1137 |
| 1138 gfx::Vector2dF LayerTreeHostImpl::scrollPinchZoomViewport(gfx::Vector2dF delta) | |
| 1139 { | |
| 1140 gfx::Vector2dF overflow = m_pinchZoomViewport.ApplyScroll(delta); | |
| 1141 activeTree()->set_needs_update_draw_properties(); | |
| 1142 if (pendingTree()) | |
| 1143 pendingTree()->set_needs_update_draw_properties(); | |
| 1144 return overflow; | |
| 1145 } | |
| 1146 | |
| 1147 void LayerTreeHostImpl::updateMaxScrollOffset() | 1138 void LayerTreeHostImpl::updateMaxScrollOffset() |
| 1148 { | 1139 { |
| 1149 activeTree()->UpdateMaxScrollOffset(); | 1140 activeTree()->UpdateMaxScrollOffset(); |
| 1150 } | 1141 } |
| 1151 | 1142 |
| 1152 void LayerTreeHostImpl::setActiveTreeNeedsUpdateDrawProperties() | 1143 void LayerTreeHostImpl::setActiveTreeNeedsUpdateDrawProperties() |
| 1153 { | 1144 { |
| 1154 activeTree()->set_needs_update_draw_properties(); | 1145 activeTree()->set_needs_update_draw_properties(); |
| 1155 } | 1146 } |
| 1156 | 1147 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1252 return gfx::Vector2dF(); | 1243 return gfx::Vector2dF(); |
| 1253 | 1244 |
| 1254 // localStartPoint and localEndPoint are in content space but we want to mov
e them to layer space for scrolling. | 1245 // localStartPoint and localEndPoint are in content space but we want to mov
e them to layer space for scrolling. |
| 1255 float widthScale = 1 / layerImpl->contentsScaleX(); | 1246 float widthScale = 1 / layerImpl->contentsScaleX(); |
| 1256 float heightScale = 1 / layerImpl->contentsScaleY(); | 1247 float heightScale = 1 / layerImpl->contentsScaleY(); |
| 1257 localStartPoint.Scale(widthScale, heightScale); | 1248 localStartPoint.Scale(widthScale, heightScale); |
| 1258 localEndPoint.Scale(widthScale, heightScale); | 1249 localEndPoint.Scale(widthScale, heightScale); |
| 1259 | 1250 |
| 1260 // Apply the scroll delta. | 1251 // Apply the scroll delta. |
| 1261 gfx::Vector2dF previousDelta = layerImpl->scrollDelta(); | 1252 gfx::Vector2dF previousDelta = layerImpl->scrollDelta(); |
| 1262 gfx::Vector2dF unscrolled = layerImpl->scrollBy(localEndPoint - localStartPo
int); | 1253 layerImpl->scrollBy(localEndPoint - localStartPoint); |
| 1263 gfx::Vector2dF scrollAmount = localEndPoint - localStartPoint; | |
| 1264 | |
| 1265 gfx::Vector2dF viewportAppliedPan; | |
| 1266 if (m_settings.pageScalePinchZoomEnabled && layerImpl == rootScrollLayer()) | |
| 1267 viewportAppliedPan = unscrolled - scrollPinchZoomViewport(unscrolled); | |
| 1268 | 1254 |
| 1269 // Get the end point in the layer's content space so we can apply its screen
SpaceTransform. | 1255 // Get the end point in the layer's content space so we can apply its screen
SpaceTransform. |
| 1270 gfx::PointF actualLocalEndPoint = localStartPoint + layerImpl->scrollDelta()
+ viewportAppliedPan - previousDelta; | 1256 gfx::PointF actualLocalEndPoint = localStartPoint + layerImpl->scrollDelta()
- previousDelta; |
| 1271 gfx::PointF actualLocalContentEndPoint = gfx::ScalePoint(actualLocalEndPoint
, 1 / widthScale, 1 / heightScale); | 1257 gfx::PointF actualLocalContentEndPoint = gfx::ScalePoint(actualLocalEndPoint
, 1 / widthScale, 1 / heightScale); |
| 1272 | 1258 |
| 1273 // Calculate the applied scroll delta in viewport space coordinates. | 1259 // Calculate the applied scroll delta in viewport space coordinates. |
| 1274 gfx::PointF actualScreenSpaceEndPoint = MathUtil::mapPoint(layerImpl->screen
SpaceTransform(), actualLocalContentEndPoint, endClipped); | 1260 gfx::PointF actualScreenSpaceEndPoint = MathUtil::mapPoint(layerImpl->screen
SpaceTransform(), actualLocalContentEndPoint, endClipped); |
| 1275 DCHECK(!endClipped); | 1261 DCHECK(!endClipped); |
| 1276 if (endClipped) | 1262 if (endClipped) |
| 1277 return gfx::Vector2dF(); | 1263 return gfx::Vector2dF(); |
| 1278 gfx::PointF actualViewportEndPoint = gfx::ScalePoint(actualScreenSpaceEndPoi
nt, 1 / scaleFromViewportToScreenSpace); | 1264 gfx::PointF actualViewportEndPoint = gfx::ScalePoint(actualScreenSpaceEndPoi
nt, 1 / scaleFromViewportToScreenSpace); |
| 1279 return actualViewportEndPoint - viewportPoint; | 1265 return actualViewportEndPoint - viewportPoint; |
| 1280 } | 1266 } |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1376 gfx::PointF newScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta); | 1362 gfx::PointF newScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta); |
| 1377 gfx::Vector2dF move = previousScaleAnchor - newScaleAnchor; | 1363 gfx::Vector2dF move = previousScaleAnchor - newScaleAnchor; |
| 1378 | 1364 |
| 1379 m_previousPinchAnchor = anchor; | 1365 m_previousPinchAnchor = anchor; |
| 1380 | 1366 |
| 1381 if (m_settings.pageScalePinchZoomEnabled) { | 1367 if (m_settings.pageScalePinchZoomEnabled) { |
| 1382 // Compute the application of the delta with respect to the current page
zoom of the page. | 1368 // Compute the application of the delta with respect to the current page
zoom of the page. |
| 1383 move.Scale(1 / m_pinchZoomViewport.page_scale_factor()); | 1369 move.Scale(1 / m_pinchZoomViewport.page_scale_factor()); |
| 1384 } | 1370 } |
| 1385 | 1371 |
| 1386 gfx::Vector2dF scrollOverflow = m_settings.pageScalePinchZoomEnabled ? scrol
lPinchZoomViewport(move) : move; | 1372 rootScrollLayer()->scrollBy(move); |
| 1387 rootScrollLayer()->scrollBy(scrollOverflow); | |
| 1388 | 1373 |
| 1389 if (rootScrollLayer()->scrollbarAnimationController()) | 1374 if (rootScrollLayer()->scrollbarAnimationController()) |
| 1390 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate
(base::TimeTicks::Now()); | 1375 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate
(base::TimeTicks::Now()); |
| 1391 | 1376 |
| 1392 m_client->setNeedsCommitOnImplThread(); | 1377 m_client->setNeedsCommitOnImplThread(); |
| 1393 m_client->setNeedsRedrawOnImplThread(); | 1378 m_client->setNeedsRedrawOnImplThread(); |
| 1394 m_client->renewTreePriority(); | 1379 m_client->renewTreePriority(); |
| 1395 } | 1380 } |
| 1396 | 1381 |
| 1397 void LayerTreeHostImpl::pinchGestureEnd() | 1382 void LayerTreeHostImpl::pinchGestureEnd() |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1456 activeTree()->RootScrollLayer()->setSentScrollDelta(scroll.scrollDelta); | 1441 activeTree()->RootScrollLayer()->setSentScrollDelta(scroll.scrollDelta); |
| 1457 scrollInfo->pageScaleDelta = pageScale / m_pinchZoomViewport.page_scale_fact
or(); | 1442 scrollInfo->pageScaleDelta = pageScale / m_pinchZoomViewport.page_scale_fact
or(); |
| 1458 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); | 1443 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); |
| 1459 } | 1444 } |
| 1460 | 1445 |
| 1461 static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI
mpl) | 1446 static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI
mpl) |
| 1462 { | 1447 { |
| 1463 if (!layerImpl) | 1448 if (!layerImpl) |
| 1464 return; | 1449 return; |
| 1465 | 1450 |
| 1466 if (!layerImpl->scrollDelta().IsZero()) { | 1451 gfx::Vector2d scrollDelta = gfx::ToFlooredVector2d(layerImpl->scrollDelta())
; |
| 1467 gfx::Vector2d scrollDelta = gfx::ToFlooredVector2d(layerImpl->scrollDelt
a()); | 1452 if (!scrollDelta.IsZero()) { |
| 1468 LayerTreeHostCommon::ScrollUpdateInfo scroll; | 1453 LayerTreeHostCommon::ScrollUpdateInfo scroll; |
| 1469 scroll.layerId = layerImpl->id(); | 1454 scroll.layerId = layerImpl->id(); |
| 1470 scroll.scrollDelta = scrollDelta; | 1455 scroll.scrollDelta = scrollDelta; |
| 1471 scrollInfo->scrolls.push_back(scroll); | 1456 scrollInfo->scrolls.push_back(scroll); |
| 1472 layerImpl->setSentScrollDelta(scrollDelta); | 1457 layerImpl->setSentScrollDelta(scrollDelta); |
| 1473 } | 1458 } |
| 1474 | 1459 |
| 1475 for (size_t i = 0; i < layerImpl->children().size(); ++i) | 1460 for (size_t i = 0; i < layerImpl->children().size(); ++i) |
| 1476 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); | 1461 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); |
| 1477 } | 1462 } |
| 1478 | 1463 |
| 1479 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas() | 1464 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas() |
| 1480 { | 1465 { |
| 1481 scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet()); | 1466 scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet()); |
| 1482 | 1467 |
| 1483 if (m_pinchGestureActive || m_pageScaleAnimation) { | 1468 if (!m_settings.pageScalePinchZoomEnabled && (m_pinchGestureActive || m_page
ScaleAnimation)) { |
| 1484 scrollInfo->pageScaleDelta = 1; | 1469 scrollInfo->pageScaleDelta = 1; |
| 1485 m_pinchZoomViewport.set_sent_page_scale_delta(1); | 1470 m_pinchZoomViewport.set_sent_page_scale_delta(1); |
| 1486 // FIXME(aelias): Make pinch-zoom painting optimization compatible with | 1471 if (m_pinchGestureActive) |
| 1487 // compositor-side scaling. | |
| 1488 if (!m_settings.pageScalePinchZoomEnabled && m_pinchGestureActive) | |
| 1489 computePinchZoomDeltas(scrollInfo.get()); | 1472 computePinchZoomDeltas(scrollInfo.get()); |
| 1490 else if (m_pageScaleAnimation.get()) | 1473 else if (m_pageScaleAnimation.get()) |
| 1491 computeDoubleTapZoomDeltas(scrollInfo.get()); | 1474 computeDoubleTapZoomDeltas(scrollInfo.get()); |
| 1492 return scrollInfo.Pass(); | 1475 return scrollInfo.Pass(); |
| 1493 } | 1476 } |
| 1494 | 1477 |
| 1495 collectScrollDeltas(scrollInfo.get(), rootLayer()); | 1478 collectScrollDeltas(scrollInfo.get(), rootLayer()); |
| 1496 scrollInfo->pageScaleDelta = m_pinchZoomViewport.page_scale_delta(); | 1479 scrollInfo->pageScaleDelta = m_pinchZoomViewport.page_scale_delta(); |
| 1497 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); | 1480 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); |
| 1498 | 1481 |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1713 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); | 1696 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); |
| 1714 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); | 1697 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); |
| 1715 } | 1698 } |
| 1716 | 1699 |
| 1717 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) | 1700 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) |
| 1718 { | 1701 { |
| 1719 m_paintTimeCounter->SavePaintTime(totalPaintTime); | 1702 m_paintTimeCounter->SavePaintTime(totalPaintTime); |
| 1720 } | 1703 } |
| 1721 | 1704 |
| 1722 } // namespace cc | 1705 } // namespace cc |
| OLD | NEW |