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 |