Chromium Code Reviews| 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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 125 } | 125 } |
| 126 | 126 |
| 127 scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::create(const LayerTreeSettings& settings, LayerTreeHostImplClient* client, Proxy* proxy) | 127 scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::create(const LayerTreeSettings& settings, LayerTreeHostImplClient* client, Proxy* proxy) |
| 128 { | 128 { |
| 129 return make_scoped_ptr(new LayerTreeHostImpl(settings, client, proxy)); | 129 return make_scoped_ptr(new LayerTreeHostImpl(settings, client, proxy)); |
| 130 } | 130 } |
| 131 | 131 |
| 132 LayerTreeHostImpl::LayerTreeHostImpl(const LayerTreeSettings& settings, LayerTre eHostImplClient* client, Proxy* proxy) | 132 LayerTreeHostImpl::LayerTreeHostImpl(const LayerTreeSettings& settings, LayerTre eHostImplClient* client, Proxy* proxy) |
| 133 : m_client(client) | 133 : m_client(client) |
| 134 , m_proxy(proxy) | 134 , m_proxy(proxy) |
| 135 , m_didScrollOnce(false) | |
| 136 , m_shouldBubbleScrolls(false) | |
| 135 , m_scrollDeltaIsInViewportSpace(false) | 137 , m_scrollDeltaIsInViewportSpace(false) |
| 136 , m_settings(settings) | 138 , m_settings(settings) |
| 137 , m_debugState(settings.initialDebugState) | 139 , m_debugState(settings.initialDebugState) |
| 138 , m_deviceScaleFactor(1) | 140 , m_deviceScaleFactor(1) |
| 139 , m_visible(true) | 141 , m_visible(true) |
| 140 , m_managedMemoryPolicy(PrioritizedResourceManager::defaultMemoryAllocationL imit(), | 142 , m_managedMemoryPolicy(PrioritizedResourceManager::defaultMemoryAllocationL imit(), |
| 141 ManagedMemoryPolicy::CUTOFF_ALLOW_EVERYTHING, | 143 ManagedMemoryPolicy::CUTOFF_ALLOW_EVERYTHING, |
| 142 0, | 144 0, |
| 143 ManagedMemoryPolicy::CUTOFF_ALLOW_NOTHING) | 145 ManagedMemoryPolicy::CUTOFF_ALLOW_NOTHING) |
| 144 , m_pinchGestureActive(false) | 146 , m_pinchGestureActive(false) |
| (...skipping 1051 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1196 | 1198 |
| 1197 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type) | 1199 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type) |
| 1198 { | 1200 { |
| 1199 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin"); | 1201 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin"); |
| 1200 | 1202 |
| 1201 if (m_topControlsManager) | 1203 if (m_topControlsManager) |
| 1202 m_topControlsManager->ScrollBegin(); | 1204 m_topControlsManager->ScrollBegin(); |
| 1203 | 1205 |
| 1204 DCHECK(!currentlyScrollingLayer()); | 1206 DCHECK(!currentlyScrollingLayer()); |
| 1205 clearCurrentlyScrollingLayer(); | 1207 clearCurrentlyScrollingLayer(); |
| 1208 m_didScrollOnce = false; | |
|
Sami
2013/01/30 19:28:31
Better do this in clearCurrentlyScrollingLayer().
Yusuf
2013/01/30 21:01:02
Done.
| |
| 1206 | 1209 |
| 1207 if (!ensureRenderSurfaceLayerList()) | 1210 if (!ensureRenderSurfaceLayerList()) |
| 1208 return ScrollIgnored; | 1211 return ScrollIgnored; |
| 1209 | 1212 |
| 1210 gfx::PointF deviceViewportPoint = gfx::ScalePoint(viewportPoint, m_deviceSca leFactor); | 1213 gfx::PointF deviceViewportPoint = gfx::ScalePoint(viewportPoint, m_deviceSca leFactor); |
| 1211 | 1214 |
| 1212 // First find out which layer was hit from the saved list of visible layers | 1215 // First find out which layer was hit from the saved list of visible layers |
| 1213 // in the most recent frame. | 1216 // in the most recent frame. |
| 1214 LayerImpl* layerImpl = LayerTreeHostCommon::findLayerThatIsHitByPoint(device ViewportPoint, activeTree()->RenderSurfaceLayerList()); | 1217 LayerImpl* layerImpl = LayerTreeHostCommon::findLayerThatIsHitByPoint(device ViewportPoint, activeTree()->RenderSurfaceLayerList()); |
| 1215 | 1218 |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 1233 m_numMainThreadScrolls++; | 1236 m_numMainThreadScrolls++; |
| 1234 return ScrollOnMainThread; | 1237 return ScrollOnMainThread; |
| 1235 } | 1238 } |
| 1236 | 1239 |
| 1237 if (status == ScrollStarted && !potentiallyScrollingLayerImpl) | 1240 if (status == ScrollStarted && !potentiallyScrollingLayerImpl) |
| 1238 potentiallyScrollingLayerImpl = scrollLayerImpl; | 1241 potentiallyScrollingLayerImpl = scrollLayerImpl; |
| 1239 } | 1242 } |
| 1240 | 1243 |
| 1241 if (potentiallyScrollingLayerImpl) { | 1244 if (potentiallyScrollingLayerImpl) { |
| 1242 m_activeTree->set_currently_scrolling_layer(potentiallyScrollingLayerImp l); | 1245 m_activeTree->set_currently_scrolling_layer(potentiallyScrollingLayerImp l); |
| 1246 m_shouldBubbleScrolls = (type != NonBubblingGesture); | |
| 1243 // Gesture events need to be transformed from viewport coordinates to lo cal layer coordinates | 1247 // Gesture events need to be transformed from viewport coordinates to lo cal layer coordinates |
| 1244 // so that the scrolling contents exactly follow the user's finger. In c ontrast, wheel | 1248 // so that the scrolling contents exactly follow the user's finger. In c ontrast, wheel |
| 1245 // events are already in local layer coordinates so we can just apply th em directly. | 1249 // events are already in local layer coordinates so we can just apply th em directly. |
| 1246 m_scrollDeltaIsInViewportSpace = (type == Gesture); | 1250 m_scrollDeltaIsInViewportSpace = (type == Gesture); |
| 1247 m_numImplThreadScrolls++; | 1251 m_numImplThreadScrolls++; |
| 1248 m_client->renewTreePriority(); | 1252 m_client->renewTreePriority(); |
| 1249 return ScrollStarted; | 1253 return ScrollStarted; |
| 1250 } | 1254 } |
| 1251 return ScrollIgnored; | 1255 return ScrollIgnored; |
| 1252 } | 1256 } |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1334 pendingDelta = m_topControlsManager->ScrollBy(pendingDelta); | 1338 pendingDelta = m_topControlsManager->ScrollBy(pendingDelta); |
| 1335 | 1339 |
| 1336 if (m_scrollDeltaIsInViewportSpace) { | 1340 if (m_scrollDeltaIsInViewportSpace) { |
| 1337 float scaleFromViewportToScreenSpace = m_deviceScaleFactor; | 1341 float scaleFromViewportToScreenSpace = m_deviceScaleFactor; |
| 1338 appliedDelta = scrollLayerWithViewportSpaceDelta(layerImpl, scaleFro mViewportToScreenSpace, viewportPoint, pendingDelta); | 1342 appliedDelta = scrollLayerWithViewportSpaceDelta(layerImpl, scaleFro mViewportToScreenSpace, viewportPoint, pendingDelta); |
| 1339 } else | 1343 } else |
| 1340 appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta); | 1344 appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta); |
| 1341 | 1345 |
| 1342 // If the layer wasn't able to move, try the next one in the hierarchy. | 1346 // If the layer wasn't able to move, try the next one in the hierarchy. |
| 1343 float moveThresholdSquared = 0.1f * 0.1f; | 1347 float moveThresholdSquared = 0.1f * 0.1f; |
| 1344 if (appliedDelta.LengthSquared() < moveThresholdSquared) | 1348 if (appliedDelta.LengthSquared() < moveThresholdSquared) { |
| 1345 continue; | 1349 if (m_shouldBubbleScrolls || !m_didScrollOnce) |
| 1350 continue; | |
| 1351 else | |
| 1352 break; | |
|
Sami
2013/01/30 19:28:31
Indent?
Yusuf
2013/01/30 21:01:02
Done.
Yusuf
2013/01/30 21:01:02
Done.
| |
| 1353 } | |
| 1354 if (!m_shouldBubbleScrolls) m_activeTree->set_currently_scrolling_layer( layerImpl); | |
|
Sami
2013/01/30 19:28:31
You could also break here since there's no need to
Yusuf
2013/01/30 21:01:02
Done.
| |
| 1346 didScroll = true; | 1355 didScroll = true; |
| 1356 m_didScrollOnce = true; | |
| 1347 | 1357 |
| 1348 // If the applied delta is within 45 degrees of the input delta, bail ou t to make it easier | 1358 // If the applied delta is within 45 degrees of the input delta, bail ou t to make it easier |
| 1349 // to scroll just one layer in one direction without affecting any of it s parents. | 1359 // to scroll just one layer in one direction without affecting any of it s parents. |
| 1350 float angleThreshold = 45; | 1360 float angleThreshold = 45; |
| 1351 if (MathUtil::smallestAngleBetweenVectors(appliedDelta, pendingDelta) < angleThreshold) { | 1361 if (MathUtil::smallestAngleBetweenVectors(appliedDelta, pendingDelta) < angleThreshold) { |
| 1352 pendingDelta = gfx::Vector2d(); | 1362 pendingDelta = gfx::Vector2d(); |
| 1353 break; | 1363 break; |
| 1354 } | 1364 } |
| 1355 | 1365 |
| 1356 // Allow further movement only on an axis perpendicular to the direction in which the layer | 1366 // Allow further movement only on an axis perpendicular to the direction in which the layer |
| (...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1742 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); | 1752 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); |
| 1743 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); | 1753 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); |
| 1744 } | 1754 } |
| 1745 | 1755 |
| 1746 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) | 1756 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) |
| 1747 { | 1757 { |
| 1748 m_paintTimeCounter->SavePaintTime(totalPaintTime); | 1758 m_paintTimeCounter->SavePaintTime(totalPaintTime); |
| 1749 } | 1759 } |
| 1750 | 1760 |
| 1751 } // namespace cc | 1761 } // namespace cc |
| OLD | NEW |