| 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 "config.h" | 5 #include "config.h" | 
| 6 | 6 | 
| 7 #include "CCLayerTreeHostImpl.h" | 7 #include "CCLayerTreeHostImpl.h" | 
| 8 | 8 | 
| 9 #include "CCAppendQuadsData.h" | 9 #include "CCAppendQuadsData.h" | 
| 10 #include "CCDamageTracker.h" | 10 #include "CCDamageTracker.h" | 
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 140     return overflow; | 140     return overflow; | 
| 141 } | 141 } | 
| 142 | 142 | 
| 143 WebTransformationMatrix CCPinchZoomViewport::implTransform() const | 143 WebTransformationMatrix CCPinchZoomViewport::implTransform() const | 
| 144 { | 144 { | 
| 145     WebTransformationMatrix transform; | 145     WebTransformationMatrix transform; | 
| 146     transform.scale(m_pageScaleDelta); | 146     transform.scale(m_pageScaleDelta); | 
| 147 | 147 | 
| 148     // If the pinch state is applied in the impl, then push it to the | 148     // If the pinch state is applied in the impl, then push it to the | 
| 149     // impl transform, otherwise the scale is handled by WebCore. | 149     // impl transform, otherwise the scale is handled by WebCore. | 
| 150     if (CCSettings::pageScalePinchZoomEnabled()) { | 150     if (Settings::pageScalePinchZoomEnabled()) { | 
| 151         transform.scale(m_pageScaleFactor); | 151         transform.scale(m_pageScaleFactor); | 
| 152         transform.translate(-m_pinchViewportScrollDelta.x(), | 152         transform.translate(-m_pinchViewportScrollDelta.x(), | 
| 153                             -m_pinchViewportScrollDelta.y()); | 153                             -m_pinchViewportScrollDelta.y()); | 
| 154     } | 154     } | 
| 155 | 155 | 
| 156     return transform; | 156     return transform; | 
| 157 } | 157 } | 
| 158 | 158 | 
| 159 class CCLayerTreeHostImplTimeSourceAdapter : public CCTimeSourceClient { | 159 class CCLayerTreeHostImplTimeSourceAdapter : public CCTimeSourceClient { | 
| 160 public: | 160 public: | 
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 433 | 433 | 
| 434                 targetRenderPass->appendQuadsForLayer(*it, &occlusionTracker, ap
      pendQuadsData); | 434                 targetRenderPass->appendQuadsForLayer(*it, &occlusionTracker, ap
      pendQuadsData); | 
| 435             } | 435             } | 
| 436         } | 436         } | 
| 437 | 437 | 
| 438         if (appendQuadsData.hadOcclusionFromOutsideTargetSurface) | 438         if (appendQuadsData.hadOcclusionFromOutsideTargetSurface) | 
| 439             targetRenderPass->setHasOcclusionFromOutsideTargetSurface(true); | 439             targetRenderPass->setHasOcclusionFromOutsideTargetSurface(true); | 
| 440 | 440 | 
| 441         if (appendQuadsData.hadMissingTiles) { | 441         if (appendQuadsData.hadMissingTiles) { | 
| 442             bool layerHasAnimatingTransform = it->screenSpaceTransformIsAnimatin
      g() || it->drawTransformIsAnimating(); | 442             bool layerHasAnimatingTransform = it->screenSpaceTransformIsAnimatin
      g() || it->drawTransformIsAnimating(); | 
| 443             if (layerHasAnimatingTransform || CCSettings::jankInsteadOfCheckerbo
      ard()) | 443             if (layerHasAnimatingTransform || Settings::jankInsteadOfCheckerboar
      d()) | 
| 444                 drawFrame = false; | 444                 drawFrame = false; | 
| 445         } | 445         } | 
| 446 | 446 | 
| 447         occlusionTracker.leaveLayer(it); | 447         occlusionTracker.leaveLayer(it); | 
| 448     } | 448     } | 
| 449 | 449 | 
| 450 #ifndef NDEBUG | 450 #ifndef NDEBUG | 
| 451     for (size_t i = 0; i < frame.renderPasses.size(); ++i) { | 451     for (size_t i = 0; i < frame.renderPasses.size(); ++i) { | 
| 452       for (size_t j = 0; j < frame.renderPasses[i]->quadList().size(); ++j) | 452       for (size_t j = 0; j < frame.renderPasses[i]->quadList().size(); ++j) | 
| 453         DCHECK(frame.renderPasses[i]->quadList()[j]->sharedQuadStateId() >= 0); | 453         DCHECK(frame.renderPasses[i]->quadList()[j]->sharedQuadStateId() >= 0); | 
| (...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 927 } | 927 } | 
| 928 | 928 | 
| 929 void CCLayerTreeHostImpl::setPageScaleFactorAndLimits(float pageScaleFactor, flo
      at minPageScaleFactor, float maxPageScaleFactor) | 929 void CCLayerTreeHostImpl::setPageScaleFactorAndLimits(float pageScaleFactor, flo
      at minPageScaleFactor, float maxPageScaleFactor) | 
| 930 { | 930 { | 
| 931     if (!pageScaleFactor) | 931     if (!pageScaleFactor) | 
| 932       return; | 932       return; | 
| 933 | 933 | 
| 934     float pageScaleChange = pageScaleFactor / m_pinchZoomViewport.pageScaleFacto
      r(); | 934     float pageScaleChange = pageScaleFactor / m_pinchZoomViewport.pageScaleFacto
      r(); | 
| 935     m_pinchZoomViewport.setPageScaleFactorAndLimits(pageScaleFactor, minPageScal
      eFactor, maxPageScaleFactor); | 935     m_pinchZoomViewport.setPageScaleFactorAndLimits(pageScaleFactor, minPageScal
      eFactor, maxPageScaleFactor); | 
| 936 | 936 | 
| 937     if (!CCSettings::pageScalePinchZoomEnabled()) { | 937     if (!Settings::pageScalePinchZoomEnabled()) { | 
| 938         if (pageScaleChange != 1) | 938         if (pageScaleChange != 1) | 
| 939             adjustScrollsForPageScaleChange(m_rootScrollLayerImpl, pageScaleChan
      ge); | 939             adjustScrollsForPageScaleChange(m_rootScrollLayerImpl, pageScaleChan
      ge); | 
| 940     } | 940     } | 
| 941 | 941 | 
| 942     // Clamp delta to limits and refresh display matrix. | 942     // Clamp delta to limits and refresh display matrix. | 
| 943     setPageScaleDelta(m_pinchZoomViewport.pageScaleDelta() / m_pinchZoomViewport
      .sentPageScaleDelta()); | 943     setPageScaleDelta(m_pinchZoomViewport.pageScaleDelta() / m_pinchZoomViewport
      .sentPageScaleDelta()); | 
| 944     m_pinchZoomViewport.setSentPageScaleDelta(1); | 944     m_pinchZoomViewport.setSentPageScaleDelta(1); | 
| 945 } | 945 } | 
| 946 | 946 | 
| 947 void CCLayerTreeHostImpl::setPageScaleDelta(float delta) | 947 void CCLayerTreeHostImpl::setPageScaleDelta(float delta) | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 959     FloatSize viewBounds = m_deviceViewportSize; | 959     FloatSize viewBounds = m_deviceViewportSize; | 
| 960     if (CCLayerImpl* clipLayer = m_rootScrollLayerImpl->parent()) { | 960     if (CCLayerImpl* clipLayer = m_rootScrollLayerImpl->parent()) { | 
| 961         // Compensate for non-overlay scrollbars. | 961         // Compensate for non-overlay scrollbars. | 
| 962         if (clipLayer->masksToBounds()) { | 962         if (clipLayer->masksToBounds()) { | 
| 963             viewBounds = clipLayer->bounds(); | 963             viewBounds = clipLayer->bounds(); | 
| 964             viewBounds.scale(m_deviceScaleFactor); | 964             viewBounds.scale(m_deviceScaleFactor); | 
| 965         } | 965         } | 
| 966     } | 966     } | 
| 967 | 967 | 
| 968     IntSize contentBounds = contentSize(); | 968     IntSize contentBounds = contentSize(); | 
| 969     if (CCSettings::pageScalePinchZoomEnabled()) { | 969     if (Settings::pageScalePinchZoomEnabled()) { | 
| 970         // Pinch with pageScale scrolls entirely in layout space.  contentSize | 970         // Pinch with pageScale scrolls entirely in layout space.  contentSize | 
| 971         // returns the bounds including the page scale factor, so calculate the | 971         // returns the bounds including the page scale factor, so calculate the | 
| 972         // pre page-scale layout size here. | 972         // pre page-scale layout size here. | 
| 973         float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor(); | 973         float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor(); | 
| 974         contentBounds.setWidth(contentBounds.width() / pageScaleFactor); | 974         contentBounds.setWidth(contentBounds.width() / pageScaleFactor); | 
| 975         contentBounds.setHeight(contentBounds.height() / pageScaleFactor); | 975         contentBounds.setHeight(contentBounds.height() / pageScaleFactor); | 
| 976     } else { | 976     } else { | 
| 977         viewBounds.scale(1 / m_pinchZoomViewport.pageScaleDelta()); | 977         viewBounds.scale(1 / m_pinchZoomViewport.pageScaleDelta()); | 
| 978     } | 978     } | 
| 979 | 979 | 
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1195     float pageScaleDelta = m_pinchZoomViewport.pageScaleDelta(); | 1195     float pageScaleDelta = m_pinchZoomViewport.pageScaleDelta(); | 
| 1196     FloatPoint previousScaleAnchor(m_previousPinchAnchor.x() / pageScaleDelta, | 1196     FloatPoint previousScaleAnchor(m_previousPinchAnchor.x() / pageScaleDelta, | 
| 1197                                    m_previousPinchAnchor.y() / pageScaleDelta); | 1197                                    m_previousPinchAnchor.y() / pageScaleDelta); | 
| 1198     setPageScaleDelta(pageScaleDelta * magnifyDelta); | 1198     setPageScaleDelta(pageScaleDelta * magnifyDelta); | 
| 1199     pageScaleDelta = m_pinchZoomViewport.pageScaleDelta(); | 1199     pageScaleDelta = m_pinchZoomViewport.pageScaleDelta(); | 
| 1200     FloatPoint newScaleAnchor(anchor.x() / pageScaleDelta, anchor.y() / pageScal
      eDelta); | 1200     FloatPoint newScaleAnchor(anchor.x() / pageScaleDelta, anchor.y() / pageScal
      eDelta); | 
| 1201     FloatSize move = previousScaleAnchor - newScaleAnchor; | 1201     FloatSize move = previousScaleAnchor - newScaleAnchor; | 
| 1202 | 1202 | 
| 1203     m_previousPinchAnchor = anchor; | 1203     m_previousPinchAnchor = anchor; | 
| 1204 | 1204 | 
| 1205     if (CCSettings::pageScalePinchZoomEnabled()) { | 1205     if (Settings::pageScalePinchZoomEnabled()) { | 
| 1206         // Compute the application of the delta with respect to the current page
       zoom of the page. | 1206         // Compute the application of the delta with respect to the current page
       zoom of the page. | 
| 1207         move.scale(1 / (m_pinchZoomViewport.pageScaleFactor() * m_deviceScaleFac
      tor)); | 1207         move.scale(1 / (m_pinchZoomViewport.pageScaleFactor() * m_deviceScaleFac
      tor)); | 
| 1208     } | 1208     } | 
| 1209 | 1209 | 
| 1210     FloatSize scrollOverflow = CCSettings::pageScalePinchZoomEnabled() ? m_pinch
      ZoomViewport.applyScroll(move) : move; | 1210     FloatSize scrollOverflow = Settings::pageScalePinchZoomEnabled() ? m_pinchZo
      omViewport.applyScroll(move) : move; | 
| 1211     m_rootScrollLayerImpl->scrollBy(roundedIntSize(scrollOverflow)); | 1211     m_rootScrollLayerImpl->scrollBy(roundedIntSize(scrollOverflow)); | 
| 1212 | 1212 | 
| 1213     if (m_rootScrollLayerImpl->scrollbarAnimationController()) | 1213     if (m_rootScrollLayerImpl->scrollbarAnimationController()) | 
| 1214         m_rootScrollLayerImpl->scrollbarAnimationController()->didPinchGestureUp
      date(); | 1214         m_rootScrollLayerImpl->scrollbarAnimationController()->didPinchGestureUp
      date(); | 
| 1215 | 1215 | 
| 1216     m_client->setNeedsCommitOnImplThread(); | 1216     m_client->setNeedsCommitOnImplThread(); | 
| 1217     m_client->setNeedsRedrawOnImplThread(); | 1217     m_client->setNeedsRedrawOnImplThread(); | 
| 1218 } | 1218 } | 
| 1219 | 1219 | 
| 1220 void CCLayerTreeHostImpl::pinchGestureEnd() | 1220 void CCLayerTreeHostImpl::pinchGestureEnd() | 
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1301 | 1301 | 
| 1302 scoped_ptr<CCScrollAndScaleSet> CCLayerTreeHostImpl::processScrollDeltas() | 1302 scoped_ptr<CCScrollAndScaleSet> CCLayerTreeHostImpl::processScrollDeltas() | 
| 1303 { | 1303 { | 
| 1304     scoped_ptr<CCScrollAndScaleSet> scrollInfo(new CCScrollAndScaleSet()); | 1304     scoped_ptr<CCScrollAndScaleSet> scrollInfo(new CCScrollAndScaleSet()); | 
| 1305 | 1305 | 
| 1306     if (m_pinchGestureActive || m_pageScaleAnimation) { | 1306     if (m_pinchGestureActive || m_pageScaleAnimation) { | 
| 1307         scrollInfo->pageScaleDelta = 1; | 1307         scrollInfo->pageScaleDelta = 1; | 
| 1308         m_pinchZoomViewport.setSentPageScaleDelta(1); | 1308         m_pinchZoomViewport.setSentPageScaleDelta(1); | 
| 1309         // FIXME(aelias): Make these painting optimizations compatible with | 1309         // FIXME(aelias): Make these painting optimizations compatible with | 
| 1310         // compositor-side scaling. | 1310         // compositor-side scaling. | 
| 1311         if (!CCSettings::pageScalePinchZoomEnabled()) { | 1311         if (!Settings::pageScalePinchZoomEnabled()) { | 
| 1312             if (m_pinchGestureActive) | 1312             if (m_pinchGestureActive) | 
| 1313                 computePinchZoomDeltas(scrollInfo.get()); | 1313                 computePinchZoomDeltas(scrollInfo.get()); | 
| 1314             else if (m_pageScaleAnimation.get()) | 1314             else if (m_pageScaleAnimation.get()) | 
| 1315                 computeDoubleTapZoomDeltas(scrollInfo.get()); | 1315                 computeDoubleTapZoomDeltas(scrollInfo.get()); | 
| 1316         } | 1316         } | 
| 1317         return scrollInfo.Pass(); | 1317         return scrollInfo.Pass(); | 
| 1318     } | 1318     } | 
| 1319 | 1319 | 
| 1320     collectScrollDeltas(scrollInfo.get(), m_rootLayerImpl.get()); | 1320     collectScrollDeltas(scrollInfo.get(), m_rootLayerImpl.get()); | 
| 1321     scrollInfo->pageScaleDelta = m_pinchZoomViewport.pageScaleDelta(); | 1321     scrollInfo->pageScaleDelta = m_pinchZoomViewport.pageScaleDelta(); | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 1352     m_client->setNeedsRedrawOnImplThread(); | 1352     m_client->setNeedsRedrawOnImplThread(); | 
| 1353 | 1353 | 
| 1354     if (m_pageScaleAnimation->isAnimationCompleteAtTime(monotonicTime)) { | 1354     if (m_pageScaleAnimation->isAnimationCompleteAtTime(monotonicTime)) { | 
| 1355         m_pageScaleAnimation.reset(); | 1355         m_pageScaleAnimation.reset(); | 
| 1356         m_client->setNeedsCommitOnImplThread(); | 1356         m_client->setNeedsCommitOnImplThread(); | 
| 1357     } | 1357     } | 
| 1358 } | 1358 } | 
| 1359 | 1359 | 
| 1360 void CCLayerTreeHostImpl::animateLayers(double monotonicTime, double wallClockTi
      me) | 1360 void CCLayerTreeHostImpl::animateLayers(double monotonicTime, double wallClockTi
      me) | 
| 1361 { | 1361 { | 
| 1362     if (!CCSettings::acceleratedAnimationEnabled() || !m_needsAnimateLayers || !
      m_rootLayerImpl) | 1362     if (!Settings::acceleratedAnimationEnabled() || !m_needsAnimateLayers || !m_
      rootLayerImpl) | 
| 1363         return; | 1363         return; | 
| 1364 | 1364 | 
| 1365     TRACE_EVENT0("cc", "CCLayerTreeHostImpl::animateLayers"); | 1365     TRACE_EVENT0("cc", "CCLayerTreeHostImpl::animateLayers"); | 
| 1366 | 1366 | 
| 1367     scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEv
      entsVector)); | 1367     scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEv
      entsVector)); | 
| 1368 | 1368 | 
| 1369     bool didAnimate = false; | 1369     bool didAnimate = false; | 
| 1370     animateLayersRecursive(m_rootLayerImpl.get(), monotonicTime, wallClockTime, 
      events.get(), didAnimate, m_needsAnimateLayers); | 1370     animateLayersRecursive(m_rootLayerImpl.get(), monotonicTime, wallClockTime, 
      events.get(), didAnimate, m_needsAnimateLayers); | 
| 1371 | 1371 | 
| 1372     if (!events->empty()) | 1372     if (!events->empty()) | 
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1454 | 1454 | 
| 1455     CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat
      ionController(); | 1455     CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat
      ionController(); | 
| 1456     if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1456     if (scrollbarController && scrollbarController->animate(monotonicTime)) | 
| 1457         m_client->setNeedsRedrawOnImplThread(); | 1457         m_client->setNeedsRedrawOnImplThread(); | 
| 1458 | 1458 | 
| 1459     for (size_t i = 0; i < layer->children().size(); ++i) | 1459     for (size_t i = 0; i < layer->children().size(); ++i) | 
| 1460         animateScrollbarsRecursive(layer->children()[i], monotonicTime); | 1460         animateScrollbarsRecursive(layer->children()[i], monotonicTime); | 
| 1461 } | 1461 } | 
| 1462 | 1462 | 
| 1463 }  // namespace cc | 1463 }  // namespace cc | 
| OLD | NEW | 
|---|