OLD | NEW |
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 | 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" |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 | 364 |
365 void LayerTreeHostImpl::TrackDamageForAllSurfaces( | 365 void LayerTreeHostImpl::TrackDamageForAllSurfaces( |
366 LayerImpl* root_draw_layer, | 366 LayerImpl* root_draw_layer, |
367 const LayerList& render_surface_layer_list) { | 367 const LayerList& render_surface_layer_list) { |
368 // For now, we use damage tracking to compute a global scissor. To do this, we | 368 // For now, we use damage tracking to compute a global scissor. To do this, we |
369 // must compute all damage tracking before drawing anything, so that we know | 369 // must compute all damage tracking before drawing anything, so that we know |
370 // the root damage rect. The root damage rect is then used to scissor each | 370 // the root damage rect. The root damage rect is then used to scissor each |
371 // surface. | 371 // surface. |
372 | 372 |
373 for (int surface_index = render_surface_layer_list.size() - 1; | 373 for (int surface_index = render_surface_layer_list.size() - 1; |
374 surface_index >= 0 ; | 374 surface_index >= 0; |
375 --surface_index) { | 375 --surface_index) { |
376 LayerImpl* render_surface_layer = render_surface_layer_list[surface_index]; | 376 LayerImpl* render_surface_layer = render_surface_layer_list[surface_index]; |
377 RenderSurfaceImpl* render_surface = render_surface_layer->render_surface(); | 377 RenderSurfaceImpl* render_surface = render_surface_layer->render_surface(); |
378 DCHECK(render_surface); | 378 DCHECK(render_surface); |
379 render_surface->damage_tracker()->UpdateDamageTrackingState( | 379 render_surface->damage_tracker()->UpdateDamageTrackingState( |
380 render_surface->layer_list(), | 380 render_surface->layer_list(), |
381 render_surface_layer->id(), | 381 render_surface_layer->id(), |
382 render_surface->SurfacePropertyChangedOnlyFromDescendant(), | 382 render_surface->SurfacePropertyChangedOnlyFromDescendant(), |
383 render_surface->content_rect(), | 383 render_surface->content_rect(), |
384 render_surface_layer->mask_layer(), | 384 render_surface_layer->mask_layer(), |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 | 499 |
500 if (!CanDraw() || !active_tree_->root_layer()) | 500 if (!CanDraw() || !active_tree_->root_layer()) |
501 return false; | 501 return false; |
502 | 502 |
503 TrackDamageForAllSurfaces(active_tree_->root_layer(), | 503 TrackDamageForAllSurfaces(active_tree_->root_layer(), |
504 *frame->render_surface_layer_list); | 504 *frame->render_surface_layer_list); |
505 | 505 |
506 TRACE_EVENT1("cc", | 506 TRACE_EVENT1("cc", |
507 "LayerTreeHostImpl::CalculateRenderPasses", | 507 "LayerTreeHostImpl::CalculateRenderPasses", |
508 "render_surface_layer_list.size()", | 508 "render_surface_layer_list.size()", |
509 static_cast<long long unsigned>( | 509 static_cast<uint64>(frame->render_surface_layer_list->size())); |
510 frame->render_surface_layer_list->size())); | |
511 | 510 |
512 // Create the render passes in dependency order. | 511 // Create the render passes in dependency order. |
513 for (int surface_index = frame->render_surface_layer_list->size() - 1; | 512 for (int surface_index = frame->render_surface_layer_list->size() - 1; |
514 surface_index >= 0 ; | 513 surface_index >= 0; |
515 --surface_index) { | 514 --surface_index) { |
516 LayerImpl* render_surface_layer = | 515 LayerImpl* render_surface_layer = |
517 (*frame->render_surface_layer_list)[surface_index]; | 516 (*frame->render_surface_layer_list)[surface_index]; |
518 render_surface_layer->render_surface()->AppendRenderPasses(frame); | 517 render_surface_layer->render_surface()->AppendRenderPasses(frame); |
519 } | 518 } |
520 | 519 |
521 bool record_metrics_for_frame = | 520 bool record_metrics_for_frame = |
522 settings_.show_overdraw_in_tracing && | 521 settings_.show_overdraw_in_tracing && |
523 base::debug::TraceLog::GetInstance() && | 522 base::debug::TraceLog::GetInstance() && |
524 base::debug::TraceLog::GetInstance()->IsEnabled(); | 523 base::debug::TraceLog::GetInstance()->IsEnabled(); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
661 active_tree_->root_layer(), | 660 active_tree_->root_layer(), |
662 active_tree_->background_color(), | 661 active_tree_->background_color(), |
663 occlusion_tracker); | 662 occlusion_tracker); |
664 } | 663 } |
665 | 664 |
666 if (draw_frame) | 665 if (draw_frame) |
667 occlusion_tracker.overdraw_metrics()->RecordMetrics(this); | 666 occlusion_tracker.overdraw_metrics()->RecordMetrics(this); |
668 | 667 |
669 RemoveRenderPasses(CullRenderPassesWithNoQuads(), frame); | 668 RemoveRenderPasses(CullRenderPassesWithNoQuads(), frame); |
670 renderer_->DecideRenderPassAllocationsForFrame(frame->render_passes); | 669 renderer_->DecideRenderPassAllocationsForFrame(frame->render_passes); |
671 RemoveRenderPasses(CullRenderPassesWithCachedTextures(*renderer_), frame); | 670 RemoveRenderPasses(CullRenderPassesWithCachedTextures(renderer_.get()), |
| 671 frame); |
672 | 672 |
673 return draw_frame; | 673 return draw_frame; |
674 } | 674 } |
675 | 675 |
676 void LayerTreeHostImpl::SetBackgroundTickingEnabled(bool enabled) { | 676 void LayerTreeHostImpl::SetBackgroundTickingEnabled(bool enabled) { |
677 // Lazily create the time_source adapter so that we can vary the interval for | 677 // Lazily create the time_source adapter so that we can vary the interval for |
678 // testing. | 678 // testing. |
679 if (!time_source_client_adapter_) { | 679 if (!time_source_client_adapter_) { |
680 time_source_client_adapter_ = LayerTreeHostImplTimeSourceAdapter::Create( | 680 time_source_client_adapter_ = LayerTreeHostImplTimeSourceAdapter::Create( |
681 this, | 681 this, |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
728 RenderPassDrawQuad::MaterialCast(current_quad)->render_pass_id; | 728 RenderPassDrawQuad::MaterialCast(current_quad)->render_pass_id; |
729 RemoveRenderPassesRecursive(next_remove_render_pass_id, frame); | 729 RemoveRenderPassesRecursive(next_remove_render_pass_id, frame); |
730 } | 730 } |
731 } | 731 } |
732 | 732 |
733 bool LayerTreeHostImpl::CullRenderPassesWithCachedTextures:: | 733 bool LayerTreeHostImpl::CullRenderPassesWithCachedTextures:: |
734 ShouldRemoveRenderPass(const RenderPassDrawQuad& quad, | 734 ShouldRemoveRenderPass(const RenderPassDrawQuad& quad, |
735 const FrameData& frame) const { | 735 const FrameData& frame) const { |
736 bool quad_has_damage = !quad.contents_changed_since_last_frame.IsEmpty(); | 736 bool quad_has_damage = !quad.contents_changed_since_last_frame.IsEmpty(); |
737 bool quad_has_cached_resource = | 737 bool quad_has_cached_resource = |
738 renderer_.HaveCachedResourcesForRenderPassId(quad.render_pass_id); | 738 renderer_->HaveCachedResourcesForRenderPassId(quad.render_pass_id); |
739 if (quad_has_damage) { | 739 if (quad_has_damage) { |
740 TRACE_EVENT0("cc", "CullRenderPassesWithCachedTextures have damage"); | 740 TRACE_EVENT0("cc", "CullRenderPassesWithCachedTextures have damage"); |
741 return false; | 741 return false; |
742 } else if (!quad_has_cached_resource) { | 742 } else if (!quad_has_cached_resource) { |
743 TRACE_EVENT0("cc", "CullRenderPassesWithCachedTextures have no texture"); | 743 TRACE_EVENT0("cc", "CullRenderPassesWithCachedTextures have no texture"); |
744 return false; | 744 return false; |
745 } | 745 } |
746 TRACE_EVENT0("cc", "CullRenderPassesWithCachedTextures dropped!"); | 746 TRACE_EVENT0("cc", "CullRenderPassesWithCachedTextures dropped!"); |
747 return true; | 747 return true; |
748 } | 748 } |
(...skipping 1281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2030 } | 2030 } |
2031 | 2031 |
2032 void LayerTreeHostImpl::SetDebugState(const LayerTreeDebugState& debug_state) { | 2032 void LayerTreeHostImpl::SetDebugState(const LayerTreeDebugState& debug_state) { |
2033 if (debug_state_.continuous_painting != debug_state.continuous_painting) | 2033 if (debug_state_.continuous_painting != debug_state.continuous_painting) |
2034 paint_time_counter_->ClearHistory(); | 2034 paint_time_counter_->ClearHistory(); |
2035 | 2035 |
2036 debug_state_ = debug_state; | 2036 debug_state_ = debug_state; |
2037 } | 2037 } |
2038 | 2038 |
2039 } // namespace cc | 2039 } // namespace cc |
OLD | NEW |