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

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

Issue 1866203004: Convert //cc from scoped_ptr to std::unique_ptr. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: scopedptrcc: rebase Created 4 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/layers/texture_layer.h ('k') | cc/layers/texture_layer_client.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 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 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/texture_layer.h" 5 #include "cc/layers/texture_layer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/memory/ptr_util.h"
10 #include "base/synchronization/lock.h" 11 #include "base/synchronization/lock.h"
11 #include "base/trace_event/trace_event.h" 12 #include "base/trace_event/trace_event.h"
12 #include "cc/base/simple_enclosed_region.h" 13 #include "cc/base/simple_enclosed_region.h"
13 #include "cc/layers/texture_layer_client.h" 14 #include "cc/layers/texture_layer_client.h"
14 #include "cc/layers/texture_layer_impl.h" 15 #include "cc/layers/texture_layer_impl.h"
15 #include "cc/resources/single_release_callback.h" 16 #include "cc/resources/single_release_callback.h"
16 #include "cc/resources/single_release_callback_impl.h" 17 #include "cc/resources/single_release_callback_impl.h"
17 #include "cc/trees/blocking_task_runner.h" 18 #include "cc/trees/blocking_task_runner.h"
18 #include "cc/trees/layer_tree_host.h" 19 #include "cc/trees/layer_tree_host.h"
19 20
(...skipping 25 matching lines...) Expand all
45 void TextureLayer::ClearClient() { 46 void TextureLayer::ClearClient() {
46 client_ = nullptr; 47 client_ = nullptr;
47 ClearTexture(); 48 ClearTexture();
48 UpdateDrawsContent(HasDrawableContent()); 49 UpdateDrawsContent(HasDrawableContent());
49 } 50 }
50 51
51 void TextureLayer::ClearTexture() { 52 void TextureLayer::ClearTexture() {
52 SetTextureMailbox(TextureMailbox(), nullptr); 53 SetTextureMailbox(TextureMailbox(), nullptr);
53 } 54 }
54 55
55 scoped_ptr<LayerImpl> TextureLayer::CreateLayerImpl(LayerTreeImpl* tree_impl) { 56 std::unique_ptr<LayerImpl> TextureLayer::CreateLayerImpl(
57 LayerTreeImpl* tree_impl) {
56 return TextureLayerImpl::Create(tree_impl, id()); 58 return TextureLayerImpl::Create(tree_impl, id());
57 } 59 }
58 60
59 void TextureLayer::SetFlipped(bool flipped) { 61 void TextureLayer::SetFlipped(bool flipped) {
60 if (flipped_ == flipped) 62 if (flipped_ == flipped)
61 return; 63 return;
62 flipped_ = flipped; 64 flipped_ = flipped;
63 SetNeedsCommit(); 65 SetNeedsCommit();
64 } 66 }
65 67
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 110
109 void TextureLayer::SetBlendBackgroundColor(bool blend) { 111 void TextureLayer::SetBlendBackgroundColor(bool blend) {
110 if (blend_background_color_ == blend) 112 if (blend_background_color_ == blend)
111 return; 113 return;
112 blend_background_color_ = blend; 114 blend_background_color_ = blend;
113 SetNeedsCommit(); 115 SetNeedsCommit();
114 } 116 }
115 117
116 void TextureLayer::SetTextureMailboxInternal( 118 void TextureLayer::SetTextureMailboxInternal(
117 const TextureMailbox& mailbox, 119 const TextureMailbox& mailbox,
118 scoped_ptr<SingleReleaseCallback> release_callback, 120 std::unique_ptr<SingleReleaseCallback> release_callback,
119 bool requires_commit, 121 bool requires_commit,
120 bool allow_mailbox_reuse) { 122 bool allow_mailbox_reuse) {
121 DCHECK(!mailbox.IsValid() || !holder_ref_ || 123 DCHECK(!mailbox.IsValid() || !holder_ref_ ||
122 !mailbox.Equals(holder_ref_->holder()->mailbox()) || 124 !mailbox.Equals(holder_ref_->holder()->mailbox()) ||
123 allow_mailbox_reuse); 125 allow_mailbox_reuse);
124 DCHECK_EQ(mailbox.IsValid(), !!release_callback); 126 DCHECK_EQ(mailbox.IsValid(), !!release_callback);
125 127
126 // If we never commited the mailbox, we need to release it here. 128 // If we never commited the mailbox, we need to release it here.
127 if (mailbox.IsValid()) { 129 if (mailbox.IsValid()) {
128 holder_ref_ = 130 holder_ref_ =
129 TextureMailboxHolder::Create(mailbox, std::move(release_callback)); 131 TextureMailboxHolder::Create(mailbox, std::move(release_callback));
130 } else { 132 } else {
131 holder_ref_ = nullptr; 133 holder_ref_ = nullptr;
132 } 134 }
133 needs_set_mailbox_ = true; 135 needs_set_mailbox_ = true;
134 // If we are within a commit, no need to do it again immediately after. 136 // If we are within a commit, no need to do it again immediately after.
135 if (requires_commit) 137 if (requires_commit)
136 SetNeedsCommit(); 138 SetNeedsCommit();
137 else 139 else
138 SetNeedsPushProperties(); 140 SetNeedsPushProperties();
139 141
140 UpdateDrawsContent(HasDrawableContent()); 142 UpdateDrawsContent(HasDrawableContent());
141 // The active frame needs to be replaced and the mailbox returned before the 143 // The active frame needs to be replaced and the mailbox returned before the
142 // commit is called complete. 144 // commit is called complete.
143 SetNextCommitWaitsForActivation(); 145 SetNextCommitWaitsForActivation();
144 } 146 }
145 147
146 void TextureLayer::SetTextureMailbox( 148 void TextureLayer::SetTextureMailbox(
147 const TextureMailbox& mailbox, 149 const TextureMailbox& mailbox,
148 scoped_ptr<SingleReleaseCallback> release_callback) { 150 std::unique_ptr<SingleReleaseCallback> release_callback) {
149 bool requires_commit = true; 151 bool requires_commit = true;
150 bool allow_mailbox_reuse = false; 152 bool allow_mailbox_reuse = false;
151 SetTextureMailboxInternal(mailbox, std::move(release_callback), 153 SetTextureMailboxInternal(mailbox, std::move(release_callback),
152 requires_commit, allow_mailbox_reuse); 154 requires_commit, allow_mailbox_reuse);
153 } 155 }
154 156
155 static void IgnoreReleaseCallback(const gpu::SyncToken& sync_token, bool lost) { 157 static void IgnoreReleaseCallback(const gpu::SyncToken& sync_token, bool lost) {
156 } 158 }
157 159
158 void TextureLayer::SetTextureMailboxWithoutReleaseCallback( 160 void TextureLayer::SetTextureMailboxWithoutReleaseCallback(
159 const TextureMailbox& mailbox) { 161 const TextureMailbox& mailbox) {
160 // We allow reuse of the mailbox if there is a new sync point signalling new 162 // We allow reuse of the mailbox if there is a new sync point signalling new
161 // content, and the release callback goes nowhere since we'll be calling it 163 // content, and the release callback goes nowhere since we'll be calling it
162 // multiple times for the same mailbox. 164 // multiple times for the same mailbox.
163 DCHECK(!mailbox.IsValid() || !holder_ref_ || 165 DCHECK(!mailbox.IsValid() || !holder_ref_ ||
164 !mailbox.Equals(holder_ref_->holder()->mailbox()) || 166 !mailbox.Equals(holder_ref_->holder()->mailbox()) ||
165 mailbox.sync_token() != holder_ref_->holder()->mailbox().sync_token()); 167 mailbox.sync_token() != holder_ref_->holder()->mailbox().sync_token());
166 scoped_ptr<SingleReleaseCallback> release; 168 std::unique_ptr<SingleReleaseCallback> release;
167 bool requires_commit = true; 169 bool requires_commit = true;
168 bool allow_mailbox_reuse = true; 170 bool allow_mailbox_reuse = true;
169 if (mailbox.IsValid()) 171 if (mailbox.IsValid())
170 release = SingleReleaseCallback::Create(base::Bind(&IgnoreReleaseCallback)); 172 release = SingleReleaseCallback::Create(base::Bind(&IgnoreReleaseCallback));
171 SetTextureMailboxInternal(mailbox, std::move(release), requires_commit, 173 SetTextureMailboxInternal(mailbox, std::move(release), requires_commit,
172 allow_mailbox_reuse); 174 allow_mailbox_reuse);
173 } 175 }
174 176
175 void TextureLayer::SetNeedsDisplayRect(const gfx::Rect& dirty_rect) { 177 void TextureLayer::SetNeedsDisplayRect(const gfx::Rect& dirty_rect) {
176 Layer::SetNeedsDisplayRect(dirty_rect); 178 Layer::SetNeedsDisplayRect(dirty_rect);
(...skipping 18 matching lines...) Expand all
195 } 197 }
196 198
197 bool TextureLayer::HasDrawableContent() const { 199 bool TextureLayer::HasDrawableContent() const {
198 return (client_ || holder_ref_) && Layer::HasDrawableContent(); 200 return (client_ || holder_ref_) && Layer::HasDrawableContent();
199 } 201 }
200 202
201 bool TextureLayer::Update() { 203 bool TextureLayer::Update() {
202 bool updated = Layer::Update(); 204 bool updated = Layer::Update();
203 if (client_) { 205 if (client_) {
204 TextureMailbox mailbox; 206 TextureMailbox mailbox;
205 scoped_ptr<SingleReleaseCallback> release_callback; 207 std::unique_ptr<SingleReleaseCallback> release_callback;
206 if (client_->PrepareTextureMailbox( 208 if (client_->PrepareTextureMailbox(
207 &mailbox, 209 &mailbox,
208 &release_callback, 210 &release_callback,
209 layer_tree_host()->UsingSharedMemoryResources())) { 211 layer_tree_host()->UsingSharedMemoryResources())) {
210 // Already within a commit, no need to do another one immediately. 212 // Already within a commit, no need to do another one immediately.
211 bool requires_commit = false; 213 bool requires_commit = false;
212 bool allow_mailbox_reuse = false; 214 bool allow_mailbox_reuse = false;
213 SetTextureMailboxInternal(mailbox, std::move(release_callback), 215 SetTextureMailboxInternal(mailbox, std::move(release_callback),
214 requires_commit, allow_mailbox_reuse); 216 requires_commit, allow_mailbox_reuse);
215 updated = true; 217 updated = true;
(...skipping 13 matching lines...) Expand all
229 TextureLayerImpl* texture_layer = static_cast<TextureLayerImpl*>(layer); 231 TextureLayerImpl* texture_layer = static_cast<TextureLayerImpl*>(layer);
230 texture_layer->SetFlipped(flipped_); 232 texture_layer->SetFlipped(flipped_);
231 texture_layer->SetNearestNeighbor(nearest_neighbor_); 233 texture_layer->SetNearestNeighbor(nearest_neighbor_);
232 texture_layer->SetUVTopLeft(uv_top_left_); 234 texture_layer->SetUVTopLeft(uv_top_left_);
233 texture_layer->SetUVBottomRight(uv_bottom_right_); 235 texture_layer->SetUVBottomRight(uv_bottom_right_);
234 texture_layer->SetVertexOpacity(vertex_opacity_); 236 texture_layer->SetVertexOpacity(vertex_opacity_);
235 texture_layer->SetPremultipliedAlpha(premultiplied_alpha_); 237 texture_layer->SetPremultipliedAlpha(premultiplied_alpha_);
236 texture_layer->SetBlendBackgroundColor(blend_background_color_); 238 texture_layer->SetBlendBackgroundColor(blend_background_color_);
237 if (needs_set_mailbox_) { 239 if (needs_set_mailbox_) {
238 TextureMailbox texture_mailbox; 240 TextureMailbox texture_mailbox;
239 scoped_ptr<SingleReleaseCallbackImpl> release_callback_impl; 241 std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl;
240 if (holder_ref_) { 242 if (holder_ref_) {
241 TextureMailboxHolder* holder = holder_ref_->holder(); 243 TextureMailboxHolder* holder = holder_ref_->holder();
242 texture_mailbox = holder->mailbox(); 244 texture_mailbox = holder->mailbox();
243 release_callback_impl = holder->GetCallbackForImplThread(); 245 release_callback_impl = holder->GetCallbackForImplThread();
244 } 246 }
245 texture_layer->SetTextureMailbox(texture_mailbox, 247 texture_layer->SetTextureMailbox(texture_mailbox,
246 std::move(release_callback_impl)); 248 std::move(release_callback_impl));
247 needs_set_mailbox_ = false; 249 needs_set_mailbox_ = false;
248 } 250 }
249 } 251 }
250 252
251 TextureLayer::TextureMailboxHolder::MainThreadReference::MainThreadReference( 253 TextureLayer::TextureMailboxHolder::MainThreadReference::MainThreadReference(
252 TextureMailboxHolder* holder) 254 TextureMailboxHolder* holder)
253 : holder_(holder) { 255 : holder_(holder) {
254 holder_->InternalAddRef(); 256 holder_->InternalAddRef();
255 } 257 }
256 258
257 TextureLayer::TextureMailboxHolder::MainThreadReference:: 259 TextureLayer::TextureMailboxHolder::MainThreadReference::
258 ~MainThreadReference() { 260 ~MainThreadReference() {
259 holder_->InternalRelease(); 261 holder_->InternalRelease();
260 } 262 }
261 263
262 TextureLayer::TextureMailboxHolder::TextureMailboxHolder( 264 TextureLayer::TextureMailboxHolder::TextureMailboxHolder(
263 const TextureMailbox& mailbox, 265 const TextureMailbox& mailbox,
264 scoped_ptr<SingleReleaseCallback> release_callback) 266 std::unique_ptr<SingleReleaseCallback> release_callback)
265 : internal_references_(0), 267 : internal_references_(0),
266 mailbox_(mailbox), 268 mailbox_(mailbox),
267 release_callback_(std::move(release_callback)), 269 release_callback_(std::move(release_callback)),
268 sync_token_(mailbox.sync_token()), 270 sync_token_(mailbox.sync_token()),
269 is_lost_(false) {} 271 is_lost_(false) {}
270 272
271 TextureLayer::TextureMailboxHolder::~TextureMailboxHolder() { 273 TextureLayer::TextureMailboxHolder::~TextureMailboxHolder() {
272 DCHECK_EQ(0u, internal_references_); 274 DCHECK_EQ(0u, internal_references_);
273 } 275 }
274 276
275 scoped_ptr<TextureLayer::TextureMailboxHolder::MainThreadReference> 277 std::unique_ptr<TextureLayer::TextureMailboxHolder::MainThreadReference>
276 TextureLayer::TextureMailboxHolder::Create( 278 TextureLayer::TextureMailboxHolder::Create(
277 const TextureMailbox& mailbox, 279 const TextureMailbox& mailbox,
278 scoped_ptr<SingleReleaseCallback> release_callback) { 280 std::unique_ptr<SingleReleaseCallback> release_callback) {
279 return make_scoped_ptr(new MainThreadReference( 281 return base::WrapUnique(new MainThreadReference(
280 new TextureMailboxHolder(mailbox, std::move(release_callback)))); 282 new TextureMailboxHolder(mailbox, std::move(release_callback))));
281 } 283 }
282 284
283 void TextureLayer::TextureMailboxHolder::Return( 285 void TextureLayer::TextureMailboxHolder::Return(
284 const gpu::SyncToken& sync_token, 286 const gpu::SyncToken& sync_token,
285 bool is_lost) { 287 bool is_lost) {
286 base::AutoLock lock(arguments_lock_); 288 base::AutoLock lock(arguments_lock_);
287 sync_token_ = sync_token; 289 sync_token_ = sync_token;
288 is_lost_ = is_lost; 290 is_lost_ = is_lost;
289 } 291 }
290 292
291 scoped_ptr<SingleReleaseCallbackImpl> 293 std::unique_ptr<SingleReleaseCallbackImpl>
292 TextureLayer::TextureMailboxHolder::GetCallbackForImplThread() { 294 TextureLayer::TextureMailboxHolder::GetCallbackForImplThread() {
293 // We can't call GetCallbackForImplThread if we released the main thread 295 // We can't call GetCallbackForImplThread if we released the main thread
294 // reference. 296 // reference.
295 DCHECK_GT(internal_references_, 0u); 297 DCHECK_GT(internal_references_, 0u);
296 InternalAddRef(); 298 InternalAddRef();
297 return SingleReleaseCallbackImpl::Create( 299 return SingleReleaseCallbackImpl::Create(
298 base::Bind(&TextureMailboxHolder::ReturnAndReleaseOnImplThread, this)); 300 base::Bind(&TextureMailboxHolder::ReturnAndReleaseOnImplThread, this));
299 } 301 }
300 302
301 void TextureLayer::TextureMailboxHolder::InternalAddRef() { 303 void TextureLayer::TextureMailboxHolder::InternalAddRef() {
(...skipping 12 matching lines...) Expand all
314 void TextureLayer::TextureMailboxHolder::ReturnAndReleaseOnImplThread( 316 void TextureLayer::TextureMailboxHolder::ReturnAndReleaseOnImplThread(
315 const gpu::SyncToken& sync_token, 317 const gpu::SyncToken& sync_token,
316 bool is_lost, 318 bool is_lost,
317 BlockingTaskRunner* main_thread_task_runner) { 319 BlockingTaskRunner* main_thread_task_runner) {
318 Return(sync_token, is_lost); 320 Return(sync_token, is_lost);
319 main_thread_task_runner->PostTask( 321 main_thread_task_runner->PostTask(
320 FROM_HERE, base::Bind(&TextureMailboxHolder::InternalRelease, this)); 322 FROM_HERE, base::Bind(&TextureMailboxHolder::InternalRelease, this));
321 } 323 }
322 324
323 } // namespace cc 325 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/texture_layer.h ('k') | cc/layers/texture_layer_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698