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

Side by Side Diff: cc/layers/delegated_renderer_layer_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
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/layers/delegated_renderer_layer_impl.h" 5 #include "cc/layers/delegated_renderer_layer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 } 158 }
159 159
160 void DelegatedRendererLayerImpl::SetRenderPasses( 160 void DelegatedRendererLayerImpl::SetRenderPasses(
161 RenderPassList* render_passes_in_draw_order) { 161 RenderPassList* render_passes_in_draw_order) {
162 ClearRenderPasses(); 162 ClearRenderPasses();
163 163
164 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { 164 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) {
165 RenderPassList::iterator to_take = 165 RenderPassList::iterator to_take =
166 render_passes_in_draw_order->begin() + i; 166 render_passes_in_draw_order->begin() + i;
167 render_passes_index_by_id_.insert( 167 render_passes_index_by_id_.insert(
168 std::pair<RenderPass::Id, int>((*to_take)->id, i)); 168 std::pair<RenderPassId, int>((*to_take)->id, i));
169 scoped_ptr<RenderPass> taken_render_pass = 169 scoped_ptr<RenderPass> taken_render_pass =
170 render_passes_in_draw_order->take(to_take); 170 render_passes_in_draw_order->take(to_take);
171 render_passes_in_draw_order_.push_back(taken_render_pass.Pass()); 171 render_passes_in_draw_order_.push_back(taken_render_pass.Pass());
172 } 172 }
173 173
174 // Give back an empty array instead of nulls. 174 // Give back an empty array instead of nulls.
175 render_passes_in_draw_order->clear(); 175 render_passes_in_draw_order->clear();
176 } 176 }
177 177
178 void DelegatedRendererLayerImpl::ClearRenderPasses() { 178 void DelegatedRendererLayerImpl::ClearRenderPasses() {
179 render_passes_index_by_id_.clear(); 179 render_passes_index_by_id_.clear();
180 render_passes_in_draw_order_.clear(); 180 render_passes_in_draw_order_.clear();
181 } 181 }
182 182
183 scoped_ptr<LayerImpl> DelegatedRendererLayerImpl::CreateLayerImpl( 183 scoped_ptr<LayerImpl> DelegatedRendererLayerImpl::CreateLayerImpl(
184 LayerTreeImpl* tree_impl) { 184 LayerTreeImpl* tree_impl) {
185 return DelegatedRendererLayerImpl::Create( 185 return DelegatedRendererLayerImpl::Create(
186 tree_impl, id()).PassAs<LayerImpl>(); 186 tree_impl, id()).PassAs<LayerImpl>();
187 } 187 }
188 188
189 void DelegatedRendererLayerImpl::ReleaseResources() { 189 void DelegatedRendererLayerImpl::ReleaseResources() {
190 ClearRenderPasses(); 190 ClearRenderPasses();
191 ClearChildId(); 191 ClearChildId();
192 } 192 }
193 193
194 static inline int IndexToId(int index) { return index + 1; } 194 static inline int IndexToId(int index) { return index + 1; }
195 static inline int IdToIndex(int id) { return id - 1; } 195 static inline int IdToIndex(int id) { return id - 1; }
196 196
197 RenderPass::Id DelegatedRendererLayerImpl::FirstContributingRenderPassId() 197 RenderPassId DelegatedRendererLayerImpl::FirstContributingRenderPassId() const {
198 const { 198 return RenderPassId(id(), IndexToId(0));
199 return RenderPass::Id(id(), IndexToId(0));
200 } 199 }
201 200
202 RenderPass::Id DelegatedRendererLayerImpl::NextContributingRenderPassId( 201 RenderPassId DelegatedRendererLayerImpl::NextContributingRenderPassId(
203 RenderPass::Id previous) const { 202 RenderPassId previous) const {
204 return RenderPass::Id(previous.layer_id, previous.index + 1); 203 return RenderPassId(previous.layer_id, previous.index + 1);
205 } 204 }
206 205
207 bool DelegatedRendererLayerImpl::ConvertDelegatedRenderPassId( 206 bool DelegatedRendererLayerImpl::ConvertDelegatedRenderPassId(
208 RenderPass::Id delegated_render_pass_id, 207 RenderPassId delegated_render_pass_id,
209 RenderPass::Id* output_render_pass_id) const { 208 RenderPassId* output_render_pass_id) const {
210 base::hash_map<RenderPass::Id, int>::const_iterator found = 209 base::hash_map<RenderPassId, int>::const_iterator found =
211 render_passes_index_by_id_.find(delegated_render_pass_id); 210 render_passes_index_by_id_.find(delegated_render_pass_id);
212 if (found == render_passes_index_by_id_.end()) { 211 if (found == render_passes_index_by_id_.end()) {
213 // Be robust against a RenderPass id that isn't part of the frame. 212 // Be robust against a RenderPass id that isn't part of the frame.
214 return false; 213 return false;
215 } 214 }
216 unsigned delegated_render_pass_index = found->second; 215 unsigned delegated_render_pass_index = found->second;
217 *output_render_pass_id = 216 *output_render_pass_id =
218 RenderPass::Id(id(), IndexToId(delegated_render_pass_index)); 217 RenderPassId(id(), IndexToId(delegated_render_pass_index));
219 return true; 218 return true;
220 } 219 }
221 220
222 void DelegatedRendererLayerImpl::AppendContributingRenderPasses( 221 void DelegatedRendererLayerImpl::AppendContributingRenderPasses(
223 RenderPassSink* render_pass_sink) { 222 RenderPassSink* render_pass_sink) {
224 DCHECK(HasContributingDelegatedRenderPasses()); 223 DCHECK(HasContributingDelegatedRenderPasses());
225 224
226 const RenderPass* root_delegated_render_pass = 225 const RenderPass* root_delegated_render_pass =
227 render_passes_in_draw_order_.back(); 226 render_passes_in_draw_order_.back();
228 gfx::Size frame_size = root_delegated_render_pass->output_rect.size(); 227 gfx::Size frame_size = root_delegated_render_pass->output_rect.size();
229 gfx::Transform delegated_frame_to_root_transform = screen_space_transform(); 228 gfx::Transform delegated_frame_to_root_transform = screen_space_transform();
230 delegated_frame_to_root_transform.Scale(inverse_device_scale_factor_, 229 delegated_frame_to_root_transform.Scale(inverse_device_scale_factor_,
231 inverse_device_scale_factor_); 230 inverse_device_scale_factor_);
232 231
233 for (size_t i = 0; i < render_passes_in_draw_order_.size() - 1; ++i) { 232 for (size_t i = 0; i < render_passes_in_draw_order_.size() - 1; ++i) {
234 RenderPass::Id output_render_pass_id(-1, -1); 233 RenderPassId output_render_pass_id(-1, -1);
235 bool present = 234 bool present =
236 ConvertDelegatedRenderPassId(render_passes_in_draw_order_[i]->id, 235 ConvertDelegatedRenderPassId(render_passes_in_draw_order_[i]->id,
237 &output_render_pass_id); 236 &output_render_pass_id);
238 237
239 // Don't clash with the RenderPass we generate if we own a RenderSurface. 238 // Don't clash with the RenderPass we generate if we own a RenderSurface.
240 DCHECK(present) << render_passes_in_draw_order_[i]->id.layer_id << ", " 239 DCHECK(present) << render_passes_in_draw_order_[i]->id.layer_id << ", "
241 << render_passes_in_draw_order_[i]->id.index; 240 << render_passes_in_draw_order_[i]->id.index;
242 DCHECK_GT(output_render_pass_id.index, 0); 241 DCHECK_GT(output_render_pass_id.index, 0);
243 242
244 scoped_ptr<RenderPass> copy_pass = 243 scoped_ptr<RenderPass> copy_pass =
(...skipping 14 matching lines...) Expand all
259 void DelegatedRendererLayerImpl::AppendQuads( 258 void DelegatedRendererLayerImpl::AppendQuads(
260 RenderPass* render_pass, 259 RenderPass* render_pass,
261 const OcclusionTracker<LayerImpl>& occlusion_tracker, 260 const OcclusionTracker<LayerImpl>& occlusion_tracker,
262 AppendQuadsData* append_quads_data) { 261 AppendQuadsData* append_quads_data) {
263 AppendRainbowDebugBorder(render_pass, append_quads_data); 262 AppendRainbowDebugBorder(render_pass, append_quads_data);
264 263
265 // This list will be empty after a lost context until a new frame arrives. 264 // This list will be empty after a lost context until a new frame arrives.
266 if (render_passes_in_draw_order_.empty()) 265 if (render_passes_in_draw_order_.empty())
267 return; 266 return;
268 267
269 RenderPass::Id target_render_pass_id = append_quads_data->render_pass_id; 268 RenderPassId target_render_pass_id = append_quads_data->render_pass_id;
270 269
271 const RenderPass* root_delegated_render_pass = 270 const RenderPass* root_delegated_render_pass =
272 render_passes_in_draw_order_.back(); 271 render_passes_in_draw_order_.back();
273 272
274 DCHECK(root_delegated_render_pass->output_rect.origin().IsOrigin()); 273 DCHECK(root_delegated_render_pass->output_rect.origin().IsOrigin());
275 gfx::Size frame_size = root_delegated_render_pass->output_rect.size(); 274 gfx::Size frame_size = root_delegated_render_pass->output_rect.size();
276 275
277 // If the index of the RenderPassId is 0, then it is a RenderPass generated 276 // If the index of the RenderPassId is 0, then it is a RenderPass generated
278 // for a layer in this compositor, not the delegating renderer. Then we want 277 // for a layer in this compositor, not the delegating renderer. Then we want
279 // to merge our root RenderPass with the target RenderPass. Otherwise, it is 278 // to merge our root RenderPass with the target RenderPass. Otherwise, it is
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 delegated_quad->visible_rect, quad_content_to_delegated_target_space); 448 delegated_quad->visible_rect, quad_content_to_delegated_target_space);
450 449
451 if (quad_visible_rect.IsEmpty()) 450 if (quad_visible_rect.IsEmpty())
452 continue; 451 continue;
453 452
454 if (delegated_quad->material != DrawQuad::RENDER_PASS) { 453 if (delegated_quad->material != DrawQuad::RENDER_PASS) {
455 DrawQuad* output_quad = render_pass->CopyFromAndAppendDrawQuad( 454 DrawQuad* output_quad = render_pass->CopyFromAndAppendDrawQuad(
456 delegated_quad, output_shared_quad_state); 455 delegated_quad, output_shared_quad_state);
457 output_quad->visible_rect = quad_visible_rect; 456 output_quad->visible_rect = quad_visible_rect;
458 } else { 457 } else {
459 RenderPass::Id delegated_contributing_render_pass_id = 458 RenderPassId delegated_contributing_render_pass_id =
460 RenderPassDrawQuad::MaterialCast(delegated_quad)->render_pass_id; 459 RenderPassDrawQuad::MaterialCast(delegated_quad)->render_pass_id;
461 RenderPass::Id output_contributing_render_pass_id(-1, -1); 460 RenderPassId output_contributing_render_pass_id(-1, -1);
462 461
463 bool present = 462 bool present =
464 ConvertDelegatedRenderPassId(delegated_contributing_render_pass_id, 463 ConvertDelegatedRenderPassId(delegated_contributing_render_pass_id,
465 &output_contributing_render_pass_id); 464 &output_contributing_render_pass_id);
466 465
467 // The frame may have a RenderPassDrawQuad that points to a RenderPass not 466 // The frame may have a RenderPassDrawQuad that points to a RenderPass not
468 // part of the frame. Just ignore these quads. 467 // part of the frame. Just ignore these quads.
469 if (present) { 468 if (present) {
470 DCHECK(output_contributing_render_pass_id != 469 DCHECK(output_contributing_render_pass_id !=
471 append_quads_data->render_pass_id); 470 append_quads_data->render_pass_id);
(...skipping 20 matching lines...) Expand all
492 if (own_child_id_) { 491 if (own_child_id_) {
493 ResourceProvider* provider = layer_tree_impl()->resource_provider(); 492 ResourceProvider* provider = layer_tree_impl()->resource_provider();
494 provider->DestroyChild(child_id_); 493 provider->DestroyChild(child_id_);
495 } 494 }
496 495
497 resources_.clear(); 496 resources_.clear();
498 child_id_ = 0; 497 child_id_ = 0;
499 } 498 }
500 499
501 } // namespace cc 500 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/delegated_renderer_layer_impl.h ('k') | cc/layers/delegated_renderer_layer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698