Chromium Code Reviews| 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 |