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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11418047: cc: Turn DrawQuad into a struct-like class with public data members. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: no virtual for SetAll() Created 8 years, 1 month 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/io_surface_draw_quad.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 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 if (layerHasAnimatingTransform) 446 if (layerHasAnimatingTransform)
447 drawFrame = false; 447 drawFrame = false;
448 } 448 }
449 449
450 occlusionTracker.leaveLayer(it); 450 occlusionTracker.leaveLayer(it);
451 } 451 }
452 452
453 #ifndef NDEBUG 453 #ifndef NDEBUG
454 for (size_t i = 0; i < frame.renderPasses.size(); ++i) { 454 for (size_t i = 0; i < frame.renderPasses.size(); ++i) {
455 for (size_t j = 0; j < frame.renderPasses[i]->quadList().size(); ++j) { 455 for (size_t j = 0; j < frame.renderPasses[i]->quadList().size(); ++j) {
456 DCHECK(frame.renderPasses[i]->quadList()[j]->shared_quad_state()); 456 DCHECK(frame.renderPasses[i]->quadList()[j]->shared_quad_state);
457 DCHECK_GE(frame.renderPasses[i]->quadList()[j]->shared_quad_state()- >id, 0); 457 DCHECK_GE(frame.renderPasses[i]->quadList()[j]->shared_quad_state->i d, 0);
458 } 458 }
459 DCHECK(frame.renderPassesById.contains(frame.renderPasses[i]->id())); 459 DCHECK(frame.renderPassesById.contains(frame.renderPasses[i]->id()));
460 } 460 }
461 #endif 461 #endif
462 462
463 if (!m_hasTransparentBackground) { 463 if (!m_hasTransparentBackground) {
464 frame.renderPasses.back()->setHasTransparentBackground(false); 464 frame.renderPasses.back()->setHasTransparentBackground(false);
465 frame.renderPasses.back()->appendQuadsToFillScreen(m_rootLayerImpl.get() , m_backgroundColor, occlusionTracker); 465 frame.renderPasses.back()->appendQuadsToFillScreen(m_rootLayerImpl.get() , m_backgroundColor, occlusionTracker);
466 } 466 }
467 467
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 return; 540 return;
541 541
542 const RenderPass* removedPass = *toRemove; 542 const RenderPass* removedPass = *toRemove;
543 frame.renderPasses.erase(toRemove); 543 frame.renderPasses.erase(toRemove);
544 544
545 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively. 545 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively.
546 const QuadList& quadList = removedPass->quadList(); 546 const QuadList& quadList = removedPass->quadList();
547 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe gin(); 547 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe gin();
548 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 548 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
549 DrawQuad* currentQuad = (*quadListIterator); 549 DrawQuad* currentQuad = (*quadListIterator);
550 if (currentQuad->material() != DrawQuad::RENDER_PASS) 550 if (currentQuad->material != DrawQuad::RENDER_PASS)
551 continue; 551 continue;
552 552
553 RenderPass::Id nextRemoveRenderPassId = RenderPassDrawQuad::materialCast (currentQuad)->renderPassId(); 553 RenderPass::Id nextRemoveRenderPassId = RenderPassDrawQuad::materialCast (currentQuad)->renderPassId();
554 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); 554 removeRenderPassesRecursive(nextRemoveRenderPassId, frame);
555 } 555 }
556 } 556 }
557 557
558 bool LayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPa ss(const RenderPassDrawQuad& quad, const FrameData&) const 558 bool LayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPa ss(const RenderPassDrawQuad& quad, const FrameData&) const
559 { 559 {
560 return quad.contentsChangedSinceLastFrame().IsEmpty() && m_renderer.haveCach edResourcesForRenderPassId(quad.renderPassId()); 560 return quad.contentsChangedSinceLastFrame().IsEmpty() && m_renderer.haveCach edResourcesForRenderPassId(quad.renderPassId());
561 } 561 }
562 562
563 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(cons t RenderPassDrawQuad& quad, const FrameData& frame) const 563 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(cons t RenderPassDrawQuad& quad, const FrameData& frame) const
564 { 564 {
565 const RenderPass* renderPass = findRenderPassById(quad.renderPassId(), frame ); 565 const RenderPass* renderPass = findRenderPassById(quad.renderPassId(), frame );
566 const RenderPassList& renderPasses = frame.renderPasses; 566 const RenderPassList& renderPasses = frame.renderPasses;
567 RenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), r enderPasses.end(), renderPass); 567 RenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), r enderPasses.end(), renderPass);
568 568
569 bool renderPassAlreadyRemoved = foundPass == renderPasses.end(); 569 bool renderPassAlreadyRemoved = foundPass == renderPasses.end();
570 if (renderPassAlreadyRemoved) 570 if (renderPassAlreadyRemoved)
571 return false; 571 return false;
572 572
573 // If any quad or RenderPass draws into this RenderPass, then keep it. 573 // If any quad or RenderPass draws into this RenderPass, then keep it.
574 const QuadList& quadList = (*foundPass)->quadList(); 574 const QuadList& quadList = (*foundPass)->quadList();
575 for (QuadList::constBackToFrontIterator quadListIterator = quadList.backToFr ontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 575 for (QuadList::constBackToFrontIterator quadListIterator = quadList.backToFr ontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
576 DrawQuad* currentQuad = *quadListIterator; 576 DrawQuad* currentQuad = *quadListIterator;
577 577
578 if (currentQuad->material() != DrawQuad::RENDER_PASS) 578 if (currentQuad->material != DrawQuad::RENDER_PASS)
579 return false; 579 return false;
580 580
581 const RenderPass* contributingPass = findRenderPassById(RenderPassDrawQu ad::materialCast(currentQuad)->renderPassId(), frame); 581 const RenderPass* contributingPass = findRenderPassById(RenderPassDrawQu ad::materialCast(currentQuad)->renderPassId(), frame);
582 RenderPassList::const_iterator foundContributingPass = std::find(renderP asses.begin(), renderPasses.end(), contributingPass); 582 RenderPassList::const_iterator foundContributingPass = std::find(renderP asses.begin(), renderPasses.end(), contributingPass);
583 if (foundContributingPass != renderPasses.end()) 583 if (foundContributingPass != renderPasses.end())
584 return false; 584 return false;
585 } 585 }
586 return true; 586 return true;
587 } 587 }
588 588
589 // Defined for linking tests. 589 // Defined for linking tests.
590 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl: :CullRenderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameDa ta&); 590 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl: :CullRenderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameDa ta&);
591 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl: :CullRenderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); 591 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl: :CullRenderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&);
592 592
593 // static 593 // static
594 template<typename RenderPassCuller> 594 template<typename RenderPassCuller>
595 void LayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& f rame) 595 void LayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& f rame)
596 { 596 {
597 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) { 597 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) {
598 const RenderPass* currentPass = frame.renderPasses[it]; 598 const RenderPass* currentPass = frame.renderPasses[it];
599 const QuadList& quadList = currentPass->quadList(); 599 const QuadList& quadList = currentPass->quadList();
600 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFro ntBegin(); 600 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFro ntBegin();
601 601
602 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator ) { 602 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator ) {
603 DrawQuad* currentQuad = *quadListIterator; 603 DrawQuad* currentQuad = *quadListIterator;
604 604
605 if (currentQuad->material() != DrawQuad::RENDER_PASS) 605 if (currentQuad->material != DrawQuad::RENDER_PASS)
606 continue; 606 continue;
607 607
608 RenderPassDrawQuad* renderPassQuad = static_cast<RenderPassDrawQuad* >(currentQuad); 608 RenderPassDrawQuad* renderPassQuad = static_cast<RenderPassDrawQuad* >(currentQuad);
609 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame)) 609 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame))
610 continue; 610 continue;
611 611
612 // We are changing the vector in the middle of iteration. Because we 612 // We are changing the vector in the middle of iteration. Because we
613 // delete render passes that draw into the current pass, we are 613 // delete render passes that draw into the current pass, we are
614 // guaranteed that any data from the iterator to the end will not 614 // guaranteed that any data from the iterator to the end will not
615 // change. So, capture the iterator position from the end of the 615 // change. So, capture the iterator position from the end of the
(...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after
1494 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); 1494 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController();
1495 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); 1495 double monotonicTime = (time - base::TimeTicks()).InSecondsF();
1496 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1496 if (scrollbarController && scrollbarController->animate(monotonicTime))
1497 m_client->setNeedsRedrawOnImplThread(); 1497 m_client->setNeedsRedrawOnImplThread();
1498 1498
1499 for (size_t i = 0; i < layer->children().size(); ++i) 1499 for (size_t i = 0; i < layer->children().size(); ++i)
1500 animateScrollbarsRecursive(layer->children()[i], time); 1500 animateScrollbarsRecursive(layer->children()[i], time);
1501 } 1501 }
1502 1502
1503 } // namespace cc 1503 } // namespace cc
OLDNEW
« no previous file with comments | « cc/io_surface_draw_quad.cc ('k') | cc/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698