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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11618026: Move filters to RenderPassDrawQuad (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years 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 | Annotate | Revision Log
« no previous file with comments | « cc/gl_renderer_unittest.cc ('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 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 403
404 { 404 {
405 TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc"); 405 TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc");
406 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor(); 406 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
407 LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewport Size(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureS ize, m_settings.canUseLCDText, m_renderSurfaceLayerList); 407 LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewport Size(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureS ize, m_settings.canUseLCDText, m_renderSurfaceLayerList);
408 } 408 }
409 } 409 }
410 410
411 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass) 411 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass)
412 { 412 {
413 RenderPass* pass = renderPass.get(); 413 renderPassesById[renderPass->id] = renderPass.get();
414 renderPasses.push_back(pass); 414 renderPasses.append(renderPass.Pass());
415 renderPassesById.set(pass->id, renderPass.Pass());
416 } 415 }
417 416
418 static void appendQuadsForLayer(RenderPass* targetRenderPass, LayerImpl* layer, OcclusionTrackerImpl& occlusionTracker, AppendQuadsData& appendQuadsData) 417 static void appendQuadsForLayer(RenderPass* targetRenderPass, LayerImpl* layer, OcclusionTrackerImpl& occlusionTracker, AppendQuadsData& appendQuadsData)
419 { 418 {
420 bool forSurface = false; 419 bool forSurface = false;
421 QuadCuller quadCuller(targetRenderPass->quad_list, 420 QuadCuller quadCuller(targetRenderPass->quad_list,
422 targetRenderPass->shared_quad_state_list, 421 targetRenderPass->shared_quad_state_list,
423 layer, 422 layer,
424 occlusionTracker, 423 occlusionTracker,
425 layer->showDebugBorders(), 424 layer->showDebugBorders(),
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 // Skip the quad culler and just append the quads directly to avoid 494 // Skip the quad culler and just append the quads directly to avoid
496 // occlusion checks. 495 // occlusion checks.
497 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); 496 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
498 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); 497 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor);
499 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData); 498 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData);
500 } 499 }
501 } 500 }
502 501
503 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) 502 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
504 { 503 {
505 DCHECK(frame.renderPasses.empty()); 504 DCHECK(frame.renderPasses.isEmpty());
506 505
507 updateDrawProperties(); 506 updateDrawProperties();
508 if (!canDraw()) 507 if (!canDraw())
509 return false; 508 return false;
510 509
511 trackDamageForAllSurfaces(rootLayer(), *frame.renderSurfaceLayerList); 510 trackDamageForAllSurfaces(rootLayer(), *frame.renderSurfaceLayerList);
512 511
513 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList ->size())); 512 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList ->size()));
514 513
515 // Create the render passes in dependency order. 514 // Create the render passes in dependency order.
(...skipping 15 matching lines...) Expand all
531 typedef LayerIterator<LayerImpl, std::vector<LayerImpl*>, RenderSurfaceImpl, LayerIteratorActions::FrontToBack> LayerIteratorType; 530 typedef LayerIterator<LayerImpl, std::vector<LayerImpl*>, RenderSurfaceImpl, LayerIteratorActions::FrontToBack> LayerIteratorType;
532 531
533 // Typically when we are missing a texture and use a checkerboard quad, we s till draw the frame. However when the layer being 532 // Typically when we are missing a texture and use a checkerboard quad, we s till draw the frame. However when the layer being
534 // checkerboarded is moving due to an impl-animation, we drop the frame to a void flashing due to the texture suddenly appearing 533 // checkerboarded is moving due to an impl-animation, we drop the frame to a void flashing due to the texture suddenly appearing
535 // in the future. 534 // in the future.
536 bool drawFrame = true; 535 bool drawFrame = true;
537 536
538 LayerIteratorType end = LayerIteratorType::end(frame.renderSurfaceLayerList) ; 537 LayerIteratorType end = LayerIteratorType::end(frame.renderSurfaceLayerList) ;
539 for (LayerIteratorType it = LayerIteratorType::begin(frame.renderSurfaceLaye rList); it != end; ++it) { 538 for (LayerIteratorType it = LayerIteratorType::begin(frame.renderSurfaceLaye rList); it != end; ++it) {
540 RenderPass::Id targetRenderPassId = it.targetRenderSurfaceLayer()->rende rSurface()->renderPassId(); 539 RenderPass::Id targetRenderPassId = it.targetRenderSurfaceLayer()->rende rSurface()->renderPassId();
541 RenderPass* targetRenderPass = frame.renderPassesById.get(targetRenderPa ssId); 540 RenderPass* targetRenderPass = frame.renderPassesById[targetRenderPassId ];
542 541
543 occlusionTracker.enterLayer(it); 542 occlusionTracker.enterLayer(it);
544 543
545 AppendQuadsData appendQuadsData(targetRenderPass->id); 544 AppendQuadsData appendQuadsData(targetRenderPass->id);
546 545
547 if (it.representsContributingRenderSurface()) { 546 if (it.representsContributingRenderSurface()) {
548 RenderPass::Id contributingRenderPassId = it->renderSurface()->rende rPassId(); 547 RenderPass::Id contributingRenderPassId = it->renderSurface()->rende rPassId();
549 RenderPass* contributingRenderPass = frame.renderPassesById.get(cont ributingRenderPassId); 548 RenderPass* contributingRenderPass = frame.renderPassesById[contribu tingRenderPassId];
550 appendQuadsForRenderSurfaceLayer(targetRenderPass, *it, contributing RenderPass, occlusionTracker, appendQuadsData); 549 appendQuadsForRenderSurfaceLayer(targetRenderPass, *it, contributing RenderPass, occlusionTracker, appendQuadsData);
551 } else if (it.representsItself() && !it->visibleContentRect().IsEmpty()) { 550 } else if (it.representsItself() && !it->visibleContentRect().IsEmpty()) {
552 bool hasOcclusionFromOutsideTargetSurface; 551 bool hasOcclusionFromOutsideTargetSurface;
553 bool implDrawTransformIsUnknown = false; 552 bool implDrawTransformIsUnknown = false;
554 if (occlusionTracker.occluded(it->renderTarget(), it->visibleContent Rect(), it->drawTransform(), implDrawTransformIsUnknown, it->drawableContentRect (), &hasOcclusionFromOutsideTargetSurface)) 553 if (occlusionTracker.occluded(it->renderTarget(), it->visibleContent Rect(), it->drawTransform(), implDrawTransformIsUnknown, it->drawableContentRect (), &hasOcclusionFromOutsideTargetSurface))
555 appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclu sionFromOutsideTargetSurface; 554 appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclu sionFromOutsideTargetSurface;
556 else { 555 else {
557 DCHECK_EQ(this->activeTree(), it->layerTreeImpl()); 556 DCHECK_EQ(this->activeTree(), it->layerTreeImpl());
558 it->willDraw(m_resourceProvider.get()); 557 it->willDraw(m_resourceProvider.get());
559 frame.willDrawLayers.push_back(*it); 558 frame.willDrawLayers.push_back(*it);
560 559
561 if (it->hasContributingDelegatedRenderPasses()) { 560 if (it->hasContributingDelegatedRenderPasses()) {
562 RenderPass::Id contributingRenderPassId = it->firstContribut ingRenderPassId(); 561 RenderPass::Id contributingRenderPassId = it->firstContribut ingRenderPassId();
563 while (frame.renderPassesById.contains(contributingRenderPas sId)) { 562 while (frame.renderPassesById.find(contributingRenderPassId) != frame.renderPassesById.end()) {
564 RenderPass* renderPass = frame.renderPassesById.get(cont ributingRenderPassId); 563 RenderPass* renderPass = frame.renderPassesById[contribu tingRenderPassId];
565 564
566 AppendQuadsData appendQuadsData(renderPass->id); 565 AppendQuadsData appendQuadsData(renderPass->id);
567 appendQuadsForLayer(renderPass, *it, occlusionTracker, a ppendQuadsData); 566 appendQuadsForLayer(renderPass, *it, occlusionTracker, a ppendQuadsData);
568 567
569 contributingRenderPassId = it->nextContributingRenderPas sId(contributingRenderPassId); 568 contributingRenderPassId = it->nextContributingRenderPas sId(contributingRenderPassId);
570 } 569 }
571 } 570 }
572 571
573 appendQuadsForLayer(targetRenderPass, *it, occlusionTracker, app endQuadsData); 572 appendQuadsForLayer(targetRenderPass, *it, occlusionTracker, app endQuadsData);
574 } 573 }
(...skipping 11 matching lines...) Expand all
586 drawFrame = false; 585 drawFrame = false;
587 } 586 }
588 587
589 occlusionTracker.leaveLayer(it); 588 occlusionTracker.leaveLayer(it);
590 } 589 }
591 590
592 #ifndef NDEBUG 591 #ifndef NDEBUG
593 for (size_t i = 0; i < frame.renderPasses.size(); ++i) { 592 for (size_t i = 0; i < frame.renderPasses.size(); ++i) {
594 for (size_t j = 0; j < frame.renderPasses[i]->quad_list.size(); ++j) 593 for (size_t j = 0; j < frame.renderPasses[i]->quad_list.size(); ++j)
595 DCHECK(frame.renderPasses[i]->quad_list[j]->shared_quad_state); 594 DCHECK(frame.renderPasses[i]->quad_list[j]->shared_quad_state);
596 DCHECK(frame.renderPassesById.contains(frame.renderPasses[i]->id)); 595 DCHECK(frame.renderPassesById.find(frame.renderPasses[i]->id)
596 != frame.renderPassesById.end());
597 } 597 }
598 #endif 598 #endif
599 599
600 if (!m_hasTransparentBackground) { 600 if (!m_hasTransparentBackground) {
601 frame.renderPasses.back()->has_transparent_background = false; 601 frame.renderPasses.last()->has_transparent_background = false;
602 appendQuadsToFillScreen(frame.renderPasses.back(), rootLayer(), m_backgr oundColor, occlusionTracker); 602 appendQuadsToFillScreen(frame.renderPasses.last(), rootLayer(), m_backgr oundColor, occlusionTracker);
603 } 603 }
604 604
605 if (drawFrame) 605 if (drawFrame)
606 occlusionTracker.overdrawMetrics().recordMetrics(this); 606 occlusionTracker.overdrawMetrics().recordMetrics(this);
607 607
608 removeRenderPasses(CullRenderPassesWithNoQuads(), frame); 608 removeRenderPasses(CullRenderPassesWithNoQuads(), frame);
609 m_renderer->decideRenderPassAllocationsForFrame(frame.renderPasses); 609 m_renderer->decideRenderPassAllocationsForFrame(frame.renderPasses);
610 removeRenderPasses(CullRenderPassesWithCachedTextures(*m_renderer), frame); 610 removeRenderPasses(CullRenderPassesWithCachedTextures(*m_renderer), frame);
611 611
612 return drawFrame; 612 return drawFrame;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 // TODO(aelias): Hardcoding the first child here is weird. Think of 655 // TODO(aelias): Hardcoding the first child here is weird. Think of
656 // a cleaner way to get the contentBounds on the Impl side. 656 // a cleaner way to get the contentBounds on the Impl side.
657 if (!rootScrollLayer() || rootScrollLayer()->children().isEmpty()) 657 if (!rootScrollLayer() || rootScrollLayer()->children().isEmpty())
658 return gfx::Size(); 658 return gfx::Size();
659 return rootScrollLayer()->children()[0]->contentBounds(); 659 return rootScrollLayer()->children()[0]->contentBounds();
660 } 660 }
661 661
662 static inline RenderPass* findRenderPassById(RenderPass::Id renderPassId, const LayerTreeHostImpl::FrameData& frame) 662 static inline RenderPass* findRenderPassById(RenderPass::Id renderPassId, const LayerTreeHostImpl::FrameData& frame)
663 { 663 {
664 RenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(renderP assId); 664 RenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(renderP assId);
665 DCHECK(it != frame.renderPassesById.end()); 665 return it != frame.renderPassesById.end() ? it->second : NULL;
666 return it->second;
667 } 666 }
668 667
669 static void removeRenderPassesRecursive(RenderPass::Id removeRenderPassId, Layer TreeHostImpl::FrameData& frame) 668 static void removeRenderPassesRecursive(RenderPass::Id removeRenderPassId, Layer TreeHostImpl::FrameData& frame)
670 { 669 {
671 RenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, frame) ; 670 RenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, frame) ;
671 // The pass was already removed by another quad - probably the original, and we are the replica.
672 if (!removeRenderPass)
673 return;
672 RenderPassList& renderPasses = frame.renderPasses; 674 RenderPassList& renderPasses = frame.renderPasses;
673 RenderPassList::iterator toRemove = std::find(renderPasses.begin(), renderPa sses.end(), removeRenderPass); 675 RenderPassList::iterator toRemove = std::find(renderPasses.begin(), renderPa sses.end(), removeRenderPass);
674 676
675 // The pass was already removed by another quad - probably the original, and we are the replica. 677 DCHECK(toRemove != renderPasses.end());
676 if (toRemove == renderPasses.end())
677 return;
678 678
679 const RenderPass* removedPass = *toRemove; 679 size_t index = toRemove - renderPasses.begin();
680 frame.renderPasses.erase(toRemove); 680 scoped_ptr<RenderPass> removedPass = renderPasses.take(index);
681 frame.renderPasses.remove(index);
682 frame.renderPassesById.erase(removeRenderPassId);
681 683
682 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively. 684 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively.
683 const QuadList& quadList = removedPass->quad_list; 685 const QuadList& quadList = removedPass->quad_list;
684 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe gin(); 686 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe gin();
685 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 687 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
686 DrawQuad* currentQuad = (*quadListIterator); 688 DrawQuad* currentQuad = (*quadListIterator);
687 if (currentQuad->material != DrawQuad::RENDER_PASS) 689 if (currentQuad->material != DrawQuad::RENDER_PASS)
688 continue; 690 continue;
689 691
690 RenderPass::Id nextRemoveRenderPassId = RenderPassDrawQuad::MaterialCast (currentQuad)->render_pass_id; 692 RenderPass::Id nextRemoveRenderPassId = RenderPassDrawQuad::MaterialCast (currentQuad)->render_pass_id;
(...skipping 10 matching lines...) Expand all
701 TRACE_EVENT0("cc", "CullRenderPassesWithCachedTextures have no texture") ; 703 TRACE_EVENT0("cc", "CullRenderPassesWithCachedTextures have no texture") ;
702 return false; 704 return false;
703 } 705 }
704 TRACE_EVENT0("cc", "CullRenderPassesWithCachedTextures dropped!"); 706 TRACE_EVENT0("cc", "CullRenderPassesWithCachedTextures dropped!");
705 return true; 707 return true;
706 } 708 }
707 709
708 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(cons t RenderPassDrawQuad& quad, const FrameData& frame) const 710 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(cons t RenderPassDrawQuad& quad, const FrameData& frame) const
709 { 711 {
710 const RenderPass* renderPass = findRenderPassById(quad.render_pass_id, frame ); 712 const RenderPass* renderPass = findRenderPassById(quad.render_pass_id, frame );
711 const RenderPassList& renderPasses = frame.renderPasses; 713 if (!renderPass)
712 RenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), r enderPasses.end(), renderPass);
713
714 bool renderPassAlreadyRemoved = foundPass == renderPasses.end();
715 if (renderPassAlreadyRemoved)
716 return false; 714 return false;
717 715
718 // If any quad or RenderPass draws into this RenderPass, then keep it. 716 // If any quad or RenderPass draws into this RenderPass, then keep it.
719 const QuadList& quadList = (*foundPass)->quad_list; 717 const QuadList& quadList = renderPass->quad_list;
720 for (QuadList::constBackToFrontIterator quadListIterator = quadList.backToFr ontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 718 for (QuadList::constBackToFrontIterator quadListIterator = quadList.backToFr ontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
721 DrawQuad* currentQuad = *quadListIterator; 719 DrawQuad* currentQuad = *quadListIterator;
722 720
723 if (currentQuad->material != DrawQuad::RENDER_PASS) 721 if (currentQuad->material != DrawQuad::RENDER_PASS)
724 return false; 722 return false;
725 723
726 const RenderPass* contributingPass = findRenderPassById(RenderPassDrawQu ad::MaterialCast(currentQuad)->render_pass_id, frame); 724 const RenderPass* contributingPass = findRenderPassById(RenderPassDrawQu ad::MaterialCast(currentQuad)->render_pass_id, frame);
727 RenderPassList::const_iterator foundContributingPass = std::find(renderP asses.begin(), renderPasses.end(), contributingPass); 725 if (contributingPass)
728 if (foundContributingPass != renderPasses.end())
729 return false; 726 return false;
730 } 727 }
731 return true; 728 return true;
732 } 729 }
733 730
734 // Defined for linking tests. 731 // Defined for linking tests.
735 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl: :CullRenderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameDa ta&); 732 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl: :CullRenderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameDa ta&);
736 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl: :CullRenderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); 733 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl: :CullRenderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&);
737 734
738 // static 735 // static
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 metadata.root_layer_size.Scale(1 / m_pinchZoomViewport.pageScaleFactor() ); 887 metadata.root_layer_size.Scale(1 / m_pinchZoomViewport.pageScaleFactor() );
891 } 888 }
892 889
893 return metadata; 890 return metadata;
894 } 891 }
895 892
896 void LayerTreeHostImpl::drawLayers(FrameData& frame) 893 void LayerTreeHostImpl::drawLayers(FrameData& frame)
897 { 894 {
898 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); 895 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers");
899 DCHECK(canDraw()); 896 DCHECK(canDraw());
900 DCHECK(!frame.renderPasses.empty()); 897 DCHECK(!frame.renderPasses.isEmpty());
901 898
902 // FIXME: use the frame begin time from the overall compositor scheduler. 899 // FIXME: use the frame begin time from the overall compositor scheduler.
903 // This value is currently inaccessible because it is up in Chromium's 900 // This value is currently inaccessible because it is up in Chromium's
904 // RenderWidget. 901 // RenderWidget.
905 m_fpsCounter->markBeginningOfFrame(base::TimeTicks::Now()); 902 m_fpsCounter->markBeginningOfFrame(base::TimeTicks::Now());
906 903
907 if (m_debugState.showHudRects()) 904 if (m_debugState.showHudRects())
908 m_debugRectHistory->saveDebugRectsForCurrentFrame(rootLayer(), *frame.re nderSurfaceLayerList, frame.occludingScreenSpaceRects, frame.nonOccludingScreenS paceRects, m_debugState); 905 m_debugRectHistory->saveDebugRectsForCurrentFrame(rootLayer(), *frame.re nderSurfaceLayerList, frame.occludingScreenSpaceRects, frame.nonOccludingScreenS paceRects, m_debugState);
909 906
910 // Because the contents of the HUD depend on everything else in the frame, t he contents 907 // Because the contents of the HUD depend on everything else in the frame, t he contents
911 // of its texture are updated as the last thing before the frame is drawn. 908 // of its texture are updated as the last thing before the frame is drawn.
912 if (m_activeTree->hud_layer()) 909 if (m_activeTree->hud_layer())
913 m_activeTree->hud_layer()->updateHudTexture(m_resourceProvider.get()); 910 m_activeTree->hud_layer()->updateHudTexture(m_resourceProvider.get());
914 911
915 m_renderer->drawFrame(frame.renderPasses, frame.renderPassesById); 912 m_renderer->drawFrame(frame.renderPasses);
916
917 // The render passes should be consumed by the renderer. 913 // The render passes should be consumed by the renderer.
918 DCHECK(frame.renderPasses.empty()); 914 DCHECK(frame.renderPasses.isEmpty());
919 DCHECK(frame.renderPassesById.empty()); 915 frame.renderPassesById.clear();
920 916
921 // The next frame should start by assuming nothing has changed, and changes are noted as they occur. 917 // The next frame should start by assuming nothing has changed, and changes are noted as they occur.
922 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++) 918 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++)
923 (*frame.renderSurfaceLayerList)[i]->renderSurface()->damageTracker()->di dDrawDamagedArea(); 919 (*frame.renderSurfaceLayerList)[i]->renderSurface()->damageTracker()->di dDrawDamagedArea();
924 rootLayer()->resetAllChangeTrackingForSubtree(); 920 rootLayer()->resetAllChangeTrackingForSubtree();
925 } 921 }
926 922
927 void LayerTreeHostImpl::didDrawAllLayers(const FrameData& frame) 923 void LayerTreeHostImpl::didDrawAllLayers(const FrameData& frame)
928 { 924 {
929 for (size_t i = 0; i < frame.willDrawLayers.size(); ++i) 925 for (size_t i = 0; i < frame.willDrawLayers.size(); ++i)
(...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after
1730 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); 1726 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController();
1731 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); 1727 double monotonicTime = (time - base::TimeTicks()).InSecondsF();
1732 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1728 if (scrollbarController && scrollbarController->animate(monotonicTime))
1733 m_client->setNeedsRedrawOnImplThread(); 1729 m_client->setNeedsRedrawOnImplThread();
1734 1730
1735 for (size_t i = 0; i < layer->children().size(); ++i) 1731 for (size_t i = 0; i < layer->children().size(); ++i)
1736 animateScrollbarsRecursive(layer->children()[i], time); 1732 animateScrollbarsRecursive(layer->children()[i], time);
1737 } 1733 }
1738 1734
1739 } // namespace cc 1735 } // namespace cc
OLDNEW
« no previous file with comments | « cc/gl_renderer_unittest.cc ('k') | cc/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698