| 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
|
|
|