| 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 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 frame.renderPasses.erase(toRemove); | 557 frame.renderPasses.erase(toRemove); |
| 558 | 558 |
| 559 // Now follow up for all RenderPass quads and remove their RenderPasses recu
rsively. | 559 // Now follow up for all RenderPass quads and remove their RenderPasses recu
rsively. |
| 560 const QuadList& quadList = removedPass->quadList(); | 560 const QuadList& quadList = removedPass->quadList(); |
| 561 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe
gin(); | 561 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe
gin(); |
| 562 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { | 562 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { |
| 563 DrawQuad* currentQuad = (*quadListIterator); | 563 DrawQuad* currentQuad = (*quadListIterator); |
| 564 if (currentQuad->material != DrawQuad::RENDER_PASS) | 564 if (currentQuad->material != DrawQuad::RENDER_PASS) |
| 565 continue; | 565 continue; |
| 566 | 566 |
| 567 RenderPass::Id nextRemoveRenderPassId = RenderPassDrawQuad::materialCast
(currentQuad)->renderPassId(); | 567 RenderPass::Id nextRemoveRenderPassId = RenderPassDrawQuad::MaterialCast
(currentQuad)->render_pass_id; |
| 568 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); | 568 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); |
| 569 } | 569 } |
| 570 } | 570 } |
| 571 | 571 |
| 572 bool LayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPa
ss(const RenderPassDrawQuad& quad, const FrameData&) const | 572 bool LayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPa
ss(const RenderPassDrawQuad& quad, const FrameData&) const |
| 573 { | 573 { |
| 574 return quad.contentsChangedSinceLastFrame().IsEmpty() && m_renderer.haveCach
edResourcesForRenderPassId(quad.renderPassId()); | 574 return quad.contents_changed_since_last_frame.IsEmpty() && m_renderer.haveCa
chedResourcesForRenderPassId(quad.render_pass_id); |
| 575 } | 575 } |
| 576 | 576 |
| 577 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(cons
t RenderPassDrawQuad& quad, const FrameData& frame) const | 577 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(cons
t RenderPassDrawQuad& quad, const FrameData& frame) const |
| 578 { | 578 { |
| 579 const RenderPass* renderPass = findRenderPassById(quad.renderPassId(), frame
); | 579 const RenderPass* renderPass = findRenderPassById(quad.render_pass_id, frame
); |
| 580 const RenderPassList& renderPasses = frame.renderPasses; | 580 const RenderPassList& renderPasses = frame.renderPasses; |
| 581 RenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), r
enderPasses.end(), renderPass); | 581 RenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), r
enderPasses.end(), renderPass); |
| 582 | 582 |
| 583 bool renderPassAlreadyRemoved = foundPass == renderPasses.end(); | 583 bool renderPassAlreadyRemoved = foundPass == renderPasses.end(); |
| 584 if (renderPassAlreadyRemoved) | 584 if (renderPassAlreadyRemoved) |
| 585 return false; | 585 return false; |
| 586 | 586 |
| 587 // If any quad or RenderPass draws into this RenderPass, then keep it. | 587 // If any quad or RenderPass draws into this RenderPass, then keep it. |
| 588 const QuadList& quadList = (*foundPass)->quadList(); | 588 const QuadList& quadList = (*foundPass)->quadList(); |
| 589 for (QuadList::constBackToFrontIterator quadListIterator = quadList.backToFr
ontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { | 589 for (QuadList::constBackToFrontIterator quadListIterator = quadList.backToFr
ontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { |
| 590 DrawQuad* currentQuad = *quadListIterator; | 590 DrawQuad* currentQuad = *quadListIterator; |
| 591 | 591 |
| 592 if (currentQuad->material != DrawQuad::RENDER_PASS) | 592 if (currentQuad->material != DrawQuad::RENDER_PASS) |
| 593 return false; | 593 return false; |
| 594 | 594 |
| 595 const RenderPass* contributingPass = findRenderPassById(RenderPassDrawQu
ad::materialCast(currentQuad)->renderPassId(), frame); | 595 const RenderPass* contributingPass = findRenderPassById(RenderPassDrawQu
ad::MaterialCast(currentQuad)->render_pass_id, frame); |
| 596 RenderPassList::const_iterator foundContributingPass = std::find(renderP
asses.begin(), renderPasses.end(), contributingPass); | 596 RenderPassList::const_iterator foundContributingPass = std::find(renderP
asses.begin(), renderPasses.end(), contributingPass); |
| 597 if (foundContributingPass != renderPasses.end()) | 597 if (foundContributingPass != renderPasses.end()) |
| 598 return false; | 598 return false; |
| 599 } | 599 } |
| 600 return true; | 600 return true; |
| 601 } | 601 } |
| 602 | 602 |
| 603 // Defined for linking tests. | 603 // Defined for linking tests. |
| 604 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl:
:CullRenderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameDa
ta&); | 604 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl:
:CullRenderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameDa
ta&); |
| 605 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl:
:CullRenderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); | 605 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl:
:CullRenderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 622 RenderPassDrawQuad* renderPassQuad = static_cast<RenderPassDrawQuad*
>(currentQuad); | 622 RenderPassDrawQuad* renderPassQuad = static_cast<RenderPassDrawQuad*
>(currentQuad); |
| 623 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame)) | 623 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame)) |
| 624 continue; | 624 continue; |
| 625 | 625 |
| 626 // We are changing the vector in the middle of iteration. Because we | 626 // We are changing the vector in the middle of iteration. Because we |
| 627 // delete render passes that draw into the current pass, we are | 627 // delete render passes that draw into the current pass, we are |
| 628 // guaranteed that any data from the iterator to the end will not | 628 // guaranteed that any data from the iterator to the end will not |
| 629 // change. So, capture the iterator position from the end of the | 629 // change. So, capture the iterator position from the end of the |
| 630 // list, and restore it after the change. | 630 // list, and restore it after the change. |
| 631 int positionFromEnd = frame.renderPasses.size() - it; | 631 int positionFromEnd = frame.renderPasses.size() - it; |
| 632 removeRenderPassesRecursive(renderPassQuad->renderPassId(), frame); | 632 removeRenderPassesRecursive(renderPassQuad->render_pass_id, frame); |
| 633 it = frame.renderPasses.size() - positionFromEnd; | 633 it = frame.renderPasses.size() - positionFromEnd; |
| 634 DCHECK(it >= 0); | 634 DCHECK(it >= 0); |
| 635 } | 635 } |
| 636 } | 636 } |
| 637 } | 637 } |
| 638 | 638 |
| 639 bool LayerTreeHostImpl::prepareToDraw(FrameData& frame) | 639 bool LayerTreeHostImpl::prepareToDraw(FrameData& frame) |
| 640 { | 640 { |
| 641 TRACE_EVENT0("cc", "LayerTreeHostImpl::prepareToDraw"); | 641 TRACE_EVENT0("cc", "LayerTreeHostImpl::prepareToDraw"); |
| 642 DCHECK(canDraw()); | 642 DCHECK(canDraw()); |
| (...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1505 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); | 1505 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); |
| 1506 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); | 1506 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
| 1507 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1507 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
| 1508 m_client->setNeedsRedrawOnImplThread(); | 1508 m_client->setNeedsRedrawOnImplThread(); |
| 1509 | 1509 |
| 1510 for (size_t i = 0; i < layer->children().size(); ++i) | 1510 for (size_t i = 0; i < layer->children().size(); ++i) |
| 1511 animateScrollbarsRecursive(layer->children()[i], time); | 1511 animateScrollbarsRecursive(layer->children()[i], time); |
| 1512 } | 1512 } |
| 1513 | 1513 |
| 1514 } // namespace cc | 1514 } // namespace cc |
| OLD | NEW |