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

Side by Side Diff: cc/delegated_renderer_layer_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/cc.gyp ('k') | cc/direct_renderer.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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/delegated_renderer_layer_impl.h" 5 #include "cc/delegated_renderer_layer_impl.h"
6 6
7 #include "cc/append_quads_data.h" 7 #include "cc/append_quads_data.h"
8 #include "cc/math_util.h" 8 #include "cc/math_util.h"
9 #include "cc/quad_sink.h" 9 #include "cc/quad_sink.h"
10 #include "cc/render_pass_draw_quad.h" 10 #include "cc/render_pass_draw_quad.h"
11 #include "cc/render_pass_sink.h" 11 #include "cc/render_pass_sink.h"
12 12
13 namespace cc { 13 namespace cc {
14 14
15 DelegatedRendererLayerImpl::DelegatedRendererLayerImpl(LayerTreeImpl* treeImpl, int id) 15 DelegatedRendererLayerImpl::DelegatedRendererLayerImpl(LayerTreeImpl* treeImpl, int id)
16 : LayerImpl(treeImpl, id) 16 : LayerImpl(treeImpl, id)
17 { 17 {
18 } 18 }
19 19
20 DelegatedRendererLayerImpl::~DelegatedRendererLayerImpl() 20 DelegatedRendererLayerImpl::~DelegatedRendererLayerImpl()
21 { 21 {
22 clearRenderPasses(); 22 clearRenderPasses();
23 } 23 }
24 24
25 bool DelegatedRendererLayerImpl::hasDelegatedContent() const 25 bool DelegatedRendererLayerImpl::hasDelegatedContent() const
26 { 26 {
27 return !m_renderPassesInDrawOrder.isEmpty(); 27 return !m_renderPassesInDrawOrder.empty();
28 } 28 }
29 29
30 bool DelegatedRendererLayerImpl::hasContributingDelegatedRenderPasses() const 30 bool DelegatedRendererLayerImpl::hasContributingDelegatedRenderPasses() const
31 { 31 {
32 // The root RenderPass for the layer is merged with its target 32 // The root RenderPass for the layer is merged with its target
33 // RenderPass in each frame. So we only have extra RenderPasses 33 // RenderPass in each frame. So we only have extra RenderPasses
34 // to merge when we have a non-root RenderPass present. 34 // to merge when we have a non-root RenderPass present.
35 return m_renderPassesInDrawOrder.size() > 1; 35 return m_renderPassesInDrawOrder.size() > 1;
36 } 36 }
37 37
38 void DelegatedRendererLayerImpl::setRenderPasses(ScopedPtrVector<RenderPass>& re nderPassesInDrawOrder) 38 void DelegatedRendererLayerImpl::setRenderPasses(ScopedPtrVector<RenderPass>& re nderPassesInDrawOrder)
39 { 39 {
40 gfx::RectF oldRootDamage; 40 gfx::RectF oldRootDamage;
41 if (!m_renderPassesInDrawOrder.isEmpty()) 41 if (!m_renderPassesInDrawOrder.empty())
42 oldRootDamage = m_renderPassesInDrawOrder.last()->damage_rect; 42 oldRootDamage = m_renderPassesInDrawOrder.back()->damage_rect;
43 43
44 clearRenderPasses(); 44 clearRenderPasses();
45 45
46 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) { 46 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) {
47 m_renderPassesIndexById.insert(std::pair<RenderPass::Id, int>(renderPass esInDrawOrder[i]->id, i)); 47 m_renderPassesIndexById.insert(std::pair<RenderPass::Id, int>(renderPass esInDrawOrder[i]->id, i));
48 m_renderPassesInDrawOrder.append(renderPassesInDrawOrder.take(i)); 48 m_renderPassesInDrawOrder.push_back(renderPassesInDrawOrder.take(renderP assesInDrawOrder.begin() + i));
49 } 49 }
50 renderPassesInDrawOrder.clear(); 50 renderPassesInDrawOrder.clear();
51 51
52 if (!m_renderPassesInDrawOrder.isEmpty()) 52 if (!m_renderPassesInDrawOrder.empty())
53 m_renderPassesInDrawOrder.last()->damage_rect.Union(oldRootDamage); 53 m_renderPassesInDrawOrder.back()->damage_rect.Union(oldRootDamage);
54 } 54 }
55 55
56 void DelegatedRendererLayerImpl::clearRenderPasses() 56 void DelegatedRendererLayerImpl::clearRenderPasses()
57 { 57 {
58 // FIXME: Release the resources back to the nested compositor. 58 // FIXME: Release the resources back to the nested compositor.
59 m_renderPassesIndexById.clear(); 59 m_renderPassesIndexById.clear();
60 m_renderPassesInDrawOrder.clear(); 60 m_renderPassesInDrawOrder.clear();
61 } 61 }
62 62
63 void DelegatedRendererLayerImpl::didLoseOutputSurface() 63 void DelegatedRendererLayerImpl::didLoseOutputSurface()
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 95
96 // Don't clash with the RenderPass we generate if we own a RenderSurface Impl. 96 // Don't clash with the RenderPass we generate if we own a RenderSurface Impl.
97 DCHECK(outputRenderPassId.index > 0); 97 DCHECK(outputRenderPassId.index > 0);
98 98
99 renderPassSink.appendRenderPass(m_renderPassesInDrawOrder[i]->Copy(outpu tRenderPassId)); 99 renderPassSink.appendRenderPass(m_renderPassesInDrawOrder[i]->Copy(outpu tRenderPassId));
100 } 100 }
101 } 101 }
102 102
103 void DelegatedRendererLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData & appendQuadsData) 103 void DelegatedRendererLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData & appendQuadsData)
104 { 104 {
105 if (m_renderPassesInDrawOrder.isEmpty()) 105 if (m_renderPassesInDrawOrder.empty())
106 return; 106 return;
107 107
108 RenderPass::Id targetRenderPassId = appendQuadsData.renderPassId; 108 RenderPass::Id targetRenderPassId = appendQuadsData.renderPassId;
109 109
110 // If the index of the renderPassId is 0, then it is a renderPass generated for a layer 110 // If the index of the renderPassId is 0, then it is a renderPass generated for a layer
111 // in this compositor, not the delegated renderer. Then we want to merge our root renderPass with 111 // in this compositor, not the delegated renderer. Then we want to merge our root renderPass with
112 // the target renderPass. Otherwise, it is some renderPass which we added fr om the delegated 112 // the target renderPass. Otherwise, it is some renderPass which we added fr om the delegated
113 // renderer. 113 // renderer.
114 bool shouldMergeRootRenderPassWithTarget = !targetRenderPassId.index; 114 bool shouldMergeRootRenderPassWithTarget = !targetRenderPassId.index;
115 if (shouldMergeRootRenderPassWithTarget) { 115 if (shouldMergeRootRenderPassWithTarget) {
116 // Verify that the renderPass we are appending to is created our renderT arget. 116 // Verify that the renderPass we are appending to is created our renderT arget.
117 DCHECK(targetRenderPassId.layer_id == renderTarget()->id()); 117 DCHECK(targetRenderPassId.layer_id == renderTarget()->id());
118 118
119 const RenderPass* rootDelegatedRenderPass = m_renderPassesInDrawOrder.la st(); 119 const RenderPass* rootDelegatedRenderPass = m_renderPassesInDrawOrder.ba ck();
120 appendRenderPassQuads(quadSink, appendQuadsData, rootDelegatedRenderPass ); 120 appendRenderPassQuads(quadSink, appendQuadsData, rootDelegatedRenderPass );
121 } else { 121 } else {
122 // Verify that the renderPass we are appending to was created by us. 122 // Verify that the renderPass we are appending to was created by us.
123 DCHECK(targetRenderPassId.layer_id == id()); 123 DCHECK(targetRenderPassId.layer_id == id());
124 124
125 int renderPassIndex = idToIndex(targetRenderPassId.index); 125 int renderPassIndex = idToIndex(targetRenderPassId.index);
126 const RenderPass* delegatedRenderPass = m_renderPassesInDrawOrder[render PassIndex]; 126 const RenderPass* delegatedRenderPass = m_renderPassesInDrawOrder[render PassIndex];
127 appendRenderPassQuads(quadSink, appendQuadsData, delegatedRenderPass); 127 appendRenderPassQuads(quadSink, appendQuadsData, delegatedRenderPass);
128 } 128 }
129 } 129 }
130 130
131 void DelegatedRendererLayerImpl::appendRenderPassQuads(QuadSink& quadSink, Appen dQuadsData& appendQuadsData, const RenderPass* delegatedRenderPass) const 131 void DelegatedRendererLayerImpl::appendRenderPassQuads(QuadSink& quadSink, Appen dQuadsData& appendQuadsData, const RenderPass* delegatedRenderPass) const
132 { 132 {
133 const SharedQuadState* currentSharedQuadState = 0; 133 const SharedQuadState* currentSharedQuadState = 0;
134 SharedQuadState* copiedSharedQuadState = 0; 134 SharedQuadState* copiedSharedQuadState = 0;
135 for (size_t i = 0; i < delegatedRenderPass->quad_list.size(); ++i) { 135 for (size_t i = 0; i < delegatedRenderPass->quad_list.size(); ++i) {
136 const DrawQuad* quad = delegatedRenderPass->quad_list[i]; 136 const DrawQuad* quad = delegatedRenderPass->quad_list[i];
137 137
138 if (quad->shared_quad_state != currentSharedQuadState) { 138 if (quad->shared_quad_state != currentSharedQuadState) {
139 currentSharedQuadState = quad->shared_quad_state; 139 currentSharedQuadState = quad->shared_quad_state;
140 copiedSharedQuadState = quadSink.useSharedQuadState(currentSharedQua dState->Copy()); 140 copiedSharedQuadState = quadSink.useSharedQuadState(currentSharedQua dState->Copy());
141 bool targetIsFromDelegatedRendererLayer = appendQuadsData.renderPass Id.layer_id == id(); 141 bool targetIsFromDelegatedRendererLayer = appendQuadsData.renderPass Id.layer_id == id();
142 if (!targetIsFromDelegatedRendererLayer) { 142 if (!targetIsFromDelegatedRendererLayer) {
143 // Should be the root render pass. 143 // Should be the root render pass.
144 DCHECK(delegatedRenderPass == m_renderPassesInDrawOrder.last()); 144 DCHECK(delegatedRenderPass == m_renderPassesInDrawOrder.back());
145 // This layer must be drawing to a renderTarget other than itself. 145 // This layer must be drawing to a renderTarget other than itself.
146 DCHECK(renderTarget() != this); 146 DCHECK(renderTarget() != this);
147 147
148 copiedSharedQuadState->content_to_target_transform = copiedSharedQ uadState->content_to_target_transform * drawTransform(); 148 copiedSharedQuadState->content_to_target_transform = copiedSharedQ uadState->content_to_target_transform * drawTransform();
149 copiedSharedQuadState->clipped_rect_in_target = MathUtil::mapClipp edRect(drawTransform(), copiedSharedQuadState->clipped_rect_in_target); 149 copiedSharedQuadState->clipped_rect_in_target = MathUtil::mapClipp edRect(drawTransform(), copiedSharedQuadState->clipped_rect_in_target);
150 copiedSharedQuadState->opacity *= drawOpacity(); 150 copiedSharedQuadState->opacity *= drawOpacity();
151 } 151 }
152 } 152 }
153 DCHECK(copiedSharedQuadState); 153 DCHECK(copiedSharedQuadState);
154 154
(...skipping 12 matching lines...) Expand all
167 quadSink.append(copyQuad.Pass(), appendQuadsData); 167 quadSink.append(copyQuad.Pass(), appendQuadsData);
168 } 168 }
169 } 169 }
170 170
171 const char* DelegatedRendererLayerImpl::layerTypeAsString() const 171 const char* DelegatedRendererLayerImpl::layerTypeAsString() const
172 { 172 {
173 return "DelegatedRendererLayer"; 173 return "DelegatedRendererLayer";
174 } 174 }
175 175
176 } // namespace cc 176 } // namespace cc
OLDNEW
« no previous file with comments | « cc/cc.gyp ('k') | cc/direct_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698