| 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 "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 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 LayerTreeHostCommon::calculateDrawTransforms(m_rootLayerImpl.get(), devi
ceViewportSize(), m_deviceScaleFactor, pageScaleFactor, &m_layerSorter, renderer
Capabilities().maxTextureSize, renderSurfaceLayerList); | 373 LayerTreeHostCommon::calculateDrawTransforms(m_rootLayerImpl.get(), devi
ceViewportSize(), m_deviceScaleFactor, pageScaleFactor, &m_layerSorter, renderer
Capabilities().maxTextureSize, renderSurfaceLayerList); |
| 374 | 374 |
| 375 trackDamageForAllSurfaces(m_rootLayerImpl.get(), renderSurfaceLayerList)
; | 375 trackDamageForAllSurfaces(m_rootLayerImpl.get(), renderSurfaceLayerList)
; |
| 376 } | 376 } |
| 377 } | 377 } |
| 378 | 378 |
| 379 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende
rPass) | 379 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende
rPass) |
| 380 { | 380 { |
| 381 RenderPass* pass = renderPass.get(); | 381 RenderPass* pass = renderPass.get(); |
| 382 renderPasses.push_back(pass); | 382 renderPasses.push_back(pass); |
| 383 renderPassesById.set(pass->id(), renderPass.Pass()); | 383 renderPassesById.set(pass->id, renderPass.Pass()); |
| 384 } | 384 } |
| 385 | 385 |
| 386 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) | 386 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) |
| 387 { | 387 { |
| 388 DCHECK(frame.renderPasses.empty()); | 388 DCHECK(frame.renderPasses.empty()); |
| 389 | 389 |
| 390 calculateRenderSurfaceLayerList(*frame.renderSurfaceLayerList); | 390 calculateRenderSurfaceLayerList(*frame.renderSurfaceLayerList); |
| 391 | 391 |
| 392 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac
eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList
->size())); | 392 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac
eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList
->size())); |
| 393 | 393 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 414 // in the future. | 414 // in the future. |
| 415 bool drawFrame = true; | 415 bool drawFrame = true; |
| 416 | 416 |
| 417 LayerIteratorType end = LayerIteratorType::end(frame.renderSurfaceLayerList)
; | 417 LayerIteratorType end = LayerIteratorType::end(frame.renderSurfaceLayerList)
; |
| 418 for (LayerIteratorType it = LayerIteratorType::begin(frame.renderSurfaceLaye
rList); it != end; ++it) { | 418 for (LayerIteratorType it = LayerIteratorType::begin(frame.renderSurfaceLaye
rList); it != end; ++it) { |
| 419 RenderPass::Id targetRenderPassId = it.targetRenderSurfaceLayer()->rende
rSurface()->renderPassId(); | 419 RenderPass::Id targetRenderPassId = it.targetRenderSurfaceLayer()->rende
rSurface()->renderPassId(); |
| 420 RenderPass* targetRenderPass = frame.renderPassesById.get(targetRenderPa
ssId); | 420 RenderPass* targetRenderPass = frame.renderPassesById.get(targetRenderPa
ssId); |
| 421 | 421 |
| 422 occlusionTracker.enterLayer(it); | 422 occlusionTracker.enterLayer(it); |
| 423 | 423 |
| 424 AppendQuadsData appendQuadsData(targetRenderPass->id()); | 424 AppendQuadsData appendQuadsData(targetRenderPass->id); |
| 425 | 425 |
| 426 if (it.representsContributingRenderSurface()) { | 426 if (it.representsContributingRenderSurface()) { |
| 427 RenderPass::Id contributingRenderPassId = it->renderSurface()->rende
rPassId(); | 427 RenderPass::Id contributingRenderPassId = it->renderSurface()->rende
rPassId(); |
| 428 RenderPass* contributingRenderPass = frame.renderPassesById.get(cont
ributingRenderPassId); | 428 RenderPass* contributingRenderPass = frame.renderPassesById.get(cont
ributingRenderPassId); |
| 429 targetRenderPass->appendQuadsForRenderSurfaceLayer(*it, contributing
RenderPass, &occlusionTracker, appendQuadsData); | 429 targetRenderPass->AppendQuadsForRenderSurfaceLayer(*it, *contributin
gRenderPass, occlusionTracker, appendQuadsData); |
| 430 } else if (it.representsItself() && !it->visibleContentRect().IsEmpty())
{ | 430 } else if (it.representsItself() && !it->visibleContentRect().IsEmpty())
{ |
| 431 bool hasOcclusionFromOutsideTargetSurface; | 431 bool hasOcclusionFromOutsideTargetSurface; |
| 432 bool implDrawTransformIsUnknown = false; | 432 bool implDrawTransformIsUnknown = false; |
| 433 if (occlusionTracker.occluded(it->renderTarget(), it->visibleContent
Rect(), it->drawTransform(), implDrawTransformIsUnknown, it->drawableContentRect
(), &hasOcclusionFromOutsideTargetSurface)) | 433 if (occlusionTracker.occluded(it->renderTarget(), it->visibleContent
Rect(), it->drawTransform(), implDrawTransformIsUnknown, it->drawableContentRect
(), &hasOcclusionFromOutsideTargetSurface)) |
| 434 appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclu
sionFromOutsideTargetSurface; | 434 appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclu
sionFromOutsideTargetSurface; |
| 435 else { | 435 else { |
| 436 it->willDraw(m_resourceProvider.get()); | 436 it->willDraw(m_resourceProvider.get()); |
| 437 frame.willDrawLayers.push_back(*it); | 437 frame.willDrawLayers.push_back(*it); |
| 438 | 438 |
| 439 if (it->hasContributingDelegatedRenderPasses()) { | 439 if (it->hasContributingDelegatedRenderPasses()) { |
| 440 RenderPass::Id contributingRenderPassId = it->firstContribut
ingRenderPassId(); | 440 RenderPass::Id contributingRenderPassId = it->firstContribut
ingRenderPassId(); |
| 441 while (frame.renderPassesById.contains(contributingRenderPas
sId)) { | 441 while (frame.renderPassesById.contains(contributingRenderPas
sId)) { |
| 442 RenderPass* renderPass = frame.renderPassesById.get(cont
ributingRenderPassId); | 442 RenderPass* renderPass = frame.renderPassesById.get(cont
ributingRenderPassId); |
| 443 | 443 |
| 444 AppendQuadsData appendQuadsData(renderPass->id()); | 444 AppendQuadsData appendQuadsData(renderPass->id); |
| 445 renderPass->appendQuadsForLayer(*it, &occlusionTracker,
appendQuadsData); | 445 renderPass->AppendQuadsForLayer(*it, occlusionTracker, a
ppendQuadsData); |
| 446 | 446 |
| 447 contributingRenderPassId = it->nextContributingRenderPas
sId(contributingRenderPassId); | 447 contributingRenderPassId = it->nextContributingRenderPas
sId(contributingRenderPassId); |
| 448 } | 448 } |
| 449 } | 449 } |
| 450 | 450 |
| 451 targetRenderPass->appendQuadsForLayer(*it, &occlusionTracker, ap
pendQuadsData); | 451 targetRenderPass->AppendQuadsForLayer(*it, occlusionTracker, app
endQuadsData); |
| 452 } | 452 } |
| 453 } | 453 } |
| 454 | 454 |
| 455 if (appendQuadsData.hadOcclusionFromOutsideTargetSurface) | 455 if (appendQuadsData.hadOcclusionFromOutsideTargetSurface) |
| 456 targetRenderPass->setHasOcclusionFromOutsideTargetSurface(true); | 456 targetRenderPass->has_occlusion_from_outside_target_surface = true; |
| 457 | 457 |
| 458 if (appendQuadsData.hadMissingTiles) { | 458 if (appendQuadsData.hadMissingTiles) { |
| 459 bool layerHasAnimatingTransform = it->screenSpaceTransformIsAnimatin
g() || it->drawTransformIsAnimating(); | 459 bool layerHasAnimatingTransform = it->screenSpaceTransformIsAnimatin
g() || it->drawTransformIsAnimating(); |
| 460 if (layerHasAnimatingTransform) | 460 if (layerHasAnimatingTransform) |
| 461 drawFrame = false; | 461 drawFrame = false; |
| 462 } | 462 } |
| 463 | 463 |
| 464 occlusionTracker.leaveLayer(it); | 464 occlusionTracker.leaveLayer(it); |
| 465 } | 465 } |
| 466 | 466 |
| 467 #ifndef NDEBUG | 467 #ifndef NDEBUG |
| 468 for (size_t i = 0; i < frame.renderPasses.size(); ++i) { | 468 for (size_t i = 0; i < frame.renderPasses.size(); ++i) { |
| 469 for (size_t j = 0; j < frame.renderPasses[i]->quadList().size(); ++j) | 469 for (size_t j = 0; j < frame.renderPasses[i]->quad_list.size(); ++j) |
| 470 DCHECK(frame.renderPasses[i]->quadList()[j]->shared_quad_state); | 470 DCHECK(frame.renderPasses[i]->quad_list[j]->shared_quad_state); |
| 471 DCHECK(frame.renderPassesById.contains(frame.renderPasses[i]->id())); | 471 DCHECK(frame.renderPassesById.contains(frame.renderPasses[i]->id)); |
| 472 } | 472 } |
| 473 #endif | 473 #endif |
| 474 | 474 |
| 475 if (!m_hasTransparentBackground) { | 475 if (!m_hasTransparentBackground) { |
| 476 frame.renderPasses.back()->setHasTransparentBackground(false); | 476 frame.renderPasses.back()->has_transparent_background = false; |
| 477 frame.renderPasses.back()->appendQuadsToFillScreen(m_rootLayerImpl.get()
, m_backgroundColor, occlusionTracker); | 477 frame.renderPasses.back()->AppendQuadsToFillScreen(m_rootLayerImpl.get()
, m_backgroundColor, occlusionTracker); |
| 478 } | 478 } |
| 479 | 479 |
| 480 if (drawFrame) | 480 if (drawFrame) |
| 481 occlusionTracker.overdrawMetrics().recordMetrics(this); | 481 occlusionTracker.overdrawMetrics().recordMetrics(this); |
| 482 | 482 |
| 483 removeRenderPasses(CullRenderPassesWithNoQuads(), frame); | 483 removeRenderPasses(CullRenderPassesWithNoQuads(), frame); |
| 484 m_renderer->decideRenderPassAllocationsForFrame(frame.renderPasses); | 484 m_renderer->decideRenderPassAllocationsForFrame(frame.renderPasses); |
| 485 removeRenderPasses(CullRenderPassesWithCachedTextures(*m_renderer), frame); | 485 removeRenderPasses(CullRenderPassesWithCachedTextures(*m_renderer), frame); |
| 486 | 486 |
| 487 return drawFrame; | 487 return drawFrame; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 RenderPassList::iterator toRemove = std::find(renderPasses.begin(), renderPa
sses.end(), removeRenderPass); | 548 RenderPassList::iterator toRemove = std::find(renderPasses.begin(), renderPa
sses.end(), removeRenderPass); |
| 549 | 549 |
| 550 // The pass was already removed by another quad - probably the original, and
we are the replica. | 550 // The pass was already removed by another quad - probably the original, and
we are the replica. |
| 551 if (toRemove == renderPasses.end()) | 551 if (toRemove == renderPasses.end()) |
| 552 return; | 552 return; |
| 553 | 553 |
| 554 const RenderPass* removedPass = *toRemove; | 554 const RenderPass* removedPass = *toRemove; |
| 555 frame.renderPasses.erase(toRemove); | 555 frame.renderPasses.erase(toRemove); |
| 556 | 556 |
| 557 // Now follow up for all RenderPass quads and remove their RenderPasses recu
rsively. | 557 // Now follow up for all RenderPass quads and remove their RenderPasses recu
rsively. |
| 558 const QuadList& quadList = removedPass->quadList(); | 558 const QuadList& quadList = removedPass->quad_list; |
| 559 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe
gin(); | 559 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe
gin(); |
| 560 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { | 560 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { |
| 561 DrawQuad* currentQuad = (*quadListIterator); | 561 DrawQuad* currentQuad = (*quadListIterator); |
| 562 if (currentQuad->material != DrawQuad::RENDER_PASS) | 562 if (currentQuad->material != DrawQuad::RENDER_PASS) |
| 563 continue; | 563 continue; |
| 564 | 564 |
| 565 RenderPass::Id nextRemoveRenderPassId = RenderPassDrawQuad::MaterialCast
(currentQuad)->render_pass_id; | 565 RenderPass::Id nextRemoveRenderPassId = RenderPassDrawQuad::MaterialCast
(currentQuad)->render_pass_id; |
| 566 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); | 566 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); |
| 567 } | 567 } |
| 568 } | 568 } |
| 569 | 569 |
| 570 bool LayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPa
ss(const RenderPassDrawQuad& quad, const FrameData&) const | 570 bool LayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPa
ss(const RenderPassDrawQuad& quad, const FrameData&) const |
| 571 { | 571 { |
| 572 return quad.contents_changed_since_last_frame.IsEmpty() && m_renderer.haveCa
chedResourcesForRenderPassId(quad.render_pass_id); | 572 return quad.contents_changed_since_last_frame.IsEmpty() && m_renderer.haveCa
chedResourcesForRenderPassId(quad.render_pass_id); |
| 573 } | 573 } |
| 574 | 574 |
| 575 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(cons
t RenderPassDrawQuad& quad, const FrameData& frame) const | 575 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(cons
t RenderPassDrawQuad& quad, const FrameData& frame) const |
| 576 { | 576 { |
| 577 const RenderPass* renderPass = findRenderPassById(quad.render_pass_id, frame
); | 577 const RenderPass* renderPass = findRenderPassById(quad.render_pass_id, frame
); |
| 578 const RenderPassList& renderPasses = frame.renderPasses; | 578 const RenderPassList& renderPasses = frame.renderPasses; |
| 579 RenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), r
enderPasses.end(), renderPass); | 579 RenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), r
enderPasses.end(), renderPass); |
| 580 | 580 |
| 581 bool renderPassAlreadyRemoved = foundPass == renderPasses.end(); | 581 bool renderPassAlreadyRemoved = foundPass == renderPasses.end(); |
| 582 if (renderPassAlreadyRemoved) | 582 if (renderPassAlreadyRemoved) |
| 583 return false; | 583 return false; |
| 584 | 584 |
| 585 // If any quad or RenderPass draws into this RenderPass, then keep it. | 585 // If any quad or RenderPass draws into this RenderPass, then keep it. |
| 586 const QuadList& quadList = (*foundPass)->quadList(); | 586 const QuadList& quadList = (*foundPass)->quad_list; |
| 587 for (QuadList::constBackToFrontIterator quadListIterator = quadList.backToFr
ontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { | 587 for (QuadList::constBackToFrontIterator quadListIterator = quadList.backToFr
ontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { |
| 588 DrawQuad* currentQuad = *quadListIterator; | 588 DrawQuad* currentQuad = *quadListIterator; |
| 589 | 589 |
| 590 if (currentQuad->material != DrawQuad::RENDER_PASS) | 590 if (currentQuad->material != DrawQuad::RENDER_PASS) |
| 591 return false; | 591 return false; |
| 592 | 592 |
| 593 const RenderPass* contributingPass = findRenderPassById(RenderPassDrawQu
ad::MaterialCast(currentQuad)->render_pass_id, frame); | 593 const RenderPass* contributingPass = findRenderPassById(RenderPassDrawQu
ad::MaterialCast(currentQuad)->render_pass_id, frame); |
| 594 RenderPassList::const_iterator foundContributingPass = std::find(renderP
asses.begin(), renderPasses.end(), contributingPass); | 594 RenderPassList::const_iterator foundContributingPass = std::find(renderP
asses.begin(), renderPasses.end(), contributingPass); |
| 595 if (foundContributingPass != renderPasses.end()) | 595 if (foundContributingPass != renderPasses.end()) |
| 596 return false; | 596 return false; |
| 597 } | 597 } |
| 598 return true; | 598 return true; |
| 599 } | 599 } |
| 600 | 600 |
| 601 // Defined for linking tests. | 601 // Defined for linking tests. |
| 602 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl:
:CullRenderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameDa
ta&); | 602 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl:
:CullRenderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameDa
ta&); |
| 603 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl:
:CullRenderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); | 603 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl:
:CullRenderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); |
| 604 | 604 |
| 605 // static | 605 // static |
| 606 template<typename RenderPassCuller> | 606 template<typename RenderPassCuller> |
| 607 void LayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& f
rame) | 607 void LayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& f
rame) |
| 608 { | 608 { |
| 609 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle
r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) { | 609 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle
r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) { |
| 610 const RenderPass* currentPass = frame.renderPasses[it]; | 610 const RenderPass* currentPass = frame.renderPasses[it]; |
| 611 const QuadList& quadList = currentPass->quadList(); | 611 const QuadList& quadList = currentPass->quad_list; |
| 612 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFro
ntBegin(); | 612 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFro
ntBegin(); |
| 613 | 613 |
| 614 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator
) { | 614 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator
) { |
| 615 DrawQuad* currentQuad = *quadListIterator; | 615 DrawQuad* currentQuad = *quadListIterator; |
| 616 | 616 |
| 617 if (currentQuad->material != DrawQuad::RENDER_PASS) | 617 if (currentQuad->material != DrawQuad::RENDER_PASS) |
| 618 continue; | 618 continue; |
| 619 | 619 |
| 620 RenderPassDrawQuad* renderPassQuad = static_cast<RenderPassDrawQuad*
>(currentQuad); | 620 RenderPassDrawQuad* renderPassQuad = static_cast<RenderPassDrawQuad*
>(currentQuad); |
| 621 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame)) | 621 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame)) |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 714 // Because the contents of the HUD depend on everything else in the frame, t
he contents | 714 // Because the contents of the HUD depend on everything else in the frame, t
he contents |
| 715 // of its texture are updated as the last thing before the frame is drawn. | 715 // of its texture are updated as the last thing before the frame is drawn. |
| 716 if (m_hudLayerImpl) | 716 if (m_hudLayerImpl) |
| 717 m_hudLayerImpl->updateHudTexture(m_resourceProvider.get()); | 717 m_hudLayerImpl->updateHudTexture(m_resourceProvider.get()); |
| 718 | 718 |
| 719 m_renderer->drawFrame(frame.renderPasses, frame.renderPassesById); | 719 m_renderer->drawFrame(frame.renderPasses, frame.renderPassesById); |
| 720 | 720 |
| 721 // Once a RenderPass has been drawn, its damage should be cleared in | 721 // Once a RenderPass has been drawn, its damage should be cleared in |
| 722 // case the RenderPass will be reused next frame. | 722 // case the RenderPass will be reused next frame. |
| 723 for (unsigned int i = 0; i < frame.renderPasses.size(); i++) | 723 for (unsigned int i = 0; i < frame.renderPasses.size(); i++) |
| 724 frame.renderPasses[i]->setDamageRect(gfx::RectF()); | 724 frame.renderPasses[i]->damage_rect = gfx::RectF(); |
| 725 | 725 |
| 726 // The next frame should start by assuming nothing has changed, and changes
are noted as they occur. | 726 // The next frame should start by assuming nothing has changed, and changes
are noted as they occur. |
| 727 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++) | 727 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++) |
| 728 (*frame.renderSurfaceLayerList)[i]->renderSurface()->damageTracker()->di
dDrawDamagedArea(); | 728 (*frame.renderSurfaceLayerList)[i]->renderSurface()->damageTracker()->di
dDrawDamagedArea(); |
| 729 m_rootLayerImpl->resetAllChangeTrackingForSubtree(); | 729 m_rootLayerImpl->resetAllChangeTrackingForSubtree(); |
| 730 } | 730 } |
| 731 | 731 |
| 732 void LayerTreeHostImpl::didDrawAllLayers(const FrameData& frame) | 732 void LayerTreeHostImpl::didDrawAllLayers(const FrameData& frame) |
| 733 { | 733 { |
| 734 for (size_t i = 0; i < frame.willDrawLayers.size(); ++i) | 734 for (size_t i = 0; i < frame.willDrawLayers.size(); ++i) |
| (...skipping 768 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1503 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); | 1503 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); |
| 1504 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); | 1504 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
| 1505 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1505 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
| 1506 m_client->setNeedsRedrawOnImplThread(); | 1506 m_client->setNeedsRedrawOnImplThread(); |
| 1507 | 1507 |
| 1508 for (size_t i = 0; i < layer->children().size(); ++i) | 1508 for (size_t i = 0; i < layer->children().size(); ++i) |
| 1509 animateScrollbarsRecursive(layer->children()[i], time); | 1509 animateScrollbarsRecursive(layer->children()[i], time); |
| 1510 } | 1510 } |
| 1511 | 1511 |
| 1512 } // namespace cc | 1512 } // namespace cc |
| OLD | NEW |