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

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

Issue 2814273003: cc: Make DamageTracker use the effect tree and layer list (Closed)
Patch Set: Rebase Created 3 years, 8 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/trees/layer_tree_host_impl.h ('k') | cc/trees/property_tree.h » ('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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 700
701 return false; 701 return false;
702 } 702 }
703 703
704 void LayerTreeHostImpl::QueueSwapPromiseForMainThreadScrollUpdate( 704 void LayerTreeHostImpl::QueueSwapPromiseForMainThreadScrollUpdate(
705 std::unique_ptr<SwapPromise> swap_promise) { 705 std::unique_ptr<SwapPromise> swap_promise) {
706 swap_promises_for_main_thread_scroll_update_.push_back( 706 swap_promises_for_main_thread_scroll_update_.push_back(
707 std::move(swap_promise)); 707 std::move(swap_promise));
708 } 708 }
709 709
710 void LayerTreeHostImpl::TrackDamageForAllSurfaces(
711 const LayerImplList& render_surface_layer_list) {
712 // For now, we use damage tracking to compute a global scissor. To do this, we
713 // must compute all damage tracking before drawing anything, so that we know
714 // the root damage rect. The root damage rect is then used to scissor each
715 // surface.
716 size_t render_surface_layer_list_size = render_surface_layer_list.size();
717 for (size_t i = 0; i < render_surface_layer_list_size; ++i) {
718 size_t surface_index = render_surface_layer_list_size - 1 - i;
719 LayerImpl* render_surface_layer = render_surface_layer_list[surface_index];
720 RenderSurfaceImpl* render_surface =
721 render_surface_layer->GetRenderSurface();
722 DCHECK(render_surface);
723 render_surface->damage_tracker()->UpdateDamageTrackingState(
724 render_surface->layer_list(), render_surface,
725 render_surface->SurfacePropertyChangedOnlyFromDescendant(),
726 render_surface->content_rect(), render_surface->MaskLayer(),
727 render_surface->Filters());
728 }
729 }
730
731 void LayerTreeHostImpl::FrameData::AsValueInto( 710 void LayerTreeHostImpl::FrameData::AsValueInto(
732 base::trace_event::TracedValue* value) const { 711 base::trace_event::TracedValue* value) const {
733 value->SetBoolean("has_no_damage", has_no_damage); 712 value->SetBoolean("has_no_damage", has_no_damage);
734 713
735 // Quad data can be quite large, so only dump render passes if we select 714 // Quad data can be quite large, so only dump render passes if we select
736 // cc.debug.quads. 715 // cc.debug.quads.
737 bool quads_enabled; 716 bool quads_enabled;
738 TRACE_EVENT_CATEGORY_GROUP_ENABLED( 717 TRACE_EVENT_CATEGORY_GROUP_ENABLED(
739 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), &quads_enabled); 718 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), &quads_enabled);
740 if (quads_enabled) { 719 if (quads_enabled) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 list.begin(), list.end(), 779 list.begin(), list.end(),
801 [id](const std::unique_ptr<RenderPass>& p) { return p->id == id; }); 780 [id](const std::unique_ptr<RenderPass>& p) { return p->id == id; });
802 return it == list.end() ? nullptr : it->get(); 781 return it == list.end() ? nullptr : it->get();
803 } 782 }
804 783
805 DrawResult LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { 784 DrawResult LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) {
806 DCHECK(frame->render_passes.empty()); 785 DCHECK(frame->render_passes.empty());
807 DCHECK(CanDraw()); 786 DCHECK(CanDraw());
808 DCHECK(!active_tree_->LayerListIsEmpty()); 787 DCHECK(!active_tree_->LayerListIsEmpty());
809 788
810 TrackDamageForAllSurfaces(*frame->render_surface_layer_list); 789 // For now, we use damage tracking to compute a global scissor. To do this, we
790 // must compute all damage tracking before drawing anything, so that we know
791 // the root damage rect. The root damage rect is then used to scissor each
792 // surface.
793 DamageTracker::UpdateDamageTracking(active_tree_.get(),
794 active_tree_->RenderSurfaceLayerList());
811 795
812 // If the root render surface has no visible damage, then don't generate a 796 // If the root render surface has no visible damage, then don't generate a
813 // frame at all. 797 // frame at all.
814 RenderSurfaceImpl* root_surface = active_tree_->RootRenderSurface(); 798 RenderSurfaceImpl* root_surface = active_tree_->RootRenderSurface();
815 bool root_surface_has_no_visible_damage = 799 bool root_surface_has_no_visible_damage =
816 !root_surface->GetDamageRect().Intersects(root_surface->content_rect()); 800 !root_surface->GetDamageRect().Intersects(root_surface->content_rect());
817 bool root_surface_has_contributing_layers = 801 bool root_surface_has_contributing_layers =
818 !root_surface->layer_list().empty(); 802 !root_surface->layer_list().empty();
819 bool hud_wants_to_draw_ = active_tree_->hud_layer() && 803 bool hud_wants_to_draw_ = active_tree_->hud_layer() &&
820 active_tree_->hud_layer()->IsAnimatingHUDContents(); 804 active_tree_->hud_layer()->IsAnimatingHUDContents();
(...skipping 3478 matching lines...) Expand 10 before | Expand all | Expand 10 after
4299 } 4283 }
4300 4284
4301 void LayerTreeHostImpl::UpdateScrollSourceInfo(bool is_wheel_scroll) { 4285 void LayerTreeHostImpl::UpdateScrollSourceInfo(bool is_wheel_scroll) {
4302 if (is_wheel_scroll) 4286 if (is_wheel_scroll)
4303 has_scrolled_by_wheel_ = true; 4287 has_scrolled_by_wheel_ = true;
4304 else 4288 else
4305 has_scrolled_by_touch_ = true; 4289 has_scrolled_by_touch_ = true;
4306 } 4290 }
4307 4291
4308 } // namespace cc 4292 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/property_tree.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698