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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11413106: cc: Make RenderPass into a struct-like class. (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"
11 #include "cc/append_quads_data.h" 11 #include "cc/append_quads_data.h"
12 #include "cc/damage_tracker.h" 12 #include "cc/damage_tracker.h"
13 #include "cc/debug_rect_history.h" 13 #include "cc/debug_rect_history.h"
14 #include "cc/delay_based_time_source.h" 14 #include "cc/delay_based_time_source.h"
15 #include "cc/font_atlas.h" 15 #include "cc/font_atlas.h"
16 #include "cc/frame_rate_counter.h" 16 #include "cc/frame_rate_counter.h"
17 #include "cc/gl_renderer.h" 17 #include "cc/gl_renderer.h"
18 #include "cc/heads_up_display_layer_impl.h" 18 #include "cc/heads_up_display_layer_impl.h"
19 #include "cc/layer_iterator.h" 19 #include "cc/layer_iterator.h"
20 #include "cc/layer_tree_host.h" 20 #include "cc/layer_tree_host.h"
21 #include "cc/layer_tree_host_common.h" 21 #include "cc/layer_tree_host_common.h"
22 #include "cc/math_util.h" 22 #include "cc/math_util.h"
23 #include "cc/overdraw_metrics.h" 23 #include "cc/overdraw_metrics.h"
24 #include "cc/page_scale_animation.h" 24 #include "cc/page_scale_animation.h"
25 #include "cc/prioritized_resource_manager.h" 25 #include "cc/prioritized_resource_manager.h"
26 #include "cc/quad_culler.h"
26 #include "cc/render_pass_draw_quad.h" 27 #include "cc/render_pass_draw_quad.h"
27 #include "cc/rendering_stats.h" 28 #include "cc/rendering_stats.h"
28 #include "cc/scrollbar_animation_controller.h" 29 #include "cc/scrollbar_animation_controller.h"
29 #include "cc/scrollbar_layer_impl.h" 30 #include "cc/scrollbar_layer_impl.h"
31 #include "cc/shared_quad_state.h"
30 #include "cc/single_thread_proxy.h" 32 #include "cc/single_thread_proxy.h"
31 #include "cc/software_renderer.h" 33 #include "cc/software_renderer.h"
34 #include "cc/solid_color_draw_quad.h"
32 #include "cc/texture_uploader.h" 35 #include "cc/texture_uploader.h"
33 #include "ui/gfx/size_conversions.h" 36 #include "ui/gfx/size_conversions.h"
34 #include "ui/gfx/vector2d_conversions.h" 37 #include "ui/gfx/vector2d_conversions.h"
35 38
36 using WebKit::WebTransformationMatrix; 39 using WebKit::WebTransformationMatrix;
37 40
38 namespace { 41 namespace {
39 42
40 void didVisibilityChange(cc::LayerTreeHostImpl* id, bool visible) 43 void didVisibilityChange(cc::LayerTreeHostImpl* id, bool visible)
41 { 44 {
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 LayerTreeHostCommon::calculateDrawTransforms(m_rootLayerImpl.get(), devi ceViewportSize(), m_deviceScaleFactor, pageScaleFactor, &m_layerSorter, renderer Capabilities().maxTextureSize, renderSurfaceLayerList); 376 LayerTreeHostCommon::calculateDrawTransforms(m_rootLayerImpl.get(), devi ceViewportSize(), m_deviceScaleFactor, pageScaleFactor, &m_layerSorter, renderer Capabilities().maxTextureSize, renderSurfaceLayerList);
374 377
375 trackDamageForAllSurfaces(m_rootLayerImpl.get(), renderSurfaceLayerList) ; 378 trackDamageForAllSurfaces(m_rootLayerImpl.get(), renderSurfaceLayerList) ;
376 } 379 }
377 } 380 }
378 381
379 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass) 382 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass)
380 { 383 {
381 RenderPass* pass = renderPass.get(); 384 RenderPass* pass = renderPass.get();
382 renderPasses.push_back(pass); 385 renderPasses.push_back(pass);
383 renderPassesById.set(pass->id(), renderPass.Pass()); 386 renderPassesById.set(pass->id, renderPass.Pass());
387 }
388
389 static void appendQuadsForLayer(RenderPass* targetRenderPass, LayerImpl* layer, OcclusionTrackerImpl& occlusionTracker, AppendQuadsData& appendQuadsData)
390 {
391 bool forSurface = false;
392 QuadCuller quadCuller(targetRenderPass->quad_list,
393 targetRenderPass->shared_quad_state_list,
394 layer,
395 occlusionTracker,
396 layer->showDebugBorders(),
397 forSurface);
398 layer->appendQuads(quadCuller, appendQuadsData);
399 }
400
401 static void appendQuadsForRenderSurfaceLayer(RenderPass* targetRenderPass, Layer Impl* layer, const RenderPass* contributingRenderPass, OcclusionTrackerImpl& occ lusionTracker, AppendQuadsData& appendQuadsData)
402 {
403 bool forSurface = true;
404 QuadCuller quadCuller(targetRenderPass->quad_list,
405 targetRenderPass->shared_quad_state_list,
406 layer,
407 occlusionTracker,
408 layer->showDebugBorders(),
409 forSurface);
410
411 bool isReplica = false;
412 layer->renderSurface()->appendQuads(quadCuller,
413 appendQuadsData,
414 isReplica,
415 contributingRenderPass->id);
416
417 // Add replica after the surface so that it appears below the surface.
418 if (layer->hasReplica()) {
419 isReplica = true;
420 layer->renderSurface()->appendQuads(quadCuller,
421 appendQuadsData,
422 isReplica,
423 contributingRenderPass->id);
424 }
425 }
426
427 static void appendQuadsToFillScreen(RenderPass* targetRenderPass, LayerImpl* roo tLayer, SkColor screenBackgroundColor, const OcclusionTrackerImpl& occlusionTrac ker)
428 {
429 if (!rootLayer || !SkColorGetA(screenBackgroundColor))
430 return;
431
432 Region fillRegion = occlusionTracker.computeVisibleRegionInScreen();
433 if (fillRegion.IsEmpty())
434 return;
435
436 bool forSurface = false;
437 QuadCuller quadCuller(targetRenderPass->quad_list,
438 targetRenderPass->shared_quad_state_list,
439 rootLayer,
440 occlusionTracker,
441 rootLayer->showDebugBorders(),
442 forSurface);
443
444 // Manually create the quad state for the gutter quads, as the root layer
445 // doesn't have any bounds and so can't generate this itself.
446 // FIXME: Make the gutter quads generated by the solid color layer (make it smarter about generating quads to fill unoccluded areas).
447
448 DCHECK(rootLayer->screenSpaceTransform().isInvertible());
449
450 gfx::Rect rootTargetRect = rootLayer->renderSurface()->contentRect();
451 float opacity = 1;
452 SharedQuadState* sharedQuadState = quadCuller.useSharedQuadState(SharedQuadS tate::Create());
453 sharedQuadState->SetAll(rootLayer->drawTransform(),
454 rootTargetRect,
455 rootTargetRect,
456 opacity);
457
458 AppendQuadsData appendQuadsData;
459 WebTransformationMatrix transformToLayerSpace = rootLayer->screenSpaceTransf orm().inverse();
460 for (Region::Iterator fillRects(fillRegion); fillRects.has_rect(); fillRects .next()) {
461 // The root layer transform is composed of translations and scales only,
462 // no perspective, so mapping is sufficient.
463 gfx::Rect layerRect = MathUtil::mapClippedRect(transformToLayerSpace, fi llRects.rect());
464 // Skip the quad culler and just append the quads directly to avoid
465 // occlusion checks.
466 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
467 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor);
468 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData);
469 }
384 } 470 }
385 471
386 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) 472 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
387 { 473 {
388 DCHECK(frame.renderPasses.empty()); 474 DCHECK(frame.renderPasses.empty());
389 475
390 calculateRenderSurfaceLayerList(*frame.renderSurfaceLayerList); 476 calculateRenderSurfaceLayerList(*frame.renderSurfaceLayerList);
391 477
392 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList ->size())); 478 TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfac eLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList ->size()));
393 479
(...skipping 20 matching lines...) Expand all
414 // in the future. 500 // in the future.
415 bool drawFrame = true; 501 bool drawFrame = true;
416 502
417 LayerIteratorType end = LayerIteratorType::end(frame.renderSurfaceLayerList) ; 503 LayerIteratorType end = LayerIteratorType::end(frame.renderSurfaceLayerList) ;
418 for (LayerIteratorType it = LayerIteratorType::begin(frame.renderSurfaceLaye rList); it != end; ++it) { 504 for (LayerIteratorType it = LayerIteratorType::begin(frame.renderSurfaceLaye rList); it != end; ++it) {
419 RenderPass::Id targetRenderPassId = it.targetRenderSurfaceLayer()->rende rSurface()->renderPassId(); 505 RenderPass::Id targetRenderPassId = it.targetRenderSurfaceLayer()->rende rSurface()->renderPassId();
420 RenderPass* targetRenderPass = frame.renderPassesById.get(targetRenderPa ssId); 506 RenderPass* targetRenderPass = frame.renderPassesById.get(targetRenderPa ssId);
421 507
422 occlusionTracker.enterLayer(it); 508 occlusionTracker.enterLayer(it);
423 509
424 AppendQuadsData appendQuadsData(targetRenderPass->id()); 510 AppendQuadsData appendQuadsData(targetRenderPass->id);
425 511
426 if (it.representsContributingRenderSurface()) { 512 if (it.representsContributingRenderSurface()) {
427 RenderPass::Id contributingRenderPassId = it->renderSurface()->rende rPassId(); 513 RenderPass::Id contributingRenderPassId = it->renderSurface()->rende rPassId();
428 RenderPass* contributingRenderPass = frame.renderPassesById.get(cont ributingRenderPassId); 514 RenderPass* contributingRenderPass = frame.renderPassesById.get(cont ributingRenderPassId);
429 targetRenderPass->appendQuadsForRenderSurfaceLayer(*it, contributing RenderPass, &occlusionTracker, appendQuadsData); 515 appendQuadsForRenderSurfaceLayer(targetRenderPass, *it, contributing RenderPass, occlusionTracker, appendQuadsData);
430 } else if (it.representsItself() && !it->visibleContentRect().IsEmpty()) { 516 } else if (it.representsItself() && !it->visibleContentRect().IsEmpty()) {
431 bool hasOcclusionFromOutsideTargetSurface; 517 bool hasOcclusionFromOutsideTargetSurface;
432 bool implDrawTransformIsUnknown = false; 518 bool implDrawTransformIsUnknown = false;
433 if (occlusionTracker.occluded(it->renderTarget(), it->visibleContent Rect(), it->drawTransform(), implDrawTransformIsUnknown, it->drawableContentRect (), &hasOcclusionFromOutsideTargetSurface)) 519 if (occlusionTracker.occluded(it->renderTarget(), it->visibleContent Rect(), it->drawTransform(), implDrawTransformIsUnknown, it->drawableContentRect (), &hasOcclusionFromOutsideTargetSurface))
434 appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclu sionFromOutsideTargetSurface; 520 appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclu sionFromOutsideTargetSurface;
435 else { 521 else {
436 it->willDraw(m_resourceProvider.get()); 522 it->willDraw(m_resourceProvider.get());
437 frame.willDrawLayers.push_back(*it); 523 frame.willDrawLayers.push_back(*it);
438 524
439 if (it->hasContributingDelegatedRenderPasses()) { 525 if (it->hasContributingDelegatedRenderPasses()) {
440 RenderPass::Id contributingRenderPassId = it->firstContribut ingRenderPassId(); 526 RenderPass::Id contributingRenderPassId = it->firstContribut ingRenderPassId();
441 while (frame.renderPassesById.contains(contributingRenderPas sId)) { 527 while (frame.renderPassesById.contains(contributingRenderPas sId)) {
442 RenderPass* renderPass = frame.renderPassesById.get(cont ributingRenderPassId); 528 RenderPass* renderPass = frame.renderPassesById.get(cont ributingRenderPassId);
443 529
444 AppendQuadsData appendQuadsData(renderPass->id()); 530 AppendQuadsData appendQuadsData(renderPass->id);
445 renderPass->appendQuadsForLayer(*it, &occlusionTracker, appendQuadsData); 531 appendQuadsForLayer(renderPass, *it, occlusionTracker, a ppendQuadsData);
446 532
447 contributingRenderPassId = it->nextContributingRenderPas sId(contributingRenderPassId); 533 contributingRenderPassId = it->nextContributingRenderPas sId(contributingRenderPassId);
448 } 534 }
449 } 535 }
450 536
451 targetRenderPass->appendQuadsForLayer(*it, &occlusionTracker, ap pendQuadsData); 537 appendQuadsForLayer(targetRenderPass, *it, occlusionTracker, app endQuadsData);
452 } 538 }
453 } 539 }
454 540
455 if (appendQuadsData.hadOcclusionFromOutsideTargetSurface) 541 if (appendQuadsData.hadOcclusionFromOutsideTargetSurface)
456 targetRenderPass->setHasOcclusionFromOutsideTargetSurface(true); 542 targetRenderPass->has_occlusion_from_outside_target_surface = true;
457 543
458 if (appendQuadsData.hadMissingTiles) { 544 if (appendQuadsData.hadMissingTiles) {
459 bool layerHasAnimatingTransform = it->screenSpaceTransformIsAnimatin g() || it->drawTransformIsAnimating(); 545 bool layerHasAnimatingTransform = it->screenSpaceTransformIsAnimatin g() || it->drawTransformIsAnimating();
460 if (layerHasAnimatingTransform) 546 if (layerHasAnimatingTransform)
461 drawFrame = false; 547 drawFrame = false;
462 } 548 }
463 549
464 occlusionTracker.leaveLayer(it); 550 occlusionTracker.leaveLayer(it);
465 } 551 }
466 552
467 #ifndef NDEBUG 553 #ifndef NDEBUG
468 for (size_t i = 0; i < frame.renderPasses.size(); ++i) { 554 for (size_t i = 0; i < frame.renderPasses.size(); ++i) {
469 for (size_t j = 0; j < frame.renderPasses[i]->quadList().size(); ++j) 555 for (size_t j = 0; j < frame.renderPasses[i]->quad_list.size(); ++j)
470 DCHECK(frame.renderPasses[i]->quadList()[j]->shared_quad_state); 556 DCHECK(frame.renderPasses[i]->quad_list[j]->shared_quad_state);
471 DCHECK(frame.renderPassesById.contains(frame.renderPasses[i]->id())); 557 DCHECK(frame.renderPassesById.contains(frame.renderPasses[i]->id));
472 } 558 }
473 #endif 559 #endif
474 560
475 if (!m_hasTransparentBackground) { 561 if (!m_hasTransparentBackground) {
476 frame.renderPasses.back()->setHasTransparentBackground(false); 562 frame.renderPasses.back()->has_transparent_background = false;
477 frame.renderPasses.back()->appendQuadsToFillScreen(m_rootLayerImpl.get() , m_backgroundColor, occlusionTracker); 563 appendQuadsToFillScreen(frame.renderPasses.back(), m_rootLayerImpl.get() , m_backgroundColor, occlusionTracker);
478 } 564 }
479 565
480 if (drawFrame) 566 if (drawFrame)
481 occlusionTracker.overdrawMetrics().recordMetrics(this); 567 occlusionTracker.overdrawMetrics().recordMetrics(this);
482 568
483 removeRenderPasses(CullRenderPassesWithNoQuads(), frame); 569 removeRenderPasses(CullRenderPassesWithNoQuads(), frame);
484 m_renderer->decideRenderPassAllocationsForFrame(frame.renderPasses); 570 m_renderer->decideRenderPassAllocationsForFrame(frame.renderPasses);
485 removeRenderPasses(CullRenderPassesWithCachedTextures(*m_renderer), frame); 571 removeRenderPasses(CullRenderPassesWithCachedTextures(*m_renderer), frame);
486 572
487 return drawFrame; 573 return drawFrame;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 RenderPassList::iterator toRemove = std::find(renderPasses.begin(), renderPa sses.end(), removeRenderPass); 634 RenderPassList::iterator toRemove = std::find(renderPasses.begin(), renderPa sses.end(), removeRenderPass);
549 635
550 // The pass was already removed by another quad - probably the original, and we are the replica. 636 // The pass was already removed by another quad - probably the original, and we are the replica.
551 if (toRemove == renderPasses.end()) 637 if (toRemove == renderPasses.end())
552 return; 638 return;
553 639
554 const RenderPass* removedPass = *toRemove; 640 const RenderPass* removedPass = *toRemove;
555 frame.renderPasses.erase(toRemove); 641 frame.renderPasses.erase(toRemove);
556 642
557 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively. 643 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively.
558 const QuadList& quadList = removedPass->quadList(); 644 const QuadList& quadList = removedPass->quad_list;
559 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe gin(); 645 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFrontBe gin();
560 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 646 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
561 DrawQuad* currentQuad = (*quadListIterator); 647 DrawQuad* currentQuad = (*quadListIterator);
562 if (currentQuad->material != DrawQuad::RENDER_PASS) 648 if (currentQuad->material != DrawQuad::RENDER_PASS)
563 continue; 649 continue;
564 650
565 RenderPass::Id nextRemoveRenderPassId = RenderPassDrawQuad::MaterialCast (currentQuad)->render_pass_id; 651 RenderPass::Id nextRemoveRenderPassId = RenderPassDrawQuad::MaterialCast (currentQuad)->render_pass_id;
566 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); 652 removeRenderPassesRecursive(nextRemoveRenderPassId, frame);
567 } 653 }
568 } 654 }
569 655
570 bool LayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPa ss(const RenderPassDrawQuad& quad, const FrameData&) const 656 bool LayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRenderPa ss(const RenderPassDrawQuad& quad, const FrameData&) const
571 { 657 {
572 return quad.contents_changed_since_last_frame.IsEmpty() && m_renderer.haveCa chedResourcesForRenderPassId(quad.render_pass_id); 658 return quad.contents_changed_since_last_frame.IsEmpty() && m_renderer.haveCa chedResourcesForRenderPassId(quad.render_pass_id);
573 } 659 }
574 660
575 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(cons t RenderPassDrawQuad& quad, const FrameData& frame) const 661 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(cons t RenderPassDrawQuad& quad, const FrameData& frame) const
576 { 662 {
577 const RenderPass* renderPass = findRenderPassById(quad.render_pass_id, frame ); 663 const RenderPass* renderPass = findRenderPassById(quad.render_pass_id, frame );
578 const RenderPassList& renderPasses = frame.renderPasses; 664 const RenderPassList& renderPasses = frame.renderPasses;
579 RenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), r enderPasses.end(), renderPass); 665 RenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), r enderPasses.end(), renderPass);
580 666
581 bool renderPassAlreadyRemoved = foundPass == renderPasses.end(); 667 bool renderPassAlreadyRemoved = foundPass == renderPasses.end();
582 if (renderPassAlreadyRemoved) 668 if (renderPassAlreadyRemoved)
583 return false; 669 return false;
584 670
585 // If any quad or RenderPass draws into this RenderPass, then keep it. 671 // If any quad or RenderPass draws into this RenderPass, then keep it.
586 const QuadList& quadList = (*foundPass)->quadList(); 672 const QuadList& quadList = (*foundPass)->quad_list;
587 for (QuadList::constBackToFrontIterator quadListIterator = quadList.backToFr ontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 673 for (QuadList::constBackToFrontIterator quadListIterator = quadList.backToFr ontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
588 DrawQuad* currentQuad = *quadListIterator; 674 DrawQuad* currentQuad = *quadListIterator;
589 675
590 if (currentQuad->material != DrawQuad::RENDER_PASS) 676 if (currentQuad->material != DrawQuad::RENDER_PASS)
591 return false; 677 return false;
592 678
593 const RenderPass* contributingPass = findRenderPassById(RenderPassDrawQu ad::MaterialCast(currentQuad)->render_pass_id, frame); 679 const RenderPass* contributingPass = findRenderPassById(RenderPassDrawQu ad::MaterialCast(currentQuad)->render_pass_id, frame);
594 RenderPassList::const_iterator foundContributingPass = std::find(renderP asses.begin(), renderPasses.end(), contributingPass); 680 RenderPassList::const_iterator foundContributingPass = std::find(renderP asses.begin(), renderPasses.end(), contributingPass);
595 if (foundContributingPass != renderPasses.end()) 681 if (foundContributingPass != renderPasses.end())
596 return false; 682 return false;
597 } 683 }
598 return true; 684 return true;
599 } 685 }
600 686
601 // Defined for linking tests. 687 // Defined for linking tests.
602 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl: :CullRenderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameDa ta&); 688 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl: :CullRenderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameDa ta&);
603 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl: :CullRenderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); 689 template CC_EXPORT void LayerTreeHostImpl::removeRenderPasses<LayerTreeHostImpl: :CullRenderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&);
604 690
605 // static 691 // static
606 template<typename RenderPassCuller> 692 template<typename RenderPassCuller>
607 void LayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& f rame) 693 void LayerTreeHostImpl::removeRenderPasses(RenderPassCuller culler, FrameData& f rame)
608 { 694 {
609 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) { 695 for (size_t it = culler.renderPassListBegin(frame.renderPasses); it != culle r.renderPassListEnd(frame.renderPasses); it = culler.renderPassListNext(it)) {
610 const RenderPass* currentPass = frame.renderPasses[it]; 696 const RenderPass* currentPass = frame.renderPasses[it];
611 const QuadList& quadList = currentPass->quadList(); 697 const QuadList& quadList = currentPass->quad_list;
612 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFro ntBegin(); 698 QuadList::constBackToFrontIterator quadListIterator = quadList.backToFro ntBegin();
613 699
614 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator ) { 700 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator ) {
615 DrawQuad* currentQuad = *quadListIterator; 701 DrawQuad* currentQuad = *quadListIterator;
616 702
617 if (currentQuad->material != DrawQuad::RENDER_PASS) 703 if (currentQuad->material != DrawQuad::RENDER_PASS)
618 continue; 704 continue;
619 705
620 RenderPassDrawQuad* renderPassQuad = static_cast<RenderPassDrawQuad* >(currentQuad); 706 RenderPassDrawQuad* renderPassQuad = static_cast<RenderPassDrawQuad* >(currentQuad);
621 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame)) 707 if (!culler.shouldRemoveRenderPass(*renderPassQuad, frame))
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 // Because the contents of the HUD depend on everything else in the frame, t he contents 800 // Because the contents of the HUD depend on everything else in the frame, t he contents
715 // of its texture are updated as the last thing before the frame is drawn. 801 // of its texture are updated as the last thing before the frame is drawn.
716 if (m_hudLayerImpl) 802 if (m_hudLayerImpl)
717 m_hudLayerImpl->updateHudTexture(m_resourceProvider.get()); 803 m_hudLayerImpl->updateHudTexture(m_resourceProvider.get());
718 804
719 m_renderer->drawFrame(frame.renderPasses, frame.renderPassesById); 805 m_renderer->drawFrame(frame.renderPasses, frame.renderPassesById);
720 806
721 // Once a RenderPass has been drawn, its damage should be cleared in 807 // Once a RenderPass has been drawn, its damage should be cleared in
722 // case the RenderPass will be reused next frame. 808 // case the RenderPass will be reused next frame.
723 for (unsigned int i = 0; i < frame.renderPasses.size(); i++) 809 for (unsigned int i = 0; i < frame.renderPasses.size(); i++)
724 frame.renderPasses[i]->setDamageRect(gfx::RectF()); 810 frame.renderPasses[i]->damage_rect = gfx::RectF();
725 811
726 // The next frame should start by assuming nothing has changed, and changes are noted as they occur. 812 // The next frame should start by assuming nothing has changed, and changes are noted as they occur.
727 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++) 813 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++)
728 (*frame.renderSurfaceLayerList)[i]->renderSurface()->damageTracker()->di dDrawDamagedArea(); 814 (*frame.renderSurfaceLayerList)[i]->renderSurface()->damageTracker()->di dDrawDamagedArea();
729 m_rootLayerImpl->resetAllChangeTrackingForSubtree(); 815 m_rootLayerImpl->resetAllChangeTrackingForSubtree();
730 } 816 }
731 817
732 void LayerTreeHostImpl::didDrawAllLayers(const FrameData& frame) 818 void LayerTreeHostImpl::didDrawAllLayers(const FrameData& frame)
733 { 819 {
734 for (size_t i = 0; i < frame.willDrawLayers.size(); ++i) 820 for (size_t i = 0; i < frame.willDrawLayers.size(); ++i)
(...skipping 768 matching lines...) Expand 10 before | Expand all | Expand 10 after
1503 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); 1589 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController();
1504 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); 1590 double monotonicTime = (time - base::TimeTicks()).InSecondsF();
1505 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1591 if (scrollbarController && scrollbarController->animate(monotonicTime))
1506 m_client->setNeedsRedrawOnImplThread(); 1592 m_client->setNeedsRedrawOnImplThread();
1507 1593
1508 for (size_t i = 0; i < layer->children().size(); ++i) 1594 for (size_t i = 0; i < layer->children().size(); ++i)
1509 animateScrollbarsRecursive(layer->children()[i], time); 1595 animateScrollbarsRecursive(layer->children()[i], time);
1510 } 1596 }
1511 1597
1512 } // namespace cc 1598 } // 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