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

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

Issue 2201853002: Blink handle selection handle visibility (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: move mouse/keyboard handle clearing to blink Created 4 years, 2 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/layer_tree_impl.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 749 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 } 760 }
761 761
762 static RenderPass* FindRenderPassById(const RenderPassList& list, 762 static RenderPass* FindRenderPassById(const RenderPassList& list,
763 RenderPassId id) { 763 RenderPassId id) {
764 auto it = std::find_if( 764 auto it = std::find_if(
765 list.begin(), list.end(), 765 list.begin(), list.end(),
766 [id](const std::unique_ptr<RenderPass>& p) { return p->id == id; }); 766 [id](const std::unique_ptr<RenderPass>& p) { return p->id == id; });
767 return it == list.end() ? nullptr : it->get(); 767 return it == list.end() ? nullptr : it->get();
768 } 768 }
769 769
770 DrawResult LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { 770 DrawResult LayerTreeHostImpl::CalculateRenderPasses(
771 FrameData* frame,
772 bool handle_visibility_changed) {
771 DCHECK(frame->render_passes.empty()); 773 DCHECK(frame->render_passes.empty());
772 DCHECK(CanDraw()); 774 DCHECK(CanDraw());
773 DCHECK(!active_tree_->LayerListIsEmpty()); 775 DCHECK(!active_tree_->LayerListIsEmpty());
774 776
775 TrackDamageForAllSurfaces(*frame->render_surface_layer_list); 777 TrackDamageForAllSurfaces(*frame->render_surface_layer_list);
776 778
777 // If the root render surface has no visible damage, then don't generate a 779 // If the root render surface has no visible damage, then don't generate a
778 // frame at all. 780 // frame at all.
779 RenderSurfaceImpl* root_surface = active_tree_->RootRenderSurface(); 781 RenderSurfaceImpl* root_surface = active_tree_->RootRenderSurface();
780 bool root_surface_has_no_visible_damage = 782 bool root_surface_has_no_visible_damage =
781 !root_surface->damage_tracker()->current_damage_rect().Intersects( 783 !root_surface->damage_tracker()->current_damage_rect().Intersects(
782 root_surface->content_rect()); 784 root_surface->content_rect());
783 bool root_surface_has_contributing_layers = 785 bool root_surface_has_contributing_layers =
784 !root_surface->layer_list().empty(); 786 !root_surface->layer_list().empty();
785 bool hud_wants_to_draw_ = active_tree_->hud_layer() && 787 bool hud_wants_to_draw_ = active_tree_->hud_layer() &&
786 active_tree_->hud_layer()->IsAnimatingHUDContents(); 788 active_tree_->hud_layer()->IsAnimatingHUDContents();
787 bool resources_must_be_resent = 789 bool resources_must_be_resent =
788 compositor_frame_sink_->capabilities().can_force_reclaim_resources; 790 compositor_frame_sink_->capabilities().can_force_reclaim_resources;
789 if (root_surface_has_contributing_layers && 791 if (root_surface_has_contributing_layers &&
790 root_surface_has_no_visible_damage && 792 root_surface_has_no_visible_damage &&
791 !active_tree_->property_trees()->effect_tree.HasCopyRequests() && 793 !active_tree_->property_trees()->effect_tree.HasCopyRequests() &&
792 !resources_must_be_resent && !hud_wants_to_draw_) { 794 !resources_must_be_resent && !hud_wants_to_draw_ &&
795 // When touch handle visibility changes there is no visible damage
796 // because touch handles are composited in the browser. However we
797 // still want the browser to be notified that the handles changed
798 // through the |ViewHostMsg_SwapCompositorFrame| IPC so we keep
799 // track of handle visibility changes through |handle_visibility_changed|.
800 !handle_visibility_changed) {
793 TRACE_EVENT0("cc", 801 TRACE_EVENT0("cc",
794 "LayerTreeHostImpl::CalculateRenderPasses::EmptyDamageRect"); 802 "LayerTreeHostImpl::CalculateRenderPasses::EmptyDamageRect");
795 frame->has_no_damage = true; 803 frame->has_no_damage = true;
796 DCHECK(!resourceless_software_draw_); 804 DCHECK(!resourceless_software_draw_);
797 return DRAW_SUCCESS; 805 return DRAW_SUCCESS;
798 } 806 }
799 807
800 TRACE_EVENT_BEGIN2( 808 TRACE_EVENT_BEGIN2(
801 "cc", "LayerTreeHostImpl::CalculateRenderPasses", 809 "cc", "LayerTreeHostImpl::CalculateRenderPasses",
802 "render_surface_layer_list.size()", 810 "render_surface_layer_list.size()",
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
1090 frame->may_contain_video = false; 1098 frame->may_contain_video = false;
1091 1099
1092 if (active_tree_->RootRenderSurface()) { 1100 if (active_tree_->RootRenderSurface()) {
1093 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_; 1101 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_;
1094 viewport_damage_rect_ = gfx::Rect(); 1102 viewport_damage_rect_ = gfx::Rect();
1095 1103
1096 active_tree_->RootRenderSurface()->damage_tracker()->AddDamageNextUpdate( 1104 active_tree_->RootRenderSurface()->damage_tracker()->AddDamageNextUpdate(
1097 device_viewport_damage_rect); 1105 device_viewport_damage_rect);
1098 } 1106 }
1099 1107
1100 DrawResult draw_result = CalculateRenderPasses(frame); 1108 DrawResult draw_result = CalculateRenderPasses(
1109 frame, active_tree_->GetAndResetHandleVisibilityChanged());
danakj 2016/10/21 20:53:33 can you call this from inside CalculateRenderPasse
amaralp 2016/10/26 05:03:40 Done
1101 if (draw_result != DRAW_SUCCESS) { 1110 if (draw_result != DRAW_SUCCESS) {
1102 DCHECK(!resourceless_software_draw_); 1111 DCHECK(!resourceless_software_draw_);
1103 return draw_result; 1112 return draw_result;
1104 } 1113 }
1105 1114
1106 // If we return DRAW_SUCCESS, then we expect DrawLayers() to be called before 1115 // If we return DRAW_SUCCESS, then we expect DrawLayers() to be called before
1107 // this function is called again. 1116 // this function is called again.
1108 return draw_result; 1117 return draw_result;
1109 } 1118 }
1110 1119
(...skipping 2991 matching lines...) Expand 10 before | Expand all | Expand 10 after
4102 if (is_visible) { 4111 if (is_visible) {
4103 worker_context_visibility_ = 4112 worker_context_visibility_ =
4104 worker_context->CacheController()->ClientBecameVisible(); 4113 worker_context->CacheController()->ClientBecameVisible();
4105 } else { 4114 } else {
4106 worker_context->CacheController()->ClientBecameNotVisible( 4115 worker_context->CacheController()->ClientBecameNotVisible(
4107 std::move(worker_context_visibility_)); 4116 std::move(worker_context_visibility_));
4108 } 4117 }
4109 } 4118 }
4110 4119
4111 } // namespace cc 4120 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698