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

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

Issue 2905533002: cc : Store surface layer ids on LayerTreeHost and push them at commit (Closed)
Patch Set: comments Created 3 years, 7 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/layers/surface_layer.h ('k') | cc/layers/surface_layer_impl.cc » ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/surface_layer.h" 5 #include "cc/layers/surface_layer.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 return make_scoped_refptr(new SurfaceLayer(std::move(ref_factory))); 56 return make_scoped_refptr(new SurfaceLayer(std::move(ref_factory)));
57 } 57 }
58 58
59 SurfaceLayer::SurfaceLayer(scoped_refptr<SurfaceReferenceFactory> ref_factory) 59 SurfaceLayer::SurfaceLayer(scoped_refptr<SurfaceReferenceFactory> ref_factory)
60 : ref_factory_(std::move(ref_factory)) {} 60 : ref_factory_(std::move(ref_factory)) {}
61 61
62 SurfaceLayer::~SurfaceLayer() { 62 SurfaceLayer::~SurfaceLayer() {
63 DCHECK(!layer_tree_host()); 63 DCHECK(!layer_tree_host());
64 } 64 }
65 65
66 void SurfaceLayer::AddSurfaceId(const SurfaceInfo& surface_info) {
67 DCHECK(layer_tree_host());
68 if (surface_info.is_valid())
69 layer_tree_host()->AddSurfaceLayerId(surface_info.id());
70 }
71
72 void SurfaceLayer::RemoveSurfaceId(const SurfaceInfo& surface_info) {
73 DCHECK(layer_tree_host());
74 if (surface_info.is_valid())
75 layer_tree_host()->RemoveSurfaceLayerId(surface_info.id());
76 }
77
66 void SurfaceLayer::SetPrimarySurfaceInfo(const SurfaceInfo& surface_info) { 78 void SurfaceLayer::SetPrimarySurfaceInfo(const SurfaceInfo& surface_info) {
67 RemoveReference(std::move(primary_reference_returner_)); 79 RemoveReference(std::move(primary_reference_returner_));
80 if (layer_tree_host())
81 RemoveSurfaceId(primary_surface_info_);
68 primary_surface_info_ = surface_info; 82 primary_surface_info_ = surface_info;
69 if (layer_tree_host()) { 83 if (layer_tree_host()) {
70 primary_reference_returner_ = ref_factory_->CreateReference( 84 primary_reference_returner_ = ref_factory_->CreateReference(
71 layer_tree_host(), primary_surface_info_.id()); 85 layer_tree_host(), primary_surface_info_.id());
86 AddSurfaceId(primary_surface_info_);
72 } 87 }
73 UpdateDrawsContent(HasDrawableContent()); 88 UpdateDrawsContent(HasDrawableContent());
74 SetNeedsCommit(); 89 SetNeedsCommit();
75 } 90 }
76 91
77 void SurfaceLayer::SetFallbackSurfaceInfo(const SurfaceInfo& surface_info) { 92 void SurfaceLayer::SetFallbackSurfaceInfo(const SurfaceInfo& surface_info) {
78 RemoveReference(std::move(fallback_reference_returner_)); 93 RemoveReference(std::move(fallback_reference_returner_));
94 if (layer_tree_host())
95 RemoveSurfaceId(fallback_surface_info_);
79 fallback_surface_info_ = surface_info; 96 fallback_surface_info_ = surface_info;
80 if (layer_tree_host()) { 97 if (layer_tree_host()) {
81 fallback_reference_returner_ = ref_factory_->CreateReference( 98 fallback_reference_returner_ = ref_factory_->CreateReference(
82 layer_tree_host(), fallback_surface_info_.id()); 99 layer_tree_host(), fallback_surface_info_.id());
100 AddSurfaceId(fallback_surface_info_);
83 } 101 }
84 SetNeedsCommit(); 102 SetNeedsCommit();
85 } 103 }
86 104
87 void SurfaceLayer::SetStretchContentToFillBounds( 105 void SurfaceLayer::SetStretchContentToFillBounds(
88 bool stretch_content_to_fill_bounds) { 106 bool stretch_content_to_fill_bounds) {
89 stretch_content_to_fill_bounds_ = stretch_content_to_fill_bounds; 107 stretch_content_to_fill_bounds_ = stretch_content_to_fill_bounds;
90 SetNeedsPushProperties(); 108 SetNeedsPushProperties();
91 } 109 }
92 110
93 std::unique_ptr<LayerImpl> SurfaceLayer::CreateLayerImpl( 111 std::unique_ptr<LayerImpl> SurfaceLayer::CreateLayerImpl(
94 LayerTreeImpl* tree_impl) { 112 LayerTreeImpl* tree_impl) {
95 return SurfaceLayerImpl::Create(tree_impl, id()); 113 return SurfaceLayerImpl::Create(tree_impl, id());
96 } 114 }
97 115
98 bool SurfaceLayer::HasDrawableContent() const { 116 bool SurfaceLayer::HasDrawableContent() const {
99 return primary_surface_info_.is_valid() && Layer::HasDrawableContent(); 117 return primary_surface_info_.is_valid() && Layer::HasDrawableContent();
100 } 118 }
101 119
102 void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) { 120 void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) {
103 if (layer_tree_host() == host) { 121 if (layer_tree_host() == host) {
104 Layer::SetLayerTreeHost(host); 122 Layer::SetLayerTreeHost(host);
105 return; 123 return;
106 } 124 }
125
126 if (layer_tree_host()) {
127 RemoveSurfaceId(primary_surface_info_);
128 RemoveSurfaceId(fallback_surface_info_);
Fady Samuel 2017/05/24 22:31:14 This breaks surface synchronization and surface re
jaydasika 2017/05/24 22:43:03 I did not understand how removing surface ids from
129 }
107 RemoveReference(std::move(primary_reference_returner_)); 130 RemoveReference(std::move(primary_reference_returner_));
108 RemoveReference(std::move(fallback_reference_returner_)); 131 RemoveReference(std::move(fallback_reference_returner_));
109 Layer::SetLayerTreeHost(host); 132 Layer::SetLayerTreeHost(host);
110 if (layer_tree_host()) { 133 if (layer_tree_host()) {
111 if (primary_surface_info_.is_valid()) { 134 if (primary_surface_info_.is_valid()) {
112 primary_reference_returner_ = ref_factory_->CreateReference( 135 primary_reference_returner_ = ref_factory_->CreateReference(
113 layer_tree_host(), primary_surface_info_.id()); 136 layer_tree_host(), primary_surface_info_.id());
114 } 137 }
115 if (fallback_surface_info_.is_valid()) { 138 if (fallback_surface_info_.is_valid()) {
116 fallback_reference_returner_ = ref_factory_->CreateReference( 139 fallback_reference_returner_ = ref_factory_->CreateReference(
117 layer_tree_host(), fallback_surface_info_.id()); 140 layer_tree_host(), fallback_surface_info_.id());
118 } 141 }
142 AddSurfaceId(primary_surface_info_);
143 AddSurfaceId(fallback_surface_info_);
119 } 144 }
120 } 145 }
121 146
122 void SurfaceLayer::PushPropertiesTo(LayerImpl* layer) { 147 void SurfaceLayer::PushPropertiesTo(LayerImpl* layer) {
123 Layer::PushPropertiesTo(layer); 148 Layer::PushPropertiesTo(layer);
124 TRACE_EVENT0("cc", "SurfaceLayer::PushPropertiesTo"); 149 TRACE_EVENT0("cc", "SurfaceLayer::PushPropertiesTo");
125 SurfaceLayerImpl* layer_impl = static_cast<SurfaceLayerImpl*>(layer); 150 SurfaceLayerImpl* layer_impl = static_cast<SurfaceLayerImpl*>(layer);
126 layer_impl->SetPrimarySurfaceInfo(primary_surface_info_); 151 layer_impl->SetPrimarySurfaceInfo(primary_surface_info_);
127 layer_impl->SetFallbackSurfaceInfo(fallback_surface_info_); 152 layer_impl->SetFallbackSurfaceInfo(fallback_surface_info_);
128 layer_impl->SetStretchContentToFillBounds(stretch_content_to_fill_bounds_); 153 layer_impl->SetStretchContentToFillBounds(stretch_content_to_fill_bounds_);
129 } 154 }
130 155
131 void SurfaceLayer::RemoveReference(base::Closure reference_returner) { 156 void SurfaceLayer::RemoveReference(base::Closure reference_returner) {
132 if (!reference_returner) 157 if (!reference_returner)
133 return; 158 return;
134 auto swap_promise = base::MakeUnique<SatisfySwapPromise>( 159 auto swap_promise = base::MakeUnique<SatisfySwapPromise>(
135 std::move(reference_returner), 160 std::move(reference_returner),
136 layer_tree_host()->GetTaskRunnerProvider()->MainThreadTaskRunner()); 161 layer_tree_host()->GetTaskRunnerProvider()->MainThreadTaskRunner());
137 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise( 162 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise(
138 std::move(swap_promise)); 163 std::move(swap_promise));
139 } 164 }
140 165
141 } // namespace cc 166 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/surface_layer.h ('k') | cc/layers/surface_layer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698