| 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 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 // We animated if we either ticked a running animation, or started a new ani
mation. | 348 // We animated if we either ticked a running animation, or started a new ani
mation. |
| 349 if (hadActiveAnimation || startedAnimation) | 349 if (hadActiveAnimation || startedAnimation) |
| 350 didAnimate = true; | 350 didAnimate = true; |
| 351 | 351 |
| 352 // If the current controller still has an active animation, we must continue
animating layers. | 352 // If the current controller still has an active animation, we must continue
animating layers. |
| 353 if (currentController->hasActiveAnimation()) | 353 if (currentController->hasActiveAnimation()) |
| 354 subtreeNeedsAnimateLayers = true; | 354 subtreeNeedsAnimateLayers = true; |
| 355 | 355 |
| 356 for (size_t i = 0; i < current->children().size(); ++i) { | 356 for (size_t i = 0; i < current->children().size(); ++i) { |
| 357 bool childNeedsAnimateLayers = false; | 357 bool childNeedsAnimateLayers = false; |
| 358 animateLayersRecursive(current->children()[i].get(), monotonicTime, wall
ClockTime, events, didAnimate, childNeedsAnimateLayers); | 358 animateLayersRecursive(current->children()[i], monotonicTime, wallClockT
ime, events, didAnimate, childNeedsAnimateLayers); |
| 359 if (childNeedsAnimateLayers) | 359 if (childNeedsAnimateLayers) |
| 360 subtreeNeedsAnimateLayers = true; | 360 subtreeNeedsAnimateLayers = true; |
| 361 } | 361 } |
| 362 | 362 |
| 363 needsAnimateLayers = subtreeNeedsAnimateLayers; | 363 needsAnimateLayers = subtreeNeedsAnimateLayers; |
| 364 } | 364 } |
| 365 | 365 |
| 366 void CCLayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) | 366 void CCLayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) |
| 367 { | 367 { |
| 368 // Lazily create the timeSource adapter so that we can vary the interval for
testing. | 368 // Lazily create the timeSource adapter so that we can vary the interval for
testing. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 if (removeIndex == notFound) | 401 if (removeIndex == notFound) |
| 402 return; | 402 return; |
| 403 | 403 |
| 404 const CCRenderPass* removedPass = frame.renderPasses[removeIndex]; | 404 const CCRenderPass* removedPass = frame.renderPasses[removeIndex]; |
| 405 frame.renderPasses.remove(removeIndex); | 405 frame.renderPasses.remove(removeIndex); |
| 406 | 406 |
| 407 // Now follow up for all RenderPass quads and remove their RenderPasses recu
rsively. | 407 // Now follow up for all RenderPass quads and remove their RenderPasses recu
rsively. |
| 408 const CCQuadList& quadList = removedPass->quadList(); | 408 const CCQuadList& quadList = removedPass->quadList(); |
| 409 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToFront
Begin(); | 409 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToFront
Begin(); |
| 410 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { | 410 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { |
| 411 CCDrawQuad* currentQuad = (*quadListIterator).get(); | 411 CCDrawQuad* currentQuad = (*quadListIterator); |
| 412 if (currentQuad->material() != CCDrawQuad::RenderPass) | 412 if (currentQuad->material() != CCDrawQuad::RenderPass) |
| 413 continue; | 413 continue; |
| 414 | 414 |
| 415 CCRenderPass::Id nextRemoveRenderPassId = CCRenderPassDrawQuad::material
Cast(currentQuad)->renderPassId(); | 415 CCRenderPass::Id nextRemoveRenderPassId = CCRenderPassDrawQuad::material
Cast(currentQuad)->renderPassId(); |
| 416 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); | 416 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); |
| 417 } | 417 } |
| 418 } | 418 } |
| 419 | 419 |
| 420 bool CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRender
Pass(const CCRenderPassDrawQuad& quad, const FrameData&) const | 420 bool CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRender
Pass(const CCRenderPassDrawQuad& quad, const FrameData&) const |
| 421 { | 421 { |
| 422 return quad.contentsChangedSinceLastFrame().isEmpty() && m_renderer.haveCach
edResourcesForRenderPassId(quad.renderPassId()); | 422 return quad.contentsChangedSinceLastFrame().isEmpty() && m_renderer.haveCach
edResourcesForRenderPassId(quad.renderPassId()); |
| 423 } | 423 } |
| 424 | 424 |
| 425 bool CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(co
nst CCRenderPassDrawQuad& quad, const FrameData& frame) const | 425 bool CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(co
nst CCRenderPassDrawQuad& quad, const FrameData& frame) const |
| 426 { | 426 { |
| 427 const CCRenderPass* renderPass = findRenderPassById(quad.renderPassId(), fra
me); | 427 const CCRenderPass* renderPass = findRenderPassById(quad.renderPassId(), fra
me); |
| 428 size_t passIndex = frame.renderPasses.find(renderPass); | 428 size_t passIndex = frame.renderPasses.find(renderPass); |
| 429 | 429 |
| 430 bool renderPassAlreadyRemoved = passIndex == notFound; | 430 bool renderPassAlreadyRemoved = passIndex == notFound; |
| 431 if (renderPassAlreadyRemoved) | 431 if (renderPassAlreadyRemoved) |
| 432 return false; | 432 return false; |
| 433 | 433 |
| 434 // If any quad or RenderPass draws into this RenderPass, then keep it. | 434 // If any quad or RenderPass draws into this RenderPass, then keep it. |
| 435 const CCQuadList& quadList = frame.renderPasses[passIndex]->quadList(); | 435 const CCQuadList& quadList = frame.renderPasses[passIndex]->quadList(); |
| 436 for (CCQuadList::constBackToFrontIterator quadListIterator = quadList.backTo
FrontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator)
{ | 436 for (CCQuadList::constBackToFrontIterator quadListIterator = quadList.backTo
FrontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator)
{ |
| 437 CCDrawQuad* currentQuad = quadListIterator->get(); | 437 CCDrawQuad* currentQuad = *quadListIterator; |
| 438 | 438 |
| 439 if (currentQuad->material() != CCDrawQuad::RenderPass) | 439 if (currentQuad->material() != CCDrawQuad::RenderPass) |
| 440 return false; | 440 return false; |
| 441 | 441 |
| 442 const CCRenderPass* contributingPass = findRenderPassById(CCRenderPassDr
awQuad::materialCast(currentQuad)->renderPassId(), frame); | 442 const CCRenderPass* contributingPass = findRenderPassById(CCRenderPassDr
awQuad::materialCast(currentQuad)->renderPassId(), frame); |
| 443 if (frame.renderPasses.contains(contributingPass)) | 443 if (frame.renderPasses.contains(contributingPass)) |
| 444 return false; | 444 return false; |
| 445 } | 445 } |
| 446 return true; | 446 return true; |
| 447 } | 447 } |
| 448 | 448 |
| 449 // Defined for linking tests. | 449 // Defined for linking tests. |
| 450 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR
enderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameData&); | 450 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR
enderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameData&); |
| 451 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR
enderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); | 451 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR
enderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); |
| 452 | 452 |
| 453 // static | 453 // static |
| 454 template<typename RenderPassCuller> | 454 template<typename RenderPassCuller> |
| 455 void CCLayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData&
frame) | 455 void CCLayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData&
frame) |
| 456 { | 456 { |
| 457 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle
r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) { | 457 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle
r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) { |
| 458 const CCRenderPass* currentPass = frame.renderPasses[it]; | 458 const CCRenderPass* currentPass = frame.renderPasses[it]; |
| 459 const CCQuadList& quadList = currentPass->quadList(); | 459 const CCQuadList& quadList = currentPass->quadList(); |
| 460 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToF
rontBegin(); | 460 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToF
rontBegin(); |
| 461 | 461 |
| 462 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator
) { | 462 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator
) { |
| 463 CCDrawQuad* currentQuad = quadListIterator->get(); | 463 CCDrawQuad* currentQuad = *quadListIterator; |
| 464 | 464 |
| 465 if (currentQuad->material() != CCDrawQuad::RenderPass) | 465 if (currentQuad->material() != CCDrawQuad::RenderPass) |
| 466 continue; | 466 continue; |
| 467 | 467 |
| 468 CCRenderPassDrawQuad* renderPassQuad = static_cast<CCRenderPassDrawQ
uad*>(currentQuad); | 468 CCRenderPassDrawQuad* renderPassQuad = static_cast<CCRenderPassDrawQ
uad*>(currentQuad); |
| 469 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame)) | 469 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame)) |
| 470 continue; | 470 continue; |
| 471 | 471 |
| 472 // We are changing the vector in the middle of iteration. Because we | 472 // We are changing the vector in the middle of iteration. Because we |
| 473 // delete render passes that draw into the current pass, we are | 473 // delete render passes that draw into the current pass, we are |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 605 | 605 |
| 606 static CCLayerImpl* findRootScrollLayer(CCLayerImpl* layer) | 606 static CCLayerImpl* findRootScrollLayer(CCLayerImpl* layer) |
| 607 { | 607 { |
| 608 if (!layer) | 608 if (!layer) |
| 609 return 0; | 609 return 0; |
| 610 | 610 |
| 611 if (layer->scrollable()) | 611 if (layer->scrollable()) |
| 612 return layer; | 612 return layer; |
| 613 | 613 |
| 614 for (size_t i = 0; i < layer->children().size(); ++i) { | 614 for (size_t i = 0; i < layer->children().size(); ++i) { |
| 615 CCLayerImpl* found = findRootScrollLayer(layer->children()[i].get()); | 615 CCLayerImpl* found = findRootScrollLayer(layer->children()[i]); |
| 616 if (found) | 616 if (found) |
| 617 return found; | 617 return found; |
| 618 } | 618 } |
| 619 | 619 |
| 620 return 0; | 620 return 0; |
| 621 } | 621 } |
| 622 | 622 |
| 623 // Content layers can be either directly scrollable or contained in an outer | 623 // Content layers can be either directly scrollable or contained in an outer |
| 624 // scrolling layer which applies the scroll transform. Given a content layer, | 624 // scrolling layer which applies the scroll transform. Given a content layer, |
| 625 // this function returns the associated scroll layer if any. | 625 // this function returns the associated scroll layer if any. |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 750 return; | 750 return; |
| 751 | 751 |
| 752 if (layerImpl->scrollable()) { | 752 if (layerImpl->scrollable()) { |
| 753 // We need to convert impl-side scroll deltas to pageScale space. | 753 // We need to convert impl-side scroll deltas to pageScale space. |
| 754 FloatSize scrollDelta = layerImpl->scrollDelta(); | 754 FloatSize scrollDelta = layerImpl->scrollDelta(); |
| 755 scrollDelta.scale(pageScaleChange); | 755 scrollDelta.scale(pageScaleChange); |
| 756 layerImpl->setScrollDelta(scrollDelta); | 756 layerImpl->setScrollDelta(scrollDelta); |
| 757 } | 757 } |
| 758 | 758 |
| 759 for (size_t i = 0; i < layerImpl->children().size(); ++i) | 759 for (size_t i = 0; i < layerImpl->children().size(); ++i) |
| 760 adjustScrollsForPageScaleChange(layerImpl->children()[i].get(), pageScal
eChange); | 760 adjustScrollsForPageScaleChange(layerImpl->children()[i], pageScaleChang
e); |
| 761 } | 761 } |
| 762 | 762 |
| 763 void CCLayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor) | 763 void CCLayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor) |
| 764 { | 764 { |
| 765 if (deviceScaleFactor == m_deviceScaleFactor) | 765 if (deviceScaleFactor == m_deviceScaleFactor) |
| 766 return; | 766 return; |
| 767 m_deviceScaleFactor = deviceScaleFactor; | 767 m_deviceScaleFactor = deviceScaleFactor; |
| 768 | 768 |
| 769 updateMaxScrollPosition(); | 769 updateMaxScrollPosition(); |
| 770 } | 770 } |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1121 if (!layerImpl->scrollDelta().isZero()) { | 1121 if (!layerImpl->scrollDelta().isZero()) { |
| 1122 IntSize scrollDelta = flooredIntSize(layerImpl->scrollDelta()); | 1122 IntSize scrollDelta = flooredIntSize(layerImpl->scrollDelta()); |
| 1123 CCLayerTreeHostCommon::ScrollUpdateInfo scroll; | 1123 CCLayerTreeHostCommon::ScrollUpdateInfo scroll; |
| 1124 scroll.layerId = layerImpl->id(); | 1124 scroll.layerId = layerImpl->id(); |
| 1125 scroll.scrollDelta = scrollDelta; | 1125 scroll.scrollDelta = scrollDelta; |
| 1126 scrollInfo->scrolls.append(scroll); | 1126 scrollInfo->scrolls.append(scroll); |
| 1127 layerImpl->setSentScrollDelta(scrollDelta); | 1127 layerImpl->setSentScrollDelta(scrollDelta); |
| 1128 } | 1128 } |
| 1129 | 1129 |
| 1130 for (size_t i = 0; i < layerImpl->children().size(); ++i) | 1130 for (size_t i = 0; i < layerImpl->children().size(); ++i) |
| 1131 collectScrollDeltas(scrollInfo, layerImpl->children()[i].get()); | 1131 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); |
| 1132 } | 1132 } |
| 1133 | 1133 |
| 1134 PassOwnPtr<CCScrollAndScaleSet> CCLayerTreeHostImpl::processScrollDeltas() | 1134 PassOwnPtr<CCScrollAndScaleSet> CCLayerTreeHostImpl::processScrollDeltas() |
| 1135 { | 1135 { |
| 1136 OwnPtr<CCScrollAndScaleSet> scrollInfo = adoptPtr(new CCScrollAndScaleSet())
; | 1136 OwnPtr<CCScrollAndScaleSet> scrollInfo = adoptPtr(new CCScrollAndScaleSet())
; |
| 1137 | 1137 |
| 1138 if (m_pinchGestureActive || m_pageScaleAnimation) { | 1138 if (m_pinchGestureActive || m_pageScaleAnimation) { |
| 1139 m_sentPageScaleDelta = scrollInfo->pageScaleDelta = 1; | 1139 m_sentPageScaleDelta = scrollInfo->pageScaleDelta = 1; |
| 1140 if (m_pinchGestureActive) | 1140 if (m_pinchGestureActive) |
| 1141 computePinchZoomDeltas(scrollInfo.get()); | 1141 computePinchZoomDeltas(scrollInfo.get()); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1206 | 1206 |
| 1207 void CCLayerTreeHostImpl::sendDidLoseContextRecursive(CCLayerImpl* current) | 1207 void CCLayerTreeHostImpl::sendDidLoseContextRecursive(CCLayerImpl* current) |
| 1208 { | 1208 { |
| 1209 ASSERT(current); | 1209 ASSERT(current); |
| 1210 current->didLoseContext(); | 1210 current->didLoseContext(); |
| 1211 if (current->maskLayer()) | 1211 if (current->maskLayer()) |
| 1212 sendDidLoseContextRecursive(current->maskLayer()); | 1212 sendDidLoseContextRecursive(current->maskLayer()); |
| 1213 if (current->replicaLayer()) | 1213 if (current->replicaLayer()) |
| 1214 sendDidLoseContextRecursive(current->replicaLayer()); | 1214 sendDidLoseContextRecursive(current->replicaLayer()); |
| 1215 for (size_t i = 0; i < current->children().size(); ++i) | 1215 for (size_t i = 0; i < current->children().size(); ++i) |
| 1216 sendDidLoseContextRecursive(current->children()[i].get()); | 1216 sendDidLoseContextRecursive(current->children()[i]); |
| 1217 } | 1217 } |
| 1218 | 1218 |
| 1219 static void clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImpl* current) | 1219 static void clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImpl* current) |
| 1220 { | 1220 { |
| 1221 ASSERT(current); | 1221 ASSERT(current); |
| 1222 for (size_t i = 0; i < current->children().size(); ++i) | 1222 for (size_t i = 0; i < current->children().size(); ++i) |
| 1223 clearRenderSurfacesOnCCLayerImplRecursive(current->children()[i].get()); | 1223 clearRenderSurfacesOnCCLayerImplRecursive(current->children()[i]); |
| 1224 current->clearRenderSurface(); | 1224 current->clearRenderSurface(); |
| 1225 } | 1225 } |
| 1226 | 1226 |
| 1227 void CCLayerTreeHostImpl::clearRenderSurfaces() | 1227 void CCLayerTreeHostImpl::clearRenderSurfaces() |
| 1228 { | 1228 { |
| 1229 clearRenderSurfacesOnCCLayerImplRecursive(m_rootLayerImpl.get()); | 1229 clearRenderSurfacesOnCCLayerImplRecursive(m_rootLayerImpl.get()); |
| 1230 m_renderSurfaceLayerList.clear(); | 1230 m_renderSurfaceLayerList.clear(); |
| 1231 } | 1231 } |
| 1232 | 1232 |
| 1233 std::string CCLayerTreeHostImpl::layerTreeAsText() const | 1233 std::string CCLayerTreeHostImpl::layerTreeAsText() const |
| 1234 { | 1234 { |
| 1235 std::string str; | 1235 std::string str; |
| 1236 if (m_rootLayerImpl) { | 1236 if (m_rootLayerImpl) { |
| 1237 str = m_rootLayerImpl->layerTreeAsText(); | 1237 str = m_rootLayerImpl->layerTreeAsText(); |
| 1238 str += "RenderSurfaces:\n"; | 1238 str += "RenderSurfaces:\n"; |
| 1239 dumpRenderSurfaces(&str, 1, m_rootLayerImpl.get()); | 1239 dumpRenderSurfaces(&str, 1, m_rootLayerImpl.get()); |
| 1240 } | 1240 } |
| 1241 return str; | 1241 return str; |
| 1242 } | 1242 } |
| 1243 | 1243 |
| 1244 void CCLayerTreeHostImpl::dumpRenderSurfaces(std::string* str, int indent, const
CCLayerImpl* layer) const | 1244 void CCLayerTreeHostImpl::dumpRenderSurfaces(std::string* str, int indent, const
CCLayerImpl* layer) const |
| 1245 { | 1245 { |
| 1246 if (layer->renderSurface()) | 1246 if (layer->renderSurface()) |
| 1247 layer->renderSurface()->dumpSurface(str, indent); | 1247 layer->renderSurface()->dumpSurface(str, indent); |
| 1248 | 1248 |
| 1249 for (size_t i = 0; i < layer->children().size(); ++i) | 1249 for (size_t i = 0; i < layer->children().size(); ++i) |
| 1250 dumpRenderSurfaces(str, indent, layer->children()[i].get()); | 1250 dumpRenderSurfaces(str, indent, layer->children()[i]); |
| 1251 } | 1251 } |
| 1252 | 1252 |
| 1253 int CCLayerTreeHostImpl::sourceAnimationFrameNumber() const | 1253 int CCLayerTreeHostImpl::sourceAnimationFrameNumber() const |
| 1254 { | 1254 { |
| 1255 return fpsCounter()->currentFrameNumber(); | 1255 return fpsCounter()->currentFrameNumber(); |
| 1256 } | 1256 } |
| 1257 | 1257 |
| 1258 void CCLayerTreeHostImpl::renderingStats(CCRenderingStats& stats) const | 1258 void CCLayerTreeHostImpl::renderingStats(CCRenderingStats& stats) const |
| 1259 { | 1259 { |
| 1260 stats.numFramesSentToScreen = fpsCounter()->currentFrameNumber(); | 1260 stats.numFramesSentToScreen = fpsCounter()->currentFrameNumber(); |
| 1261 stats.droppedFrameCount = fpsCounter()->droppedFrameCount(); | 1261 stats.droppedFrameCount = fpsCounter()->droppedFrameCount(); |
| 1262 } | 1262 } |
| 1263 | 1263 |
| 1264 void CCLayerTreeHostImpl::animateScrollbars(double monotonicTime) | 1264 void CCLayerTreeHostImpl::animateScrollbars(double monotonicTime) |
| 1265 { | 1265 { |
| 1266 animateScrollbarsRecursive(m_rootLayerImpl.get(), monotonicTime); | 1266 animateScrollbarsRecursive(m_rootLayerImpl.get(), monotonicTime); |
| 1267 } | 1267 } |
| 1268 | 1268 |
| 1269 void CCLayerTreeHostImpl::animateScrollbarsRecursive(CCLayerImpl* layer, double
monotonicTime) | 1269 void CCLayerTreeHostImpl::animateScrollbarsRecursive(CCLayerImpl* layer, double
monotonicTime) |
| 1270 { | 1270 { |
| 1271 if (!layer) | 1271 if (!layer) |
| 1272 return; | 1272 return; |
| 1273 | 1273 |
| 1274 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat
ionController(); | 1274 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat
ionController(); |
| 1275 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1275 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
| 1276 m_client->setNeedsRedrawOnImplThread(); | 1276 m_client->setNeedsRedrawOnImplThread(); |
| 1277 | 1277 |
| 1278 for (size_t i = 0; i < layer->children().size(); ++i) | 1278 for (size_t i = 0; i < layer->children().size(); ++i) |
| 1279 animateScrollbarsRecursive(layer->children()[i].get(), monotonicTime); | 1279 animateScrollbarsRecursive(layer->children()[i], monotonicTime); |
| 1280 } | 1280 } |
| 1281 | 1281 |
| 1282 } // namespace cc | 1282 } // namespace cc |
| OLD | NEW |