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

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

Issue 2919373002: cc: De-special-case SurfaceLayer code (Closed)
Patch Set: Fix cc_unittests Created 3 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
« no previous file with comments | « cc/layers/surface_layer.h ('k') | cc/layers/surface_layer_unittest.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::AddReferencedSurfaceId(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::RemoveReferencedSurfaceId(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
78 void SurfaceLayer::SetPrimarySurfaceInfo(const SurfaceInfo& surface_info) { 66 void SurfaceLayer::SetPrimarySurfaceInfo(const SurfaceInfo& surface_info) {
79 RemoveReference(std::move(primary_reference_returner_));
80 bool update_referenced_surface_id = false;
81 if (layer_tree_host())
82 update_referenced_surface_id =
83 !layer_tree_host()->GetSettings().enable_surface_synchronization;
84 if (update_referenced_surface_id)
85 RemoveReferencedSurfaceId(primary_surface_info_);
86 primary_surface_info_ = surface_info; 67 primary_surface_info_ = surface_info;
87 if (layer_tree_host()) {
88 primary_reference_returner_ = ref_factory_->CreateReference(
89 layer_tree_host(), primary_surface_info_.id());
90 if (update_referenced_surface_id)
91 AddReferencedSurfaceId(primary_surface_info_);
92 }
93 UpdateDrawsContent(HasDrawableContent()); 68 UpdateDrawsContent(HasDrawableContent());
94 SetNeedsCommit(); 69 SetNeedsCommit();
95 } 70 }
96 71
97 void SurfaceLayer::SetFallbackSurfaceInfo(const SurfaceInfo& surface_info) { 72 void SurfaceLayer::SetFallbackSurfaceInfo(const SurfaceInfo& surface_info) {
98 RemoveReference(std::move(fallback_reference_returner_)); 73 RemoveReference(std::move(fallback_reference_returner_));
99 bool update_referenced_surface_id = false;
100 if (layer_tree_host()) 74 if (layer_tree_host())
101 update_referenced_surface_id = 75 layer_tree_host()->RemoveSurfaceLayerId(fallback_surface_info_.id());
102 layer_tree_host()->GetSettings().enable_surface_synchronization; 76
103 if (update_referenced_surface_id)
104 RemoveReferencedSurfaceId(fallback_surface_info_);
105 fallback_surface_info_ = surface_info; 77 fallback_surface_info_ = surface_info;
106 if (layer_tree_host()) { 78
79 if (layer_tree_host() && fallback_surface_info_.is_valid()) {
107 fallback_reference_returner_ = ref_factory_->CreateReference( 80 fallback_reference_returner_ = ref_factory_->CreateReference(
108 layer_tree_host(), fallback_surface_info_.id()); 81 layer_tree_host(), fallback_surface_info_.id());
109 if (update_referenced_surface_id) 82 layer_tree_host()->AddSurfaceLayerId(fallback_surface_info_.id());
110 AddReferencedSurfaceId(fallback_surface_info_);
111 } 83 }
112 SetNeedsCommit(); 84 SetNeedsCommit();
113 } 85 }
114 86
115 void SurfaceLayer::SetStretchContentToFillBounds( 87 void SurfaceLayer::SetStretchContentToFillBounds(
116 bool stretch_content_to_fill_bounds) { 88 bool stretch_content_to_fill_bounds) {
117 stretch_content_to_fill_bounds_ = stretch_content_to_fill_bounds; 89 stretch_content_to_fill_bounds_ = stretch_content_to_fill_bounds;
118 SetNeedsPushProperties(); 90 SetNeedsPushProperties();
119 } 91 }
120 92
121 std::unique_ptr<LayerImpl> SurfaceLayer::CreateLayerImpl( 93 std::unique_ptr<LayerImpl> SurfaceLayer::CreateLayerImpl(
122 LayerTreeImpl* tree_impl) { 94 LayerTreeImpl* tree_impl) {
123 return SurfaceLayerImpl::Create(tree_impl, id()); 95 return SurfaceLayerImpl::Create(tree_impl, id());
124 } 96 }
125 97
126 bool SurfaceLayer::HasDrawableContent() const { 98 bool SurfaceLayer::HasDrawableContent() const {
127 return primary_surface_info_.is_valid() && Layer::HasDrawableContent(); 99 return primary_surface_info_.is_valid() && Layer::HasDrawableContent();
128 } 100 }
129 101
130 void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) { 102 void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) {
131 if (layer_tree_host() == host) { 103 if (layer_tree_host() == host) {
132 return; 104 return;
133 } 105 }
134 106
135 bool use_primary_info_for_referenced_surface_id = false; 107 if (layer_tree_host() && fallback_surface_info_.is_valid())
136 if (layer_tree_host()) { 108 layer_tree_host()->RemoveSurfaceLayerId(fallback_surface_info_.id());
137 use_primary_info_for_referenced_surface_id =
138 !layer_tree_host()->GetSettings().enable_surface_synchronization;
139 } else if (host) {
140 use_primary_info_for_referenced_surface_id =
141 !host->GetSettings().enable_surface_synchronization;
142 }
143 109
144 if (layer_tree_host()) {
145 if (use_primary_info_for_referenced_surface_id)
146 RemoveReferencedSurfaceId(primary_surface_info_);
147 else
148 RemoveReferencedSurfaceId(fallback_surface_info_);
149 }
150
151 RemoveReference(std::move(primary_reference_returner_));
152 RemoveReference(std::move(fallback_reference_returner_)); 110 RemoveReference(std::move(fallback_reference_returner_));
153 Layer::SetLayerTreeHost(host); 111 Layer::SetLayerTreeHost(host);
154 112
155 if (layer_tree_host()) { 113 if (layer_tree_host() && fallback_surface_info_.is_valid()) {
156 if (primary_surface_info_.is_valid()) { 114 fallback_reference_returner_ = ref_factory_->CreateReference(
157 primary_reference_returner_ = ref_factory_->CreateReference( 115 layer_tree_host(), fallback_surface_info_.id());
158 layer_tree_host(), primary_surface_info_.id()); 116 layer_tree_host()->AddSurfaceLayerId(fallback_surface_info_.id());
159 }
160 if (fallback_surface_info_.is_valid()) {
161 fallback_reference_returner_ = ref_factory_->CreateReference(
162 layer_tree_host(), fallback_surface_info_.id());
163 }
164 if (use_primary_info_for_referenced_surface_id)
165 AddReferencedSurfaceId(primary_surface_info_);
166 else
167 AddReferencedSurfaceId(fallback_surface_info_);
168 } 117 }
169 } 118 }
170 119
171 void SurfaceLayer::PushPropertiesTo(LayerImpl* layer) { 120 void SurfaceLayer::PushPropertiesTo(LayerImpl* layer) {
172 Layer::PushPropertiesTo(layer); 121 Layer::PushPropertiesTo(layer);
173 TRACE_EVENT0("cc", "SurfaceLayer::PushPropertiesTo"); 122 TRACE_EVENT0("cc", "SurfaceLayer::PushPropertiesTo");
174 SurfaceLayerImpl* layer_impl = static_cast<SurfaceLayerImpl*>(layer); 123 SurfaceLayerImpl* layer_impl = static_cast<SurfaceLayerImpl*>(layer);
175 layer_impl->SetPrimarySurfaceInfo(primary_surface_info_); 124 layer_impl->SetPrimarySurfaceInfo(primary_surface_info_);
176 layer_impl->SetFallbackSurfaceInfo(fallback_surface_info_); 125 layer_impl->SetFallbackSurfaceInfo(fallback_surface_info_);
177 layer_impl->SetStretchContentToFillBounds(stretch_content_to_fill_bounds_); 126 layer_impl->SetStretchContentToFillBounds(stretch_content_to_fill_bounds_);
178 } 127 }
179 128
180 void SurfaceLayer::RemoveReference(base::Closure reference_returner) { 129 void SurfaceLayer::RemoveReference(base::Closure reference_returner) {
181 if (!reference_returner) 130 if (!reference_returner)
182 return; 131 return;
183 auto swap_promise = base::MakeUnique<SatisfySwapPromise>( 132 auto swap_promise = base::MakeUnique<SatisfySwapPromise>(
184 std::move(reference_returner), 133 std::move(reference_returner),
185 layer_tree_host()->GetTaskRunnerProvider()->MainThreadTaskRunner()); 134 layer_tree_host()->GetTaskRunnerProvider()->MainThreadTaskRunner());
186 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise( 135 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise(
187 std::move(swap_promise)); 136 std::move(swap_promise));
188 } 137 }
189 138
190 } // namespace cc 139 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/surface_layer.h ('k') | cc/layers/surface_layer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698