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

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: Delete maxScrollOffsetChangedByDeviceScaleFactor test 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 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698