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

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

Issue 1427543002: Modified old wait sync point functions to also accept new sync tokens. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix mock gpu video accelerator factory Created 5 years, 1 month 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
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/synchronization/lock.h" 10 #include "base/synchronization/lock.h"
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 147
148 void TextureLayer::SetTextureMailbox( 148 void TextureLayer::SetTextureMailbox(
149 const TextureMailbox& mailbox, 149 const TextureMailbox& mailbox,
150 scoped_ptr<SingleReleaseCallback> release_callback) { 150 scoped_ptr<SingleReleaseCallback> release_callback) {
151 bool requires_commit = true; 151 bool requires_commit = true;
152 bool allow_mailbox_reuse = false; 152 bool allow_mailbox_reuse = false;
153 SetTextureMailboxInternal( 153 SetTextureMailboxInternal(
154 mailbox, release_callback.Pass(), requires_commit, allow_mailbox_reuse); 154 mailbox, release_callback.Pass(), requires_commit, allow_mailbox_reuse);
155 } 155 }
156 156
157 static void IgnoreReleaseCallback(uint32 sync_point, bool lost) {} 157 static void IgnoreReleaseCallback(uint32 sync_point,
158 const gpu::SyncToken& sync_token,
159 bool lost) {}
158 160
159 void TextureLayer::SetTextureMailboxWithoutReleaseCallback( 161 void TextureLayer::SetTextureMailboxWithoutReleaseCallback(
160 const TextureMailbox& mailbox) { 162 const TextureMailbox& mailbox) {
161 // We allow reuse of the mailbox if there is a new sync point signalling new 163 // We allow reuse of the mailbox if there is a new sync point signalling new
162 // content, and the release callback goes nowhere since we'll be calling it 164 // content, and the release callback goes nowhere since we'll be calling it
163 // multiple times for the same mailbox. 165 // multiple times for the same mailbox.
164 DCHECK(!mailbox.IsValid() || !holder_ref_ || 166 DCHECK(!mailbox.IsValid() || !holder_ref_ ||
165 !mailbox.Equals(holder_ref_->holder()->mailbox()) || 167 !mailbox.Equals(holder_ref_->holder()->mailbox()) ||
166 mailbox.sync_point() != holder_ref_->holder()->mailbox().sync_point()); 168 mailbox.sync_point() !=
169 holder_ref_->holder()->mailbox().sync_point() ||
170 mailbox.sync_token() != holder_ref_->holder()->mailbox().sync_token());
167 scoped_ptr<SingleReleaseCallback> release; 171 scoped_ptr<SingleReleaseCallback> release;
168 bool requires_commit = true; 172 bool requires_commit = true;
169 bool allow_mailbox_reuse = true; 173 bool allow_mailbox_reuse = true;
170 if (mailbox.IsValid()) 174 if (mailbox.IsValid())
171 release = SingleReleaseCallback::Create(base::Bind(&IgnoreReleaseCallback)); 175 release = SingleReleaseCallback::Create(base::Bind(&IgnoreReleaseCallback));
172 SetTextureMailboxInternal( 176 SetTextureMailboxInternal(
173 mailbox, release.Pass(), requires_commit, allow_mailbox_reuse); 177 mailbox, release.Pass(), requires_commit, allow_mailbox_reuse);
174 } 178 }
175 179
176 void TextureLayer::SetNeedsDisplayRect(const gfx::Rect& dirty_rect) { 180 void TextureLayer::SetNeedsDisplayRect(const gfx::Rect& dirty_rect) {
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 holder_->InternalRelease(); 265 holder_->InternalRelease();
262 } 266 }
263 267
264 TextureLayer::TextureMailboxHolder::TextureMailboxHolder( 268 TextureLayer::TextureMailboxHolder::TextureMailboxHolder(
265 const TextureMailbox& mailbox, 269 const TextureMailbox& mailbox,
266 scoped_ptr<SingleReleaseCallback> release_callback) 270 scoped_ptr<SingleReleaseCallback> release_callback)
267 : internal_references_(0), 271 : internal_references_(0),
268 mailbox_(mailbox), 272 mailbox_(mailbox),
269 release_callback_(release_callback.Pass()), 273 release_callback_(release_callback.Pass()),
270 sync_point_(mailbox.sync_point()), 274 sync_point_(mailbox.sync_point()),
271 is_lost_(false) { 275 sync_token_(mailbox.sync_token()),
272 } 276 is_lost_(false) {}
273 277
274 TextureLayer::TextureMailboxHolder::~TextureMailboxHolder() { 278 TextureLayer::TextureMailboxHolder::~TextureMailboxHolder() {
275 DCHECK_EQ(0u, internal_references_); 279 DCHECK_EQ(0u, internal_references_);
276 } 280 }
277 281
278 scoped_ptr<TextureLayer::TextureMailboxHolder::MainThreadReference> 282 scoped_ptr<TextureLayer::TextureMailboxHolder::MainThreadReference>
279 TextureLayer::TextureMailboxHolder::Create( 283 TextureLayer::TextureMailboxHolder::Create(
280 const TextureMailbox& mailbox, 284 const TextureMailbox& mailbox,
281 scoped_ptr<SingleReleaseCallback> release_callback) { 285 scoped_ptr<SingleReleaseCallback> release_callback) {
282 return make_scoped_ptr(new MainThreadReference( 286 return make_scoped_ptr(new MainThreadReference(
283 new TextureMailboxHolder(mailbox, release_callback.Pass()))); 287 new TextureMailboxHolder(mailbox, release_callback.Pass())));
284 } 288 }
285 289
286 void TextureLayer::TextureMailboxHolder::Return(uint32 sync_point, 290 void TextureLayer::TextureMailboxHolder::Return(
287 bool is_lost) { 291 uint32 sync_point,
292 const gpu::SyncToken& sync_token,
293 bool is_lost) {
288 base::AutoLock lock(arguments_lock_); 294 base::AutoLock lock(arguments_lock_);
289 sync_point_ = sync_point; 295 sync_point_ = sync_point;
296 sync_token_ = sync_token;
290 is_lost_ = is_lost; 297 is_lost_ = is_lost;
291 } 298 }
292 299
293 scoped_ptr<SingleReleaseCallbackImpl> 300 scoped_ptr<SingleReleaseCallbackImpl>
294 TextureLayer::TextureMailboxHolder::GetCallbackForImplThread() { 301 TextureLayer::TextureMailboxHolder::GetCallbackForImplThread() {
295 // We can't call GetCallbackForImplThread if we released the main thread 302 // We can't call GetCallbackForImplThread if we released the main thread
296 // reference. 303 // reference.
297 DCHECK_GT(internal_references_, 0u); 304 DCHECK_GT(internal_references_, 0u);
298 InternalAddRef(); 305 InternalAddRef();
299 return SingleReleaseCallbackImpl::Create( 306 return SingleReleaseCallbackImpl::Create(
300 base::Bind(&TextureMailboxHolder::ReturnAndReleaseOnImplThread, this)); 307 base::Bind(&TextureMailboxHolder::ReturnAndReleaseOnImplThread, this));
301 } 308 }
302 309
303 void TextureLayer::TextureMailboxHolder::InternalAddRef() { 310 void TextureLayer::TextureMailboxHolder::InternalAddRef() {
304 ++internal_references_; 311 ++internal_references_;
305 } 312 }
306 313
307 void TextureLayer::TextureMailboxHolder::InternalRelease() { 314 void TextureLayer::TextureMailboxHolder::InternalRelease() {
308 DCHECK(main_thread_checker_.CalledOnValidThread()); 315 DCHECK(main_thread_checker_.CalledOnValidThread());
309 if (!--internal_references_) { 316 if (!--internal_references_) {
310 release_callback_->Run(sync_point_, is_lost_); 317 release_callback_->Run(sync_point_, sync_token_, is_lost_);
311 mailbox_ = TextureMailbox(); 318 mailbox_ = TextureMailbox();
312 release_callback_ = nullptr; 319 release_callback_ = nullptr;
313 } 320 }
314 } 321 }
315 322
316 void TextureLayer::TextureMailboxHolder::ReturnAndReleaseOnImplThread( 323 void TextureLayer::TextureMailboxHolder::ReturnAndReleaseOnImplThread(
317 uint32 sync_point, 324 uint32 sync_point,
325 const gpu::SyncToken& sync_token,
318 bool is_lost, 326 bool is_lost,
319 BlockingTaskRunner* main_thread_task_runner) { 327 BlockingTaskRunner* main_thread_task_runner) {
320 Return(sync_point, is_lost); 328 Return(sync_point, sync_token, is_lost);
321 main_thread_task_runner->PostTask( 329 main_thread_task_runner->PostTask(
322 FROM_HERE, base::Bind(&TextureMailboxHolder::InternalRelease, this)); 330 FROM_HERE, base::Bind(&TextureMailboxHolder::InternalRelease, this));
323 } 331 }
324 332
325 } // namespace cc 333 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698