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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11418108: cc: Make the ScopedPtrVector and ScopedPtrDeque containers act like STL vector and deque. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: android!! Created 7 years, 11 months 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/layer_impl.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 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 activeTree()->UpdateDrawProperties(); 420 activeTree()->UpdateDrawProperties();
421 if (pendingTree()) 421 if (pendingTree())
422 pendingTree()->UpdateDrawProperties(); 422 pendingTree()->UpdateDrawProperties();
423 423
424 m_needsUpdateDrawProperties = false; 424 m_needsUpdateDrawProperties = false;
425 } 425 }
426 426
427 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass) 427 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass)
428 { 428 {
429 renderPassesById[renderPass->id] = renderPass.get(); 429 renderPassesById[renderPass->id] = renderPass.get();
430 renderPasses.append(renderPass.Pass()); 430 renderPasses.push_back(renderPass.Pass());
431 } 431 }
432 432
433 static void appendQuadsForLayer(RenderPass* targetRenderPass, LayerImpl* layer, OcclusionTrackerImpl& occlusionTracker, AppendQuadsData& appendQuadsData) 433 static void appendQuadsForLayer(RenderPass* targetRenderPass, LayerImpl* layer, OcclusionTrackerImpl& occlusionTracker, AppendQuadsData& appendQuadsData)
434 { 434 {
435 bool forSurface = false; 435 bool forSurface = false;
436 QuadCuller quadCuller(targetRenderPass->quad_list, 436 QuadCuller quadCuller(targetRenderPass->quad_list,
437 targetRenderPass->shared_quad_state_list, 437 targetRenderPass->shared_quad_state_list,
438 layer, 438 layer,
439 occlusionTracker, 439 occlusionTracker,
440 layer->showDebugBorders(), 440 layer->showDebugBorders(),
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 // Skip the quad culler and just append the quads directly to avoid 511 // Skip the quad culler and just append the quads directly to avoid
512 // occlusion checks. 512 // occlusion checks.
513 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); 513 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
514 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); 514 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor);
515 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData); 515 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData);
516 } 516 }
517 } 517 }
518 518
519 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) 519 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
520 { 520 {
521 DCHECK(frame.renderPasses.isEmpty()); 521 DCHECK(frame.renderPasses.empty());
522 522
523 if (!canDraw() || !rootLayer()) 523 if (!canDraw() || !rootLayer())
524 return false; 524 return false;
525 525
526 trackDamageForAllSurfaces(rootLayer(), *frame.renderSurfaceLayerList); 526 trackDamageForAllSurfaces(rootLayer(), *frame.renderSurfaceLayerList);
527 527
528 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList ->size())); 528 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList ->size()));
529 529
530 // Create the render passes in dependency order. 530 // Create the render passes in dependency order.
531 for (int surfaceIndex = frame.renderSurfaceLayerList->size() - 1; surfaceInd ex >= 0 ; --surfaceIndex) { 531 for (int surfaceIndex = frame.renderSurfaceLayerList->size() - 1; surfaceInd ex >= 0 ; --surfaceIndex) {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 #ifndef NDEBUG 607 #ifndef NDEBUG
608 for (size_t i = 0; i < frame.renderPasses.size(); ++i) { 608 for (size_t i = 0; i < frame.renderPasses.size(); ++i) {
609 for (size_t j = 0; j < frame.renderPasses[i]->quad_list.size(); ++j) 609 for (size_t j = 0; j < frame.renderPasses[i]->quad_list.size(); ++j)
610 DCHECK(frame.renderPasses[i]->quad_list[j]->shared_quad_state); 610 DCHECK(frame.renderPasses[i]->quad_list[j]->shared_quad_state);
611 DCHECK(frame.renderPassesById.find(frame.renderPasses[i]->id) 611 DCHECK(frame.renderPassesById.find(frame.renderPasses[i]->id)
612 != frame.renderPassesById.end()); 612 != frame.renderPassesById.end());
613 } 613 }
614 #endif 614 #endif
615 615
616 if (!activeTree()->has_transparent_background()) { 616 if (!activeTree()->has_transparent_background()) {
617 frame.renderPasses.last()->has_transparent_background = false; 617 frame.renderPasses.back()->has_transparent_background = false;
618 appendQuadsToFillScreen(frame.renderPasses.last(), rootLayer(), activeTr ee()->background_color(), occlusionTracker); 618 appendQuadsToFillScreen(frame.renderPasses.back(), rootLayer(), activeTr ee()->background_color(), occlusionTracker);
619 } 619 }
620 620
621 if (drawFrame) 621 if (drawFrame)
622 occlusionTracker.overdrawMetrics().recordMetrics(this); 622 occlusionTracker.overdrawMetrics().recordMetrics(this);
623 623
624 removeRenderPasses(CullRenderPassesWithNoQuads(), frame); 624 removeRenderPasses(CullRenderPassesWithNoQuads(), frame);
625 m_renderer->decideRenderPassAllocationsForFrame(frame.renderPasses); 625 m_renderer->decideRenderPassAllocationsForFrame(frame.renderPasses);
626 removeRenderPasses(CullRenderPassesWithCachedTextures(*m_renderer), frame); 626 removeRenderPasses(CullRenderPassesWithCachedTextures(*m_renderer), frame);
627 627
628 return drawFrame; 628 return drawFrame;
(...skipping 23 matching lines...) Expand all
652 { 652 {
653 RenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, frame) ; 653 RenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, frame) ;
654 // The pass was already removed by another quad - probably the original, and we are the replica. 654 // The pass was already removed by another quad - probably the original, and we are the replica.
655 if (!removeRenderPass) 655 if (!removeRenderPass)
656 return; 656 return;
657 RenderPassList& renderPasses = frame.renderPasses; 657 RenderPassList& renderPasses = frame.renderPasses;
658 RenderPassList::iterator toRemove = std::find(renderPasses.begin(), renderPa sses.end(), removeRenderPass); 658 RenderPassList::iterator toRemove = std::find(renderPasses.begin(), renderPa sses.end(), removeRenderPass);
659 659
660 DCHECK(toRemove != renderPasses.end()); 660 DCHECK(toRemove != renderPasses.end());
661 661
662 size_t index = toRemove - renderPasses.begin(); 662 scoped_ptr<RenderPass> removedPass = renderPasses.take(toRemove);
663 scoped_ptr<RenderPass> removedPass = renderPasses.take(index); 663 frame.renderPasses.erase(toRemove);
664 frame.renderPasses.remove(index);
665 frame.renderPassesById.erase(removeRenderPassId); 664 frame.renderPassesById.erase(removeRenderPassId);
666 665
667 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively. 666 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively.
668 const QuadList& quadList = removedPass->quad_list; 667 const QuadList& quadList = removedPass->quad_list;
669 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe gin(); 668 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe gin();
670 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 669 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
671 DrawQuad* currentQuad = (*quadListIterator); 670 DrawQuad* currentQuad = (*quadListIterator);
672 if (currentQuad->material != DrawQuad::RENDER_PASS) 671 if (currentQuad->material != DrawQuad::RENDER_PASS)
673 continue; 672 continue;
674 673
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
871 metadata.min_page_scale_factor = m_pinchZoomViewport.minPageScaleFactor(); 870 metadata.min_page_scale_factor = m_pinchZoomViewport.minPageScaleFactor();
872 metadata.max_page_scale_factor = m_pinchZoomViewport.maxPageScaleFactor(); 871 metadata.max_page_scale_factor = m_pinchZoomViewport.maxPageScaleFactor();
873 872
874 return metadata; 873 return metadata;
875 } 874 }
876 875
877 void LayerTreeHostImpl::drawLayers(FrameData& frame) 876 void LayerTreeHostImpl::drawLayers(FrameData& frame)
878 { 877 {
879 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); 878 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers");
880 DCHECK(canDraw()); 879 DCHECK(canDraw());
881 DCHECK(!frame.renderPasses.isEmpty()); 880 DCHECK(!frame.renderPasses.empty());
882 881
883 // FIXME: use the frame begin time from the overall compositor scheduler. 882 // FIXME: use the frame begin time from the overall compositor scheduler.
884 // This value is currently inaccessible because it is up in Chromium's 883 // This value is currently inaccessible because it is up in Chromium's
885 // RenderWidget. 884 // RenderWidget.
886 m_fpsCounter->markBeginningOfFrame(base::TimeTicks::Now()); 885 m_fpsCounter->markBeginningOfFrame(base::TimeTicks::Now());
887 886
888 if (m_debugState.showHudRects()) 887 if (m_debugState.showHudRects())
889 m_debugRectHistory->saveDebugRectsForCurrentFrame(rootLayer(), *frame.re nderSurfaceLayerList, frame.occludingScreenSpaceRects, frame.nonOccludingScreenS paceRects, m_debugState); 888 m_debugRectHistory->saveDebugRectsForCurrentFrame(rootLayer(), *frame.re nderSurfaceLayerList, frame.occludingScreenSpaceRects, frame.nonOccludingScreenS paceRects, m_debugState);
890 889
891 // Because the contents of the HUD depend on everything else in the frame, t he contents 890 // Because the contents of the HUD depend on everything else in the frame, t he contents
892 // of its texture are updated as the last thing before the frame is drawn. 891 // of its texture are updated as the last thing before the frame is drawn.
893 if (m_activeTree->hud_layer()) 892 if (m_activeTree->hud_layer())
894 m_activeTree->hud_layer()->updateHudTexture(m_resourceProvider.get()); 893 m_activeTree->hud_layer()->updateHudTexture(m_resourceProvider.get());
895 894
896 m_renderer->drawFrame(frame.renderPasses); 895 m_renderer->drawFrame(frame.renderPasses);
897 // The render passes should be consumed by the renderer. 896 // The render passes should be consumed by the renderer.
898 DCHECK(frame.renderPasses.isEmpty()); 897 DCHECK(frame.renderPasses.empty());
899 frame.renderPassesById.clear(); 898 frame.renderPassesById.clear();
900 899
901 // The next frame should start by assuming nothing has changed, and changes are noted as they occur. 900 // The next frame should start by assuming nothing has changed, and changes are noted as they occur.
902 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++) 901 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++)
903 (*frame.renderSurfaceLayerList)[i]->renderSurface()->damageTracker()->di dDrawDamagedArea(); 902 (*frame.renderSurfaceLayerList)[i]->renderSurface()->damageTracker()->di dDrawDamagedArea();
904 rootLayer()->resetAllChangeTrackingForSubtree(); 903 rootLayer()->resetAllChangeTrackingForSubtree();
905 } 904 }
906 905
907 void LayerTreeHostImpl::didDrawAllLayers(const FrameData& frame) 906 void LayerTreeHostImpl::didDrawAllLayers(const FrameData& frame)
908 { 907 {
(...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after
1701 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); 1700 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController();
1702 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); 1701 double monotonicTime = (time - base::TimeTicks()).InSecondsF();
1703 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1702 if (scrollbarController && scrollbarController->animate(monotonicTime))
1704 m_client->setNeedsRedrawOnImplThread(); 1703 m_client->setNeedsRedrawOnImplThread();
1705 1704
1706 for (size_t i = 0; i < layer->children().size(); ++i) 1705 for (size_t i = 0; i < layer->children().size(); ++i)
1707 animateScrollbarsRecursive(layer->children()[i], time); 1706 animateScrollbarsRecursive(layer->children()[i], time);
1708 } 1707 }
1709 1708
1710 } // namespace cc 1709 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layer_impl.cc ('k') | cc/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698