Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1043)

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11958004: Make new-style page scale work on Android. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: 80-col limit Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698