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

Unified Diff: cc/resources/single_release_callback.cc

Issue 2686833003: CopyOutputResult must have a working release callback when received over mojo (Closed)
Patch Set: c Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: cc/resources/single_release_callback.cc
diff --git a/cc/resources/single_release_callback.cc b/cc/resources/single_release_callback.cc
index 4c199dc6a4d585816655abbf1b708a5c9c9e63ec..543c28cb8c78d0656cc76396b706f250ebdcfe97 100644
--- a/cc/resources/single_release_callback.cc
+++ b/cc/resources/single_release_callback.cc
@@ -15,15 +15,25 @@ SingleReleaseCallback::SingleReleaseCallback(const ReleaseCallback& callback)
<< "Use a NULL SingleReleaseCallback for an empty callback.";
}
+SingleReleaseCallback::SingleReleaseCallback(
+ std::unique_ptr<PtrHolder> ptr_holder)
+ : ptr_holder_(std::move(ptr_holder)) {}
+
SingleReleaseCallback::~SingleReleaseCallback() {
- DCHECK(callback_.is_null()) << "SingleReleaseCallback was never run.";
+ DCHECK(callback_.is_null() && !ptr_holder_)
danakj 2017/02/08 20:53:31 split a DCHECK with && into 2 DCHECKs so you can t
Saman Sami 2017/02/08 21:44:21 Done.
+ << "SingleReleaseCallback was never run.";
}
void SingleReleaseCallback::Run(const gpu::SyncToken& sync_token,
bool is_lost) {
- DCHECK(!callback_.is_null())
+ DCHECK(!callback_.is_null() || ptr_holder_)
danakj 2017/02/08 20:53:31 I think this can be written DCHECK(callback_ || pt
Saman Sami 2017/02/08 21:44:21 Done.
<< "SingleReleaseCallback was run more than once.";
- base::ResetAndReturn(&callback_).Run(sync_token, is_lost);
+ if (ptr_holder_)
+ ptr_holder_->Release(sync_token, is_lost);
+ else
+ callback_.Run(sync_token, is_lost);
+ ptr_holder_.reset();
+ callback_.Reset();
}
} // namespace cc
« cc/resources/single_release_callback.h ('K') | « cc/resources/single_release_callback.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698