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

Side by Side Diff: cc/layers/delegated_renderer_layer_impl.cc

Issue 308193003: Removed QuadSink and MockQuadCuller (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@plumLayerImpl
Patch Set: rm unused line Created 6 years, 6 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"
11 #include "base/containers/hash_tables.h" 11 #include "base/containers/hash_tables.h"
12 #include "cc/base/math_util.h" 12 #include "cc/base/math_util.h"
13 #include "cc/layers/append_quads_data.h" 13 #include "cc/layers/append_quads_data.h"
14 #include "cc/layers/quad_sink.h"
15 #include "cc/layers/render_pass_sink.h" 14 #include "cc/layers/render_pass_sink.h"
16 #include "cc/output/delegated_frame_data.h" 15 #include "cc/output/delegated_frame_data.h"
17 #include "cc/quads/render_pass_draw_quad.h" 16 #include "cc/quads/render_pass_draw_quad.h"
18 #include "cc/quads/solid_color_draw_quad.h" 17 #include "cc/quads/solid_color_draw_quad.h"
19 #include "cc/trees/layer_tree_impl.h" 18 #include "cc/trees/layer_tree_impl.h"
19 #include "cc/trees/occlusion_tracker.h"
20 20
21 namespace cc { 21 namespace cc {
22 22
23 DelegatedRendererLayerImpl::DelegatedRendererLayerImpl( 23 DelegatedRendererLayerImpl::DelegatedRendererLayerImpl(
24 LayerTreeImpl* tree_impl, int id) 24 LayerTreeImpl* tree_impl, int id)
25 : LayerImpl(tree_impl, id), 25 : LayerImpl(tree_impl, id),
26 have_render_passes_to_push_(false), 26 have_render_passes_to_push_(false),
27 child_id_(0), 27 child_id_(0),
28 own_child_id_(false) { 28 own_child_id_(false) {
29 } 29 }
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 } 266 }
267 267
268 bool DelegatedRendererLayerImpl::WillDraw(DrawMode draw_mode, 268 bool DelegatedRendererLayerImpl::WillDraw(DrawMode draw_mode,
269 ResourceProvider* resource_provider) { 269 ResourceProvider* resource_provider) {
270 if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) 270 if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE)
271 return false; 271 return false;
272 return LayerImpl::WillDraw(draw_mode, resource_provider); 272 return LayerImpl::WillDraw(draw_mode, resource_provider);
273 } 273 }
274 274
275 void DelegatedRendererLayerImpl::AppendQuads( 275 void DelegatedRendererLayerImpl::AppendQuads(
276 QuadSink* quad_sink, 276 RenderPass* render_pass,
277 const OcclusionTracker<LayerImpl>& occlusion_tracker,
277 AppendQuadsData* append_quads_data) { 278 AppendQuadsData* append_quads_data) {
278 AppendRainbowDebugBorder(quad_sink, append_quads_data); 279 AppendRainbowDebugBorder(render_pass, append_quads_data);
279 280
280 // This list will be empty after a lost context until a new frame arrives. 281 // This list will be empty after a lost context until a new frame arrives.
281 if (render_passes_in_draw_order_.empty()) 282 if (render_passes_in_draw_order_.empty())
282 return; 283 return;
283 284
284 RenderPass::Id target_render_pass_id = append_quads_data->render_pass_id; 285 RenderPass::Id target_render_pass_id = append_quads_data->render_pass_id;
285 286
286 const RenderPass* root_delegated_render_pass = 287 const RenderPass* root_delegated_render_pass =
287 render_passes_in_draw_order_.back(); 288 render_passes_in_draw_order_.back();
288 289
289 DCHECK(root_delegated_render_pass->output_rect.origin().IsOrigin()); 290 DCHECK(root_delegated_render_pass->output_rect.origin().IsOrigin());
290 gfx::Size frame_size = root_delegated_render_pass->output_rect.size(); 291 gfx::Size frame_size = root_delegated_render_pass->output_rect.size();
291 292
292 // If the index of the RenderPassId is 0, then it is a RenderPass generated 293 // If the index of the RenderPassId is 0, then it is a RenderPass generated
293 // for a layer in this compositor, not the delegating renderer. Then we want 294 // for a layer in this compositor, not the delegating renderer. Then we want
294 // to merge our root RenderPass with the target RenderPass. Otherwise, it is 295 // to merge our root RenderPass with the target RenderPass. Otherwise, it is
295 // some RenderPass which we added from the delegating renderer. 296 // some RenderPass which we added from the delegating renderer.
296 bool should_merge_root_render_pass_with_target = !target_render_pass_id.index; 297 bool should_merge_root_render_pass_with_target = !target_render_pass_id.index;
297 if (should_merge_root_render_pass_with_target) { 298 if (should_merge_root_render_pass_with_target) {
298 // Verify that the RenderPass we are appending to is created by our 299 // Verify that the RenderPass we are appending to is created by our
299 // render_target. 300 // render_target.
300 DCHECK(target_render_pass_id.layer_id == render_target()->id()); 301 DCHECK(target_render_pass_id.layer_id == render_target()->id());
301 302
302 AppendRenderPassQuads( 303 AppendRenderPassQuads(render_pass,
303 quad_sink, append_quads_data, root_delegated_render_pass, frame_size); 304 occlusion_tracker,
305 append_quads_data,
306 root_delegated_render_pass,
307 frame_size);
304 } else { 308 } else {
305 // Verify that the RenderPass we are appending to was created by us. 309 // Verify that the RenderPass we are appending to was created by us.
306 DCHECK(target_render_pass_id.layer_id == id()); 310 DCHECK(target_render_pass_id.layer_id == id());
307 311
308 int render_pass_index = IdToIndex(target_render_pass_id.index); 312 int render_pass_index = IdToIndex(target_render_pass_id.index);
309 const RenderPass* delegated_render_pass = 313 const RenderPass* delegated_render_pass =
310 render_passes_in_draw_order_[render_pass_index]; 314 render_passes_in_draw_order_[render_pass_index];
311 AppendRenderPassQuads( 315 AppendRenderPassQuads(render_pass,
312 quad_sink, append_quads_data, delegated_render_pass, frame_size); 316 occlusion_tracker,
317 append_quads_data,
318 delegated_render_pass,
319 frame_size);
313 } 320 }
314 } 321 }
315 322
316 void DelegatedRendererLayerImpl::AppendRainbowDebugBorder( 323 void DelegatedRendererLayerImpl::AppendRainbowDebugBorder(
317 QuadSink* quad_sink, 324 RenderPass* render_pass,
318 AppendQuadsData* append_quads_data) { 325 AppendQuadsData* append_quads_data) {
319 if (!ShowDebugBorders()) 326 if (!ShowDebugBorders())
320 return; 327 return;
321 328
322 SharedQuadState* shared_quad_state = quad_sink->CreateSharedQuadState(); 329 SharedQuadState* shared_quad_state =
330 render_pass->CreateAndAppendSharedQuadState();
323 PopulateSharedQuadState(shared_quad_state); 331 PopulateSharedQuadState(shared_quad_state);
324 332
325 SkColor color; 333 SkColor color;
326 float border_width; 334 float border_width;
327 GetDebugBorderProperties(&color, &border_width); 335 GetDebugBorderProperties(&color, &border_width);
328 336
329 SkColor colors[] = { 337 SkColor colors[] = {
330 0x80ff0000, // Red. 338 0x80ff0000, // Red.
331 0x80ffa500, // Orange. 339 0x80ffa500, // Orange.
332 0x80ffff00, // Yellow. 340 0x80ffff00, // Yellow.
(...skipping 26 matching lines...) Expand all
359 border_width, 367 border_width,
360 height); 368 height);
361 369
362 if (top.IsEmpty() && left.IsEmpty()) 370 if (top.IsEmpty() && left.IsEmpty())
363 break; 371 break;
364 372
365 if (!top.IsEmpty()) { 373 if (!top.IsEmpty()) {
366 scoped_ptr<SolidColorDrawQuad> top_quad = SolidColorDrawQuad::Create(); 374 scoped_ptr<SolidColorDrawQuad> top_quad = SolidColorDrawQuad::Create();
367 top_quad->SetNew( 375 top_quad->SetNew(
368 shared_quad_state, top, top, colors[i % kNumColors], false); 376 shared_quad_state, top, top, colors[i % kNumColors], false);
369 quad_sink->Append(top_quad.PassAs<DrawQuad>()); 377 render_pass->AppendDrawQuad(top_quad.PassAs<DrawQuad>());
370 378
371 scoped_ptr<SolidColorDrawQuad> bottom_quad = SolidColorDrawQuad::Create(); 379 scoped_ptr<SolidColorDrawQuad> bottom_quad = SolidColorDrawQuad::Create();
372 bottom_quad->SetNew(shared_quad_state, 380 bottom_quad->SetNew(shared_quad_state,
373 bottom, 381 bottom,
374 bottom, 382 bottom,
375 colors[kNumColors - 1 - (i % kNumColors)], 383 colors[kNumColors - 1 - (i % kNumColors)],
376 false); 384 false);
377 quad_sink->Append(bottom_quad.PassAs<DrawQuad>()); 385 render_pass->AppendDrawQuad(bottom_quad.PassAs<DrawQuad>());
378 } 386 }
379 if (!left.IsEmpty()) { 387 if (!left.IsEmpty()) {
380 scoped_ptr<SolidColorDrawQuad> left_quad = SolidColorDrawQuad::Create(); 388 scoped_ptr<SolidColorDrawQuad> left_quad = SolidColorDrawQuad::Create();
381 left_quad->SetNew(shared_quad_state, 389 left_quad->SetNew(shared_quad_state,
382 left, 390 left,
383 left, 391 left,
384 colors[kNumColors - 1 - (i % kNumColors)], 392 colors[kNumColors - 1 - (i % kNumColors)],
385 false); 393 false);
386 quad_sink->Append(left_quad.PassAs<DrawQuad>()); 394 render_pass->AppendDrawQuad(left_quad.PassAs<DrawQuad>());
387 395
388 scoped_ptr<SolidColorDrawQuad> right_quad = SolidColorDrawQuad::Create(); 396 scoped_ptr<SolidColorDrawQuad> right_quad = SolidColorDrawQuad::Create();
389 right_quad->SetNew( 397 right_quad->SetNew(
390 shared_quad_state, right, right, colors[i % kNumColors], false); 398 shared_quad_state, right, right, colors[i % kNumColors], false);
391 quad_sink->Append(right_quad.PassAs<DrawQuad>()); 399 render_pass->AppendDrawQuad(right_quad.PassAs<DrawQuad>());
392 } 400 }
393 } 401 }
394 } 402 }
395 403
396 void DelegatedRendererLayerImpl::AppendRenderPassQuads( 404 void DelegatedRendererLayerImpl::AppendRenderPassQuads(
397 QuadSink* quad_sink, 405 RenderPass* render_pass,
406 const OcclusionTracker<LayerImpl>& occlusion_tracker,
398 AppendQuadsData* append_quads_data, 407 AppendQuadsData* append_quads_data,
399 const RenderPass* delegated_render_pass, 408 const RenderPass* delegated_render_pass,
400 const gfx::Size& frame_size) const { 409 const gfx::Size& frame_size) const {
401
402 const SharedQuadState* delegated_shared_quad_state = NULL; 410 const SharedQuadState* delegated_shared_quad_state = NULL;
403 SharedQuadState* output_shared_quad_state = NULL; 411 SharedQuadState* output_shared_quad_state = NULL;
404 412
405 for (size_t i = 0; i < delegated_render_pass->quad_list.size(); ++i) { 413 for (size_t i = 0; i < delegated_render_pass->quad_list.size(); ++i) {
406 const DrawQuad* delegated_quad = delegated_render_pass->quad_list[i]; 414 const DrawQuad* delegated_quad = delegated_render_pass->quad_list[i];
407 415
408 if (delegated_quad->shared_quad_state != delegated_shared_quad_state) { 416 if (delegated_quad->shared_quad_state != delegated_shared_quad_state) {
409 delegated_shared_quad_state = delegated_quad->shared_quad_state; 417 delegated_shared_quad_state = delegated_quad->shared_quad_state;
410 output_shared_quad_state = quad_sink->CreateSharedQuadState(); 418 output_shared_quad_state = render_pass->CreateAndAppendSharedQuadState();
411 output_shared_quad_state->CopyFrom(delegated_shared_quad_state); 419 output_shared_quad_state->CopyFrom(delegated_shared_quad_state);
412 420
413 bool is_root_delegated_render_pass = 421 bool is_root_delegated_render_pass =
414 delegated_render_pass == render_passes_in_draw_order_.back(); 422 delegated_render_pass == render_passes_in_draw_order_.back();
415 if (is_root_delegated_render_pass) { 423 if (is_root_delegated_render_pass) {
416 // Don't allow areas inside the bounds that are empty. 424 // Don't allow areas inside the bounds that are empty.
417 DCHECK(display_size_.IsEmpty() || 425 DCHECK(display_size_.IsEmpty() ||
418 gfx::Rect(display_size_).Contains(gfx::Rect(bounds()))); 426 gfx::Rect(display_size_).Contains(gfx::Rect(bounds())));
419 gfx::Transform delegated_frame_to_target_transform = 427 gfx::Transform delegated_frame_to_target_transform =
420 draw_transform() * DelegatedFrameToLayerSpaceTransform(frame_size); 428 draw_transform() * DelegatedFrameToLayerSpaceTransform(frame_size);
(...skipping 18 matching lines...) Expand all
439 } 447 }
440 output_shared_quad_state->clip_rect = clip_rect; 448 output_shared_quad_state->clip_rect = clip_rect;
441 output_shared_quad_state->is_clipped = true; 449 output_shared_quad_state->is_clipped = true;
442 } 450 }
443 451
444 output_shared_quad_state->opacity *= draw_opacity(); 452 output_shared_quad_state->opacity *= draw_opacity();
445 } 453 }
446 } 454 }
447 DCHECK(output_shared_quad_state); 455 DCHECK(output_shared_quad_state);
448 456
449 gfx::Rect quad_visible_rect = quad_sink->UnoccludedContentRect( 457 gfx::Rect quad_visible_rect = occlusion_tracker.UnoccludedContentRect(
450 this, 458 this->render_target(),
451 delegated_quad->visible_rect, 459 delegated_quad->visible_rect,
452 output_shared_quad_state->content_to_target_transform); 460 output_shared_quad_state->content_to_target_transform);
453 if (quad_visible_rect.IsEmpty()) 461 if (quad_visible_rect.IsEmpty())
454 continue; 462 continue;
455 463
456 scoped_ptr<DrawQuad> output_quad; 464 scoped_ptr<DrawQuad> output_quad;
457 if (delegated_quad->material != DrawQuad::RENDER_PASS) { 465 if (delegated_quad->material != DrawQuad::RENDER_PASS) {
458 output_quad = delegated_quad->Copy(output_shared_quad_state); 466 output_quad = delegated_quad->Copy(output_shared_quad_state);
459 output_quad->visible_rect = quad_visible_rect; 467 output_quad->visible_rect = quad_visible_rect;
460 } else { 468 } else {
(...skipping 12 matching lines...) Expand all
473 append_quads_data->render_pass_id); 481 append_quads_data->render_pass_id);
474 482
475 output_quad = RenderPassDrawQuad::MaterialCast(delegated_quad)->Copy( 483 output_quad = RenderPassDrawQuad::MaterialCast(delegated_quad)->Copy(
476 output_shared_quad_state, 484 output_shared_quad_state,
477 output_contributing_render_pass_id).PassAs<DrawQuad>(); 485 output_contributing_render_pass_id).PassAs<DrawQuad>();
478 output_quad->visible_rect = quad_visible_rect; 486 output_quad->visible_rect = quad_visible_rect;
479 } 487 }
480 } 488 }
481 489
482 if (output_quad) 490 if (output_quad)
483 quad_sink->Append(output_quad.Pass()); 491 render_pass->AppendDrawQuad(output_quad.Pass());
484 } 492 }
485 } 493 }
486 494
487 const char* DelegatedRendererLayerImpl::LayerTypeAsString() const { 495 const char* DelegatedRendererLayerImpl::LayerTypeAsString() const {
488 return "cc::DelegatedRendererLayerImpl"; 496 return "cc::DelegatedRendererLayerImpl";
489 } 497 }
490 498
491 void DelegatedRendererLayerImpl::ClearChildId() { 499 void DelegatedRendererLayerImpl::ClearChildId() {
492 if (!child_id_) 500 if (!child_id_)
493 return; 501 return;
494 502
495 if (own_child_id_) { 503 if (own_child_id_) {
496 ResourceProvider* provider = layer_tree_impl()->resource_provider(); 504 ResourceProvider* provider = layer_tree_impl()->resource_provider();
497 provider->DestroyChild(child_id_); 505 provider->DestroyChild(child_id_);
498 } 506 }
499 507
500 resources_.clear(); 508 resources_.clear();
501 child_id_ = 0; 509 child_id_ = 0;
502 } 510 }
503 511
504 } // namespace cc 512 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698