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 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 247 memoryNiceToHaveBytes, | 247 memoryNiceToHaveBytes, |
| 248 memoryUsedBytes); | 248 memoryUsedBytes); |
| 249 } | 249 } |
| 250 | 250 |
| 251 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati on) | 251 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati on) |
| 252 { | 252 { |
| 253 if (!rootScrollLayer()) | 253 if (!rootScrollLayer()) |
| 254 return; | 254 return; |
| 255 | 255 |
| 256 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); | 256 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); |
| 257 gfx::SizeF scaledContentSize = contentSize(); | 257 gfx::SizeF scaledContentSize = activeTree()->ScrollableSize(); |
|
danakj
2013/01/17 18:02:49
rename scaledContentSize to what it now holds as w
aelias_OOO_until_Jul13
2013/01/17 19:59:46
Done.
aelias_OOO_until_Jul13
2013/01/17 19:59:46
Done.
| |
| 258 if (!m_settings.pageScalePinchZoomEnabled) { | 258 if (!m_settings.pageScalePinchZoomEnabled) { |
| 259 scrollTotal.Scale(1 / m_pinchZoomViewport.page_scale_factor()); | 259 scrollTotal.Scale(1 / m_pinchZoomViewport.page_scale_factor()); |
| 260 scaledContentSize.Scale(1 / m_pinchZoomViewport.page_scale_factor()); | 260 scaledContentSize.Scale(1 / m_pinchZoomViewport.page_scale_factor()); |
| 261 } | 261 } |
| 262 gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceS caleFactor); | 262 gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceS caleFactor); |
| 263 | 263 |
| 264 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); | 264 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); |
| 265 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomVi ewport.total_page_scale_factor(), viewportSize, scaledContentSize, startTimeSeco nds); | 265 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomVi ewport.total_page_scale_factor(), viewportSize, scaledContentSize, startTimeSeco nds); |
|
danakj
2013/01/17 18:02:49
Without a change to PageScaleAnimation how does th
aelias_OOO_until_Jul13
2013/01/17 19:59:46
This function was already prepared for the coordin
| |
| 266 | 266 |
| 267 if (anchorPoint) { | 267 if (anchorPoint) { |
| 268 gfx::Vector2dF anchor(targetOffset); | 268 gfx::Vector2dF anchor(targetOffset); |
| 269 if (!m_settings.pageScalePinchZoomEnabled) | 269 if (!m_settings.pageScalePinchZoomEnabled) |
| 270 anchor.Scale(1 / pageScale); | 270 anchor.Scale(1 / pageScale); |
| 271 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon dsF()); | 271 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon dsF()); |
| 272 } else { | 272 } else { |
| 273 gfx::Vector2dF scaledTargetOffset = targetOffset; | 273 gfx::Vector2dF scaledTargetOffset = targetOffset; |
| 274 if (!m_settings.pageScalePinchZoomEnabled) | 274 if (!m_settings.pageScalePinchZoomEnabled) |
| 275 scaledTargetOffset.Scale(1 / pageScale); | 275 scaledTargetOffset.Scale(1 / pageScale); |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 547 | 547 |
| 548 void LayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) | 548 void LayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) |
| 549 { | 549 { |
| 550 // Lazily create the timeSource adapter so that we can vary the interval for testing. | 550 // Lazily create the timeSource adapter so that we can vary the interval for testing. |
| 551 if (!m_timeSourceClientAdapter) | 551 if (!m_timeSourceClientAdapter) |
| 552 m_timeSourceClientAdapter = LayerTreeHostImplTimeSourceAdapter::create(t his, DelayBasedTimeSource::create(lowFrequencyAnimationInterval(), m_proxy->curr entThread())); | 552 m_timeSourceClientAdapter = LayerTreeHostImplTimeSourceAdapter::create(t his, DelayBasedTimeSource::create(lowFrequencyAnimationInterval(), m_proxy->curr entThread())); |
| 553 | 553 |
| 554 m_timeSourceClientAdapter->setActive(enabled); | 554 m_timeSourceClientAdapter->setActive(enabled); |
| 555 } | 555 } |
| 556 | 556 |
| 557 gfx::Size LayerTreeHostImpl::contentSize() const | |
| 558 { | |
| 559 return activeTree()->ContentSize(); | |
| 560 } | |
| 561 | |
| 562 static inline RenderPass* findRenderPassById(RenderPass::Id renderPassId, const LayerTreeHostImpl::FrameData& frame) | 557 static inline RenderPass* findRenderPassById(RenderPass::Id renderPassId, const LayerTreeHostImpl::FrameData& frame) |
| 563 { | 558 { |
| 564 RenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(renderP assId); | 559 RenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(renderP assId); |
| 565 return it != frame.renderPassesById.end() ? it->second : NULL; | 560 return it != frame.renderPassesById.end() ? it->second : NULL; |
| 566 } | 561 } |
| 567 | 562 |
| 568 static void removeRenderPassesRecursive(RenderPass::Id removeRenderPassId, Layer TreeHostImpl::FrameData& frame) | 563 static void removeRenderPassesRecursive(RenderPass::Id removeRenderPassId, Layer TreeHostImpl::FrameData& frame) |
| 569 { | 564 { |
| 570 RenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, frame) ; | 565 RenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, frame) ; |
| 571 // The pass was already removed by another quad - probably the original, and we are the replica. | 566 // The pass was already removed by another quad - probably the original, and we are the replica. |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 761 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const | 756 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const |
| 762 { | 757 { |
| 763 if (!rootScrollLayer()) | 758 if (!rootScrollLayer()) |
| 764 return CompositorFrameMetadata(); | 759 return CompositorFrameMetadata(); |
| 765 | 760 |
| 766 CompositorFrameMetadata metadata; | 761 CompositorFrameMetadata metadata; |
| 767 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta(); | 762 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta(); |
| 768 if (!m_settings.pageScalePinchZoomEnabled) | 763 if (!m_settings.pageScalePinchZoomEnabled) |
| 769 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.page_scale_fac tor()); | 764 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.page_scale_fac tor()); |
| 770 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); | 765 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); |
| 771 metadata.viewport_size = m_pinchZoomViewport.Bounds().size(); | 766 metadata.viewport_size = m_pinchZoomViewport.ZoomedViewport().size(); |
| 772 metadata.root_layer_size = contentSize(); | 767 metadata.root_layer_size = activeTree()->ScrollableSize(); |
| 773 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor() ; | 768 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor() ; |
| 774 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor() ; | 769 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor() ; |
| 775 | 770 |
| 776 return metadata; | 771 return metadata; |
| 777 } | 772 } |
| 778 | 773 |
| 779 void LayerTreeHostImpl::drawLayers(FrameData& frame) | 774 void LayerTreeHostImpl::drawLayers(FrameData& frame) |
| 780 { | 775 { |
| 781 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); | 776 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); |
| 782 DCHECK(canDraw()); | 777 DCHECK(canDraw()); |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1021 | 1016 |
| 1022 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize) | 1017 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize) |
| 1023 { | 1018 { |
| 1024 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize) | 1019 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize) |
| 1025 return; | 1020 return; |
| 1026 | 1021 |
| 1027 m_layoutViewportSize = layoutViewportSize; | 1022 m_layoutViewportSize = layoutViewportSize; |
| 1028 m_deviceViewportSize = deviceViewportSize; | 1023 m_deviceViewportSize = deviceViewportSize; |
| 1029 | 1024 |
| 1030 m_pinchZoomViewport.set_layout_viewport_size(layoutViewportSize); | 1025 m_pinchZoomViewport.set_layout_viewport_size(layoutViewportSize); |
| 1026 m_pinchZoomViewport.set_device_viewport_size(deviceViewportSize); | |
| 1031 | 1027 |
| 1032 updateMaxScrollOffset(); | 1028 updateMaxScrollOffset(); |
| 1033 | 1029 |
| 1034 if (m_renderer) | 1030 if (m_renderer) |
| 1035 m_renderer->viewportChanged(); | 1031 m_renderer->viewportChanged(); |
| 1036 | 1032 |
| 1037 m_client->onCanDrawStateChanged(canDraw()); | 1033 m_client->onCanDrawStateChanged(canDraw()); |
| 1038 } | 1034 } |
| 1039 | 1035 |
| 1040 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal eChange) | 1036 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal eChange) |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1364 const float pinchZoomOutSensitivity = 0.95f; | 1360 const float pinchZoomOutSensitivity = 0.95f; |
| 1365 if (m_pinchZoomViewport.page_scale_delta() > pinchZoomOutSensitivity) | 1361 if (m_pinchZoomViewport.page_scale_delta() > pinchZoomOutSensitivity) |
| 1366 return; | 1362 return; |
| 1367 | 1363 |
| 1368 // Compute where the scroll offset/page scale would be if fully pinch-zoomed | 1364 // Compute where the scroll offset/page scale would be if fully pinch-zoomed |
| 1369 // out from the anchor point. | 1365 // out from the anchor point. |
| 1370 gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); | 1366 gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); |
| 1371 scrollBegin.Scale(m_pinchZoomViewport.page_scale_delta()); | 1367 scrollBegin.Scale(m_pinchZoomViewport.page_scale_delta()); |
| 1372 float scaleBegin = m_pinchZoomViewport.total_page_scale_factor(); | 1368 float scaleBegin = m_pinchZoomViewport.total_page_scale_factor(); |
| 1373 float pageScaleDeltaToSend = m_pinchZoomViewport.min_page_scale_factor() / m _pinchZoomViewport.page_scale_factor(); | 1369 float pageScaleDeltaToSend = m_pinchZoomViewport.min_page_scale_factor() / m _pinchZoomViewport.page_scale_factor(); |
| 1374 gfx::SizeF scaledContentsSize = gfx::ScaleSize(contentSize(), pageScaleDelta ToSend); | 1370 gfx::SizeF scaledContentsSize = gfx::ScaleSize(activeTree()->ScrollableSize( ), pageScaleDeltaToSend); |
|
danakj
2013/01/17 18:02:49
rename scaledContentsSize here also
aelias_OOO_until_Jul13
2013/01/17 19:59:46
Done.
| |
| 1375 | 1371 |
| 1376 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); | 1372 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); |
| 1377 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; | 1373 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; |
| 1378 scrollEnd.Scale(m_pinchZoomViewport.min_page_scale_factor() / scaleBegin); | 1374 scrollEnd.Scale(m_pinchZoomViewport.min_page_scale_factor() / scaleBegin); |
| 1379 scrollEnd -= anchorOffset; | 1375 scrollEnd -= anchorOffset; |
| 1380 scrollEnd.ClampToMax(gfx::RectF(scaledContentsSize).bottom_right() - gfx::Re ct(m_deviceViewportSize).bottom_right()); | 1376 scrollEnd.ClampToMax(gfx::RectF(scaledContentsSize).bottom_right() - gfx::Re ct(m_deviceViewportSize).bottom_right()); |
|
danakj
2013/01/17 18:02:49
You mentioned that scrolling should all be in logi
aelias_OOO_until_Jul13
2013/01/17 19:59:46
This method adjustScrollsForPageScaleChange is pur
| |
| 1381 scrollEnd.ClampToMin(gfx::Vector2d()); | 1377 scrollEnd.ClampToMin(gfx::Vector2d()); |
| 1382 scrollEnd.Scale(1 / pageScaleDeltaToSend); | 1378 scrollEnd.Scale(1 / pageScaleDeltaToSend); |
| 1383 scrollEnd.Scale(m_deviceScaleFactor); | 1379 scrollEnd.Scale(m_deviceScaleFactor); |
| 1384 | 1380 |
| 1385 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), m_pinch ZoomViewport.min_page_scale_factor()); | 1381 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), m_pinch ZoomViewport.min_page_scale_factor()); |
| 1386 } | 1382 } |
| 1387 | 1383 |
| 1388 void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx ::Vector2d scrollOffset, float pageScale) | 1384 void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx ::Vector2d scrollOffset, float pageScale) |
| 1389 { | 1385 { |
| 1390 if (!rootScrollLayer()) | 1386 if (!rootScrollLayer()) |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1639 } | 1635 } |
| 1640 | 1636 |
| 1641 skia::RefPtr<SkPicture> LayerTreeHostImpl::capturePicture() | 1637 skia::RefPtr<SkPicture> LayerTreeHostImpl::capturePicture() |
| 1642 { | 1638 { |
| 1643 LayerTreeImpl* tree = pendingTree() ? pendingTree() : activeTree(); | 1639 LayerTreeImpl* tree = pendingTree() ? pendingTree() : activeTree(); |
| 1644 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); | 1640 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); |
| 1645 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); | 1641 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); |
| 1646 } | 1642 } |
| 1647 | 1643 |
| 1648 } // namespace cc | 1644 } // namespace cc |
| OLD | NEW |