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

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: Rebase to 177887 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
« no previous file with comments | « cc/layer_tree_host_impl.h ('k') | cc/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
« no previous file with comments | « cc/layer_tree_host_impl.h ('k') | cc/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698