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