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

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..8f1e83de1167af6e9b27e357c2a861ae7db56585 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(!ptr_holder_) << "SingleReleaseCallback was never run.";
}
void SingleReleaseCallback::Run(const gpu::SyncToken& sync_token,
bool is_lost) {
- DCHECK(!callback_.is_null())
+ DCHECK(callback_ || ptr_holder_)
<< "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/ipc/single_release_callback_struct_traits.cc ('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