| 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 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 memoryNiceToHaveBytes, | 255 memoryNiceToHaveBytes, |
| 256 memoryUsedBytes); | 256 memoryUsedBytes); |
| 257 } | 257 } |
| 258 | 258 |
| 259 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool
anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati
on) | 259 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool
anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati
on) |
| 260 { | 260 { |
| 261 if (!rootScrollLayer()) | 261 if (!rootScrollLayer()) |
| 262 return; | 262 return; |
| 263 | 263 |
| 264 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL
ayer()->scrollDelta(); | 264 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL
ayer()->scrollDelta(); |
| 265 gfx::SizeF scaledContentSize = contentSize(); | 265 gfx::SizeF scaledScrollableSize = activeTree()->ScrollableSize(); |
| 266 if (!m_settings.pageScalePinchZoomEnabled) { | 266 if (!m_settings.pageScalePinchZoomEnabled) { |
| 267 scrollTotal.Scale(1 / m_pinchZoomViewport.page_scale_factor()); | 267 scrollTotal.Scale(1 / m_pinchZoomViewport.page_scale_factor()); |
| 268 scaledContentSize.Scale(1 / m_pinchZoomViewport.page_scale_factor()); | 268 scaledScrollableSize.Scale(1 / m_pinchZoomViewport.page_scale_factor()); |
| 269 } | 269 } |
| 270 gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceS
caleFactor); | 270 gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceS
caleFactor); |
| 271 | 271 |
| 272 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); | 272 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); |
| 273 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomVi
ewport.total_page_scale_factor(), viewportSize, scaledContentSize, startTimeSeco
nds); | 273 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomVi
ewport.total_page_scale_factor(), viewportSize, scaledScrollableSize, startTimeS
econds); |
| 274 | 274 |
| 275 if (anchorPoint) { | 275 if (anchorPoint) { |
| 276 gfx::Vector2dF anchor(targetOffset); | 276 gfx::Vector2dF anchor(targetOffset); |
| 277 if (!m_settings.pageScalePinchZoomEnabled) | 277 if (!m_settings.pageScalePinchZoomEnabled) |
| 278 anchor.Scale(1 / pageScale); | 278 anchor.Scale(1 / pageScale); |
| 279 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon
dsF()); | 279 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon
dsF()); |
| 280 } else { | 280 } else { |
| 281 gfx::Vector2dF scaledTargetOffset = targetOffset; | 281 gfx::Vector2dF scaledTargetOffset = targetOffset; |
| 282 if (!m_settings.pageScalePinchZoomEnabled) | 282 if (!m_settings.pageScalePinchZoomEnabled) |
| 283 scaledTargetOffset.Scale(1 / pageScale); | 283 scaledTargetOffset.Scale(1 / pageScale); |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 | 557 |
| 558 void LayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) | 558 void LayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) |
| 559 { | 559 { |
| 560 // Lazily create the timeSource adapter so that we can vary the interval for
testing. | 560 // Lazily create the timeSource adapter so that we can vary the interval for
testing. |
| 561 if (!m_timeSourceClientAdapter) | 561 if (!m_timeSourceClientAdapter) |
| 562 m_timeSourceClientAdapter = LayerTreeHostImplTimeSourceAdapter::create(t
his, DelayBasedTimeSource::create(lowFrequencyAnimationInterval(), m_proxy->curr
entThread())); | 562 m_timeSourceClientAdapter = LayerTreeHostImplTimeSourceAdapter::create(t
his, DelayBasedTimeSource::create(lowFrequencyAnimationInterval(), m_proxy->curr
entThread())); |
| 563 | 563 |
| 564 m_timeSourceClientAdapter->setActive(enabled); | 564 m_timeSourceClientAdapter->setActive(enabled); |
| 565 } | 565 } |
| 566 | 566 |
| 567 gfx::Size LayerTreeHostImpl::contentSize() const | |
| 568 { | |
| 569 return activeTree()->ContentSize(); | |
| 570 } | |
| 571 | |
| 572 static inline RenderPass* findRenderPassById(RenderPass::Id renderPassId, const
LayerTreeHostImpl::FrameData& frame) | 567 static inline RenderPass* findRenderPassById(RenderPass::Id renderPassId, const
LayerTreeHostImpl::FrameData& frame) |
| 573 { | 568 { |
| 574 RenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(renderP
assId); | 569 RenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(renderP
assId); |
| 575 return it != frame.renderPassesById.end() ? it->second : NULL; | 570 return it != frame.renderPassesById.end() ? it->second : NULL; |
| 576 } | 571 } |
| 577 | 572 |
| 578 static void removeRenderPassesRecursive(RenderPass::Id removeRenderPassId, Layer
TreeHostImpl::FrameData& frame) | 573 static void removeRenderPassesRecursive(RenderPass::Id removeRenderPassId, Layer
TreeHostImpl::FrameData& frame) |
| 579 { | 574 { |
| 580 RenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, frame)
; | 575 RenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, frame)
; |
| 581 // The pass was already removed by another quad - probably the original, and
we are the replica. | 576 // The pass was already removed by another quad - probably the original, and
we are the replica. |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 | 760 |
| 766 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) | 761 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) |
| 767 { | 762 { |
| 768 m_client->onCanDrawStateChanged(canDraw()); | 763 m_client->onCanDrawStateChanged(canDraw()); |
| 769 } | 764 } |
| 770 | 765 |
| 771 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const | 766 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const |
| 772 { | 767 { |
| 773 CompositorFrameMetadata metadata; | 768 CompositorFrameMetadata metadata; |
| 774 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); | 769 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); |
| 775 metadata.viewport_size = m_pinchZoomViewport.Bounds().size(); | 770 metadata.viewport_size = m_pinchZoomViewport.ZoomedViewport().size(); |
| 776 metadata.root_layer_size = contentSize(); | 771 metadata.root_layer_size = activeTree()->ScrollableSize(); |
| 777 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor()
; | 772 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor()
; |
| 778 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor()
; | 773 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor()
; |
| 779 if (m_topControlsManager) { | 774 if (m_topControlsManager) { |
| 780 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager-
>controls_top_offset()); | 775 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager-
>controls_top_offset()); |
| 781 metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon
trolsManager->content_top_offset()); | 776 metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon
trolsManager->content_top_offset()); |
| 782 } | 777 } |
| 783 | 778 |
| 784 if (!rootScrollLayer()) | 779 if (!rootScrollLayer()) |
| 785 return metadata; | 780 return metadata; |
| 786 | 781 |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1042 | 1037 |
| 1043 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con
st gfx::Size& deviceViewportSize) | 1038 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con
st gfx::Size& deviceViewportSize) |
| 1044 { | 1039 { |
| 1045 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de
viceViewportSize) | 1040 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de
viceViewportSize) |
| 1046 return; | 1041 return; |
| 1047 | 1042 |
| 1048 m_layoutViewportSize = layoutViewportSize; | 1043 m_layoutViewportSize = layoutViewportSize; |
| 1049 m_deviceViewportSize = deviceViewportSize; | 1044 m_deviceViewportSize = deviceViewportSize; |
| 1050 | 1045 |
| 1051 m_pinchZoomViewport.set_layout_viewport_size(layoutViewportSize); | 1046 m_pinchZoomViewport.set_layout_viewport_size(layoutViewportSize); |
| 1047 m_pinchZoomViewport.set_device_viewport_size(deviceViewportSize); |
| 1052 | 1048 |
| 1053 updateMaxScrollOffset(); | 1049 updateMaxScrollOffset(); |
| 1054 | 1050 |
| 1055 if (m_renderer) | 1051 if (m_renderer) |
| 1056 m_renderer->viewportChanged(); | 1052 m_renderer->viewportChanged(); |
| 1057 | 1053 |
| 1058 m_client->onCanDrawStateChanged(canDraw()); | 1054 m_client->onCanDrawStateChanged(canDraw()); |
| 1059 } | 1055 } |
| 1060 | 1056 |
| 1061 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal
eChange) | 1057 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal
eChange) |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1398 const float pinchZoomOutSensitivity = 0.95f; | 1394 const float pinchZoomOutSensitivity = 0.95f; |
| 1399 if (m_pinchZoomViewport.page_scale_delta() > pinchZoomOutSensitivity) | 1395 if (m_pinchZoomViewport.page_scale_delta() > pinchZoomOutSensitivity) |
| 1400 return; | 1396 return; |
| 1401 | 1397 |
| 1402 // Compute where the scroll offset/page scale would be if fully pinch-zoomed | 1398 // Compute where the scroll offset/page scale would be if fully pinch-zoomed |
| 1403 // out from the anchor point. | 1399 // out from the anchor point. |
| 1404 gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollL
ayer()->scrollDelta(); | 1400 gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollL
ayer()->scrollDelta(); |
| 1405 scrollBegin.Scale(m_pinchZoomViewport.page_scale_delta()); | 1401 scrollBegin.Scale(m_pinchZoomViewport.page_scale_delta()); |
| 1406 float scaleBegin = m_pinchZoomViewport.total_page_scale_factor(); | 1402 float scaleBegin = m_pinchZoomViewport.total_page_scale_factor(); |
| 1407 float pageScaleDeltaToSend = m_pinchZoomViewport.min_page_scale_factor() / m
_pinchZoomViewport.page_scale_factor(); | 1403 float pageScaleDeltaToSend = m_pinchZoomViewport.min_page_scale_factor() / m
_pinchZoomViewport.page_scale_factor(); |
| 1408 gfx::SizeF scaledContentsSize = gfx::ScaleSize(contentSize(), pageScaleDelta
ToSend); | 1404 gfx::SizeF scaledScrollableSize = gfx::ScaleSize(activeTree()->ScrollableSiz
e(), pageScaleDeltaToSend); |
| 1409 | 1405 |
| 1410 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); | 1406 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); |
| 1411 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; | 1407 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; |
| 1412 scrollEnd.Scale(m_pinchZoomViewport.min_page_scale_factor() / scaleBegin); | 1408 scrollEnd.Scale(m_pinchZoomViewport.min_page_scale_factor() / scaleBegin); |
| 1413 scrollEnd -= anchorOffset; | 1409 scrollEnd -= anchorOffset; |
| 1414 scrollEnd.ClampToMax(gfx::RectF(scaledContentsSize).bottom_right() - gfx::Re
ct(m_deviceViewportSize).bottom_right()); | 1410 scrollEnd.ClampToMax(gfx::RectF(scaledScrollableSize).bottom_right() - gfx::
Rect(m_deviceViewportSize).bottom_right()); |
| 1415 scrollEnd.ClampToMin(gfx::Vector2d()); | 1411 scrollEnd.ClampToMin(gfx::Vector2d()); |
| 1416 scrollEnd.Scale(1 / pageScaleDeltaToSend); | 1412 scrollEnd.Scale(1 / pageScaleDeltaToSend); |
| 1417 scrollEnd.Scale(m_deviceScaleFactor); | 1413 scrollEnd.Scale(m_deviceScaleFactor); |
| 1418 | 1414 |
| 1419 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), m_pinch
ZoomViewport.min_page_scale_factor()); | 1415 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), m_pinch
ZoomViewport.min_page_scale_factor()); |
| 1420 } | 1416 } |
| 1421 | 1417 |
| 1422 void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx
::Vector2d scrollOffset, float pageScale) | 1418 void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx
::Vector2d scrollOffset, float pageScale) |
| 1423 { | 1419 { |
| 1424 if (!rootScrollLayer()) | 1420 if (!rootScrollLayer()) |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1678 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); | 1674 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); |
| 1679 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); | 1675 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); |
| 1680 } | 1676 } |
| 1681 | 1677 |
| 1682 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) | 1678 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) |
| 1683 { | 1679 { |
| 1684 m_paintTimeCounter->SavePaintTime(totalPaintTime); | 1680 m_paintTimeCounter->SavePaintTime(totalPaintTime); |
| 1685 } | 1681 } |
| 1686 | 1682 |
| 1687 } // namespace cc | 1683 } // namespace cc |
| OLD | NEW |