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 |