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

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 | « no previous file | 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 static inline const SurfaceId* GetReferencedSurfaceId(
67 const SurfaceInfo& surface_info) {
68 return surface_info.is_valid() ? &surface_info.id() : nullptr;
69 }
70
66 void SurfaceLayer::SetPrimarySurfaceInfo(const SurfaceInfo& surface_info) { 71 void SurfaceLayer::SetPrimarySurfaceInfo(const SurfaceInfo& surface_info) {
72 const SurfaceId* old_surface_id =
73 GetReferencedSurfaceId(primary_surface_info_);
67 RemoveReference(std::move(primary_reference_returner_)); 74 RemoveReference(std::move(primary_reference_returner_));
68 primary_surface_info_ = surface_info; 75 primary_surface_info_ = surface_info;
69 if (layer_tree_host()) { 76 if (layer_tree_host()) {
70 primary_reference_returner_ = ref_factory_->CreateReference( 77 primary_reference_returner_ = ref_factory_->CreateReference(
71 layer_tree_host(), primary_surface_info_.id()); 78 layer_tree_host(), primary_surface_info_.id());
79 const SurfaceId* new_surface_id =
80 GetReferencedSurfaceId(primary_surface_info_);
81 if (old_surface_id != new_surface_id) {
enne (OOO) 2017/05/24 21:57:42 Hmm. This check is comparing pointers? Can you ha
jaydasika 2017/05/24 22:12:56 Done.
82 if (old_surface_id)
83 layer_tree_host()->RemoveSurfaceLayerId(*old_surface_id);
84 if (new_surface_id)
85 layer_tree_host()->AddSurfaceLayerId(*new_surface_id);
86 }
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) {
93 const SurfaceId* old_surface_id =
94 GetReferencedSurfaceId(fallback_surface_info_);
78 RemoveReference(std::move(fallback_reference_returner_)); 95 RemoveReference(std::move(fallback_reference_returner_));
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 const SurfaceId* new_surface_id =
101 GetReferencedSurfaceId(fallback_surface_info_);
102 if (old_surface_id != new_surface_id) {
103 if (old_surface_id)
104 layer_tree_host()->RemoveSurfaceLayerId(*old_surface_id);
105 if (new_surface_id)
106 layer_tree_host()->AddSurfaceLayerId(*new_surface_id);
107 }
83 } 108 }
84 SetNeedsCommit(); 109 SetNeedsCommit();
85 } 110 }
86 111
87 void SurfaceLayer::SetStretchContentToFillBounds( 112 void SurfaceLayer::SetStretchContentToFillBounds(
88 bool stretch_content_to_fill_bounds) { 113 bool stretch_content_to_fill_bounds) {
89 stretch_content_to_fill_bounds_ = stretch_content_to_fill_bounds; 114 stretch_content_to_fill_bounds_ = stretch_content_to_fill_bounds;
90 SetNeedsPushProperties(); 115 SetNeedsPushProperties();
91 } 116 }
92 117
93 std::unique_ptr<LayerImpl> SurfaceLayer::CreateLayerImpl( 118 std::unique_ptr<LayerImpl> SurfaceLayer::CreateLayerImpl(
94 LayerTreeImpl* tree_impl) { 119 LayerTreeImpl* tree_impl) {
95 return SurfaceLayerImpl::Create(tree_impl, id()); 120 return SurfaceLayerImpl::Create(tree_impl, id());
96 } 121 }
97 122
98 bool SurfaceLayer::HasDrawableContent() const { 123 bool SurfaceLayer::HasDrawableContent() const {
99 return primary_surface_info_.is_valid() && Layer::HasDrawableContent(); 124 return primary_surface_info_.is_valid() && Layer::HasDrawableContent();
100 } 125 }
101 126
102 void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) { 127 void SurfaceLayer::SetLayerTreeHost(LayerTreeHost* host) {
103 if (layer_tree_host() == host) { 128 if (layer_tree_host() == host) {
104 Layer::SetLayerTreeHost(host); 129 Layer::SetLayerTreeHost(host);
105 return; 130 return;
106 } 131 }
132 const SurfaceId* primary_surface_id =
133 GetReferencedSurfaceId(primary_surface_info_);
134 const SurfaceId* fallback_surface_id =
135 GetReferencedSurfaceId(fallback_surface_info_);
136
137 if (layer_tree_host()) {
138 if (primary_surface_id)
139 layer_tree_host()->RemoveSurfaceLayerId(*primary_surface_id);
140 if (fallback_surface_id)
141 layer_tree_host()->RemoveSurfaceLayerId(*fallback_surface_id);
142 }
107 RemoveReference(std::move(primary_reference_returner_)); 143 RemoveReference(std::move(primary_reference_returner_));
108 RemoveReference(std::move(fallback_reference_returner_)); 144 RemoveReference(std::move(fallback_reference_returner_));
109 Layer::SetLayerTreeHost(host); 145 Layer::SetLayerTreeHost(host);
110 if (layer_tree_host()) { 146 if (layer_tree_host()) {
111 if (primary_surface_info_.is_valid()) { 147 if (primary_surface_info_.is_valid()) {
112 primary_reference_returner_ = ref_factory_->CreateReference( 148 primary_reference_returner_ = ref_factory_->CreateReference(
113 layer_tree_host(), primary_surface_info_.id()); 149 layer_tree_host(), primary_surface_info_.id());
114 } 150 }
115 if (fallback_surface_info_.is_valid()) { 151 if (fallback_surface_info_.is_valid()) {
116 fallback_reference_returner_ = ref_factory_->CreateReference( 152 fallback_reference_returner_ = ref_factory_->CreateReference(
117 layer_tree_host(), fallback_surface_info_.id()); 153 layer_tree_host(), fallback_surface_info_.id());
118 } 154 }
155 if (primary_surface_id)
156 layer_tree_host()->AddSurfaceLayerId(*primary_surface_id);
157 if (fallback_surface_id)
158 layer_tree_host()->RemoveSurfaceLayerId(*fallback_surface_id);
enne (OOO) 2017/05/24 21:57:42 add?
jaydasika 2017/05/24 22:12:56 Done.
119 } 159 }
120 } 160 }
121 161
122 void SurfaceLayer::PushPropertiesTo(LayerImpl* layer) { 162 void SurfaceLayer::PushPropertiesTo(LayerImpl* layer) {
123 Layer::PushPropertiesTo(layer); 163 Layer::PushPropertiesTo(layer);
124 TRACE_EVENT0("cc", "SurfaceLayer::PushPropertiesTo"); 164 TRACE_EVENT0("cc", "SurfaceLayer::PushPropertiesTo");
125 SurfaceLayerImpl* layer_impl = static_cast<SurfaceLayerImpl*>(layer); 165 SurfaceLayerImpl* layer_impl = static_cast<SurfaceLayerImpl*>(layer);
126 layer_impl->SetPrimarySurfaceInfo(primary_surface_info_); 166 layer_impl->SetPrimarySurfaceInfo(primary_surface_info_);
127 layer_impl->SetFallbackSurfaceInfo(fallback_surface_info_); 167 layer_impl->SetFallbackSurfaceInfo(fallback_surface_info_);
128 layer_impl->SetStretchContentToFillBounds(stretch_content_to_fill_bounds_); 168 layer_impl->SetStretchContentToFillBounds(stretch_content_to_fill_bounds_);
129 } 169 }
130 170
131 void SurfaceLayer::RemoveReference(base::Closure reference_returner) { 171 void SurfaceLayer::RemoveReference(base::Closure reference_returner) {
132 if (!reference_returner) 172 if (!reference_returner)
133 return; 173 return;
134 auto swap_promise = base::MakeUnique<SatisfySwapPromise>( 174 auto swap_promise = base::MakeUnique<SatisfySwapPromise>(
135 std::move(reference_returner), 175 std::move(reference_returner),
136 layer_tree_host()->GetTaskRunnerProvider()->MainThreadTaskRunner()); 176 layer_tree_host()->GetTaskRunnerProvider()->MainThreadTaskRunner());
137 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise( 177 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise(
138 std::move(swap_promise)); 178 std::move(swap_promise));
139 } 179 }
140 180
141 } // namespace cc 181 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/layers/surface_layer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698