| 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 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 return; | 538 return; |
| 539 | 539 |
| 540 const RenderPass* removedPass = *toRemove; | 540 const RenderPass* removedPass = *toRemove; |
| 541 frame.renderPasses.erase(toRemove); | 541 frame.renderPasses.erase(toRemove); |
| 542 | 542 |
| 543 // Now follow up for all RenderPass quads and remove their RenderPasses recu
rsively. | 543 // Now follow up for all RenderPass quads and remove their RenderPasses recu
rsively. |
| 544 const QuadList& quadList = removedPass->quadList(); | 544 const QuadList& quadList = removedPass->quadList(); |
| 545 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe
gin(); | 545 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe
gin(); |
| 546 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { | 546 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { |
| 547 DrawQuad* currentQuad = (*quadListIterator); | 547 DrawQuad* currentQuad = (*quadListIterator); |
| 548 if (currentQuad->material() != DrawQuad::RenderPass) | 548 if (currentQuad->material() != DrawQuad::RENDER_PASS) |
| 549 continue; | 549 continue; |
| 550 | 550 |
| 551 RenderPass::Id nextRemoveRenderPassId = RenderPassDrawQuad::materialCast
(currentQuad)->renderPassId(); | 551 RenderPass::Id nextRemoveRenderPassId = RenderPassDrawQuad::materialCast
(currentQuad)->renderPassId(); |
| 552 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); | 552 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); |
| 553 } | 553 } |
| 554 } | 554 } |
| 555 | 555 |
| 556 bool LayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPa
ss(const RenderPassDrawQuad& quad, const FrameData&) const | 556 bool LayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPa
ss(const RenderPassDrawQuad& quad, const FrameData&) const |
| 557 { | 557 { |
| 558 return quad.contentsChangedSinceLastFrame().IsEmpty() && m_renderer.haveCach
edResourcesForRenderPassId(quad.renderPassId()); | 558 return quad.contentsChangedSinceLastFrame().IsEmpty() && m_renderer.haveCach
edResourcesForRenderPassId(quad.renderPassId()); |
| 559 } | 559 } |
| 560 | 560 |
| 561 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(cons
t RenderPassDrawQuad& quad, const FrameData& frame) const | 561 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(cons
t RenderPassDrawQuad& quad, const FrameData& frame) const |
| 562 { | 562 { |
| 563 const RenderPass* renderPass = findRenderPassById(quad.renderPassId(), frame
); | 563 const RenderPass* renderPass = findRenderPassById(quad.renderPassId(), frame
); |
| 564 const RenderPassList& renderPasses = frame.renderPasses; | 564 const RenderPassList& renderPasses = frame.renderPasses; |
| 565 RenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), r
enderPasses.end(), renderPass); | 565 RenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), r
enderPasses.end(), renderPass); |
| 566 | 566 |
| 567 bool renderPassAlreadyRemoved = foundPass == renderPasses.end(); | 567 bool renderPassAlreadyRemoved = foundPass == renderPasses.end(); |
| 568 if (renderPassAlreadyRemoved) | 568 if (renderPassAlreadyRemoved) |
| 569 return false; | 569 return false; |
| 570 | 570 |
| 571 // If any quad or RenderPass draws into this RenderPass, then keep it. | 571 // If any quad or RenderPass draws into this RenderPass, then keep it. |
| 572 const QuadList& quadList = (*foundPass)->quadList(); | 572 const QuadList& quadList = (*foundPass)->quadList(); |
| 573 for (QuadList::constBackToFrontIterator quadListIterator = quadList.backToFr
ontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { | 573 for (QuadList::constBackToFrontIterator quadListIterator = quadList.backToFr
ontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { |
| 574 DrawQuad* currentQuad = *quadListIterator; | 574 DrawQuad* currentQuad = *quadListIterator; |
| 575 | 575 |
| 576 if (currentQuad->material() != DrawQuad::RenderPass) | 576 if (currentQuad->material() != DrawQuad::RENDER_PASS) |
| 577 return false; | 577 return false; |
| 578 | 578 |
| 579 const RenderPass* contributingPass = findRenderPassById(RenderPassDrawQu
ad::materialCast(currentQuad)->renderPassId(), frame); | 579 const RenderPass* contributingPass = findRenderPassById(RenderPassDrawQu
ad::materialCast(currentQuad)->renderPassId(), frame); |
| 580 RenderPassList::const_iterator foundContributingPass = std::find(renderP
asses.begin(), renderPasses.end(), contributingPass); | 580 RenderPassList::const_iterator foundContributingPass = std::find(renderP
asses.begin(), renderPasses.end(), contributingPass); |
| 581 if (foundContributingPass != renderPasses.end()) | 581 if (foundContributingPass != renderPasses.end()) |
| 582 return false; | 582 return false; |
| 583 } | 583 } |
| 584 return true; | 584 return true; |
| 585 } | 585 } |
| 586 | 586 |
| 587 // Defined for linking tests. | 587 // Defined for linking tests. |
| 588 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl:
:CullRenderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameDa
ta&); | 588 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl:
:CullRenderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameDa
ta&); |
| 589 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl:
:CullRenderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); | 589 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl:
:CullRenderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); |
| 590 | 590 |
| 591 // static | 591 // static |
| 592 template<typename RenderPassCuller> | 592 template<typename RenderPassCuller> |
| 593 void LayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& f
rame) | 593 void LayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& f
rame) |
| 594 { | 594 { |
| 595 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle
r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) { | 595 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle
r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) { |
| 596 const RenderPass* currentPass = frame.renderPasses[it]; | 596 const RenderPass* currentPass = frame.renderPasses[it]; |
| 597 const QuadList& quadList = currentPass->quadList(); | 597 const QuadList& quadList = currentPass->quadList(); |
| 598 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFro
ntBegin(); | 598 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFro
ntBegin(); |
| 599 | 599 |
| 600 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator
) { | 600 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator
) { |
| 601 DrawQuad* currentQuad = *quadListIterator; | 601 DrawQuad* currentQuad = *quadListIterator; |
| 602 | 602 |
| 603 if (currentQuad->material() != DrawQuad::RenderPass) | 603 if (currentQuad->material() != DrawQuad::RENDER_PASS) |
| 604 continue; | 604 continue; |
| 605 | 605 |
| 606 RenderPassDrawQuad* renderPassQuad = static_cast<RenderPassDrawQuad*
>(currentQuad); | 606 RenderPassDrawQuad* renderPassQuad = static_cast<RenderPassDrawQuad*
>(currentQuad); |
| 607 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame)) | 607 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame)) |
| 608 continue; | 608 continue; |
| 609 | 609 |
| 610 // We are changing the vector in the middle of iteration. Because we | 610 // We are changing the vector in the middle of iteration. Because we |
| 611 // delete render passes that draw into the current pass, we are | 611 // delete render passes that draw into the current pass, we are |
| 612 // guaranteed that any data from the iterator to the end will not | 612 // guaranteed that any data from the iterator to the end will not |
| 613 // change. So, capture the iterator position from the end of the | 613 // change. So, capture the iterator position from the end of the |
| (...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1492 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); | 1492 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); |
| 1493 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); | 1493 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
| 1494 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1494 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
| 1495 m_client->setNeedsRedrawOnImplThread(); | 1495 m_client->setNeedsRedrawOnImplThread(); |
| 1496 | 1496 |
| 1497 for (size_t i = 0; i < layer->children().size(); ++i) | 1497 for (size_t i = 0; i < layer->children().size(); ++i) |
| 1498 animateScrollbarsRecursive(layer->children()[i], time); | 1498 animateScrollbarsRecursive(layer->children()[i], time); |
| 1499 } | 1499 } |
| 1500 | 1500 |
| 1501 } // namespace cc | 1501 } // namespace cc |
| OLD | NEW |