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

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 404563005: Make RenderPass::Id an isolated class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: one more case in mojo Created 6 years, 4 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
« no previous file with comments | « cc/test/render_pass_test_utils.cc ('k') | cc/trees/layer_tree_host_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/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after
792 792
793 int num_missing_tiles = 0; 793 int num_missing_tiles = 0;
794 int num_incomplete_tiles = 0; 794 int num_incomplete_tiles = 0;
795 795
796 LayerIteratorType end = 796 LayerIteratorType end =
797 LayerIteratorType::End(frame->render_surface_layer_list); 797 LayerIteratorType::End(frame->render_surface_layer_list);
798 for (LayerIteratorType it = 798 for (LayerIteratorType it =
799 LayerIteratorType::Begin(frame->render_surface_layer_list); 799 LayerIteratorType::Begin(frame->render_surface_layer_list);
800 it != end; 800 it != end;
801 ++it) { 801 ++it) {
802 RenderPass::Id target_render_pass_id = 802 RenderPassId target_render_pass_id =
803 it.target_render_surface_layer()->render_surface()->RenderPassId(); 803 it.target_render_surface_layer()->render_surface()->GetRenderPassId();
804 RenderPass* target_render_pass = 804 RenderPass* target_render_pass =
805 frame->render_passes_by_id[target_render_pass_id]; 805 frame->render_passes_by_id[target_render_pass_id];
806 806
807 occlusion_tracker.EnterLayer(it); 807 occlusion_tracker.EnterLayer(it);
808 808
809 AppendQuadsData append_quads_data(target_render_pass_id); 809 AppendQuadsData append_quads_data(target_render_pass_id);
810 810
811 if (it.represents_target_render_surface()) { 811 if (it.represents_target_render_surface()) {
812 if (it->HasCopyRequest()) { 812 if (it->HasCopyRequest()) {
813 have_copy_request = true; 813 have_copy_request = true;
814 it->TakeCopyRequestsAndTransformToTarget( 814 it->TakeCopyRequestsAndTransformToTarget(
815 &target_render_pass->copy_requests); 815 &target_render_pass->copy_requests);
816 } 816 }
817 } else if (it.represents_contributing_render_surface() && 817 } else if (it.represents_contributing_render_surface() &&
818 it->render_surface()->contributes_to_drawn_surface()) { 818 it->render_surface()->contributes_to_drawn_surface()) {
819 RenderPass::Id contributing_render_pass_id = 819 RenderPassId contributing_render_pass_id =
820 it->render_surface()->RenderPassId(); 820 it->render_surface()->GetRenderPassId();
821 RenderPass* contributing_render_pass = 821 RenderPass* contributing_render_pass =
822 frame->render_passes_by_id[contributing_render_pass_id]; 822 frame->render_passes_by_id[contributing_render_pass_id];
823 AppendQuadsForRenderSurfaceLayer(target_render_pass, 823 AppendQuadsForRenderSurfaceLayer(target_render_pass,
824 *it, 824 *it,
825 contributing_render_pass, 825 contributing_render_pass,
826 occlusion_tracker, 826 occlusion_tracker,
827 &append_quads_data); 827 &append_quads_data);
828 } else if (it.represents_itself() && 828 } else if (it.represents_itself() &&
829 !it->visible_content_rect().IsEmpty()) { 829 !it->visible_content_rect().IsEmpty()) {
830 bool occluded = occlusion_tracker.Occluded(it->render_target(), 830 bool occluded = occlusion_tracker.Occluded(it->render_target(),
831 it->visible_content_rect(), 831 it->visible_content_rect(),
832 it->draw_transform()); 832 it->draw_transform());
833 if (!occluded && it->WillDraw(draw_mode, resource_provider_.get())) { 833 if (!occluded && it->WillDraw(draw_mode, resource_provider_.get())) {
834 DCHECK_EQ(active_tree_, it->layer_tree_impl()); 834 DCHECK_EQ(active_tree_, it->layer_tree_impl());
835 835
836 frame->will_draw_layers.push_back(*it); 836 frame->will_draw_layers.push_back(*it);
837 837
838 if (it->HasContributingDelegatedRenderPasses()) { 838 if (it->HasContributingDelegatedRenderPasses()) {
839 RenderPass::Id contributing_render_pass_id = 839 RenderPassId contributing_render_pass_id =
840 it->FirstContributingRenderPassId(); 840 it->FirstContributingRenderPassId();
841 while (frame->render_passes_by_id.find(contributing_render_pass_id) != 841 while (frame->render_passes_by_id.find(contributing_render_pass_id) !=
842 frame->render_passes_by_id.end()) { 842 frame->render_passes_by_id.end()) {
843 RenderPass* render_pass = 843 RenderPass* render_pass =
844 frame->render_passes_by_id[contributing_render_pass_id]; 844 frame->render_passes_by_id[contributing_render_pass_id];
845 845
846 AppendQuadsData append_quads_data(render_pass->id); 846 AppendQuadsData append_quads_data(render_pass->id);
847 AppendQuadsForLayer(render_pass, 847 AppendQuadsForLayer(render_pass,
848 *it, 848 *it,
849 occlusion_tracker, 849 occlusion_tracker,
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 void LayerTreeHostImpl::DidAnimateScrollOffset() { 978 void LayerTreeHostImpl::DidAnimateScrollOffset() {
979 client_->SetNeedsCommitOnImplThread(); 979 client_->SetNeedsCommitOnImplThread();
980 client_->RenewTreePriority(); 980 client_->RenewTreePriority();
981 } 981 }
982 982
983 void LayerTreeHostImpl::SetViewportDamage(const gfx::Rect& damage_rect) { 983 void LayerTreeHostImpl::SetViewportDamage(const gfx::Rect& damage_rect) {
984 viewport_damage_rect_.Union(damage_rect); 984 viewport_damage_rect_.Union(damage_rect);
985 } 985 }
986 986
987 static inline RenderPass* FindRenderPassById( 987 static inline RenderPass* FindRenderPassById(
988 RenderPass::Id render_pass_id, 988 RenderPassId render_pass_id,
989 const LayerTreeHostImpl::FrameData& frame) { 989 const LayerTreeHostImpl::FrameData& frame) {
990 RenderPassIdHashMap::const_iterator it = 990 RenderPassIdHashMap::const_iterator it =
991 frame.render_passes_by_id.find(render_pass_id); 991 frame.render_passes_by_id.find(render_pass_id);
992 return it != frame.render_passes_by_id.end() ? it->second : NULL; 992 return it != frame.render_passes_by_id.end() ? it->second : NULL;
993 } 993 }
994 994
995 static void RemoveRenderPassesRecursive(RenderPass::Id remove_render_pass_id, 995 static void RemoveRenderPassesRecursive(RenderPassId remove_render_pass_id,
996 LayerTreeHostImpl::FrameData* frame) { 996 LayerTreeHostImpl::FrameData* frame) {
997 RenderPass* remove_render_pass = 997 RenderPass* remove_render_pass =
998 FindRenderPassById(remove_render_pass_id, *frame); 998 FindRenderPassById(remove_render_pass_id, *frame);
999 // The pass was already removed by another quad - probably the original, and 999 // The pass was already removed by another quad - probably the original, and
1000 // we are the replica. 1000 // we are the replica.
1001 if (!remove_render_pass) 1001 if (!remove_render_pass)
1002 return; 1002 return;
1003 RenderPassList& render_passes = frame->render_passes; 1003 RenderPassList& render_passes = frame->render_passes;
1004 RenderPassList::iterator to_remove = std::find(render_passes.begin(), 1004 RenderPassList::iterator to_remove = std::find(render_passes.begin(),
1005 render_passes.end(), 1005 render_passes.end(),
1006 remove_render_pass); 1006 remove_render_pass);
1007 1007
1008 DCHECK(to_remove != render_passes.end()); 1008 DCHECK(to_remove != render_passes.end());
1009 1009
1010 scoped_ptr<RenderPass> removed_pass = render_passes.take(to_remove); 1010 scoped_ptr<RenderPass> removed_pass = render_passes.take(to_remove);
1011 frame->render_passes.erase(to_remove); 1011 frame->render_passes.erase(to_remove);
1012 frame->render_passes_by_id.erase(remove_render_pass_id); 1012 frame->render_passes_by_id.erase(remove_render_pass_id);
1013 1013
1014 // Now follow up for all RenderPass quads and remove their RenderPasses 1014 // Now follow up for all RenderPass quads and remove their RenderPasses
1015 // recursively. 1015 // recursively.
1016 const QuadList& quad_list = removed_pass->quad_list; 1016 const QuadList& quad_list = removed_pass->quad_list;
1017 QuadList::ConstBackToFrontIterator quad_list_iterator = 1017 QuadList::ConstBackToFrontIterator quad_list_iterator =
1018 quad_list.BackToFrontBegin(); 1018 quad_list.BackToFrontBegin();
1019 for (; quad_list_iterator != quad_list.BackToFrontEnd(); 1019 for (; quad_list_iterator != quad_list.BackToFrontEnd();
1020 ++quad_list_iterator) { 1020 ++quad_list_iterator) {
1021 DrawQuad* current_quad = (*quad_list_iterator); 1021 DrawQuad* current_quad = (*quad_list_iterator);
1022 if (current_quad->material != DrawQuad::RENDER_PASS) 1022 if (current_quad->material != DrawQuad::RENDER_PASS)
1023 continue; 1023 continue;
1024 1024
1025 RenderPass::Id next_remove_render_pass_id = 1025 RenderPassId next_remove_render_pass_id =
1026 RenderPassDrawQuad::MaterialCast(current_quad)->render_pass_id; 1026 RenderPassDrawQuad::MaterialCast(current_quad)->render_pass_id;
1027 RemoveRenderPassesRecursive(next_remove_render_pass_id, frame); 1027 RemoveRenderPassesRecursive(next_remove_render_pass_id, frame);
1028 } 1028 }
1029 } 1029 }
1030 1030
1031 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::ShouldRemoveRenderPass( 1031 bool LayerTreeHostImpl::CullRenderPassesWithNoQuads::ShouldRemoveRenderPass(
1032 const RenderPassDrawQuad& quad, const FrameData& frame) const { 1032 const RenderPassDrawQuad& quad, const FrameData& frame) const {
1033 const RenderPass* render_pass = 1033 const RenderPass* render_pass =
1034 FindRenderPassById(quad.render_pass_id, frame); 1034 FindRenderPassById(quad.render_pass_id, frame);
1035 if (!render_pass) 1035 if (!render_pass)
(...skipping 2376 matching lines...) Expand 10 before | Expand all | Expand 10 after
3412 } 3412 }
3413 3413
3414 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { 3414 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) {
3415 std::vector<PictureLayerImpl*>::iterator it = 3415 std::vector<PictureLayerImpl*>::iterator it =
3416 std::find(picture_layers_.begin(), picture_layers_.end(), layer); 3416 std::find(picture_layers_.begin(), picture_layers_.end(), layer);
3417 DCHECK(it != picture_layers_.end()); 3417 DCHECK(it != picture_layers_.end());
3418 picture_layers_.erase(it); 3418 picture_layers_.erase(it);
3419 } 3419 }
3420 3420
3421 } // namespace cc 3421 } // namespace cc
OLDNEW
« no previous file with comments | « cc/test/render_pass_test_utils.cc ('k') | cc/trees/layer_tree_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698