|  | // Copyright 2014 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "cc/resources/single_release_callback_impl.h" | 
|  |  | 
|  | #include "base/callback_helpers.h" | 
|  | #include "base/logging.h" | 
|  | #include "cc/base/blocking_task_runner.h" | 
|  |  | 
|  | namespace cc { | 
|  |  | 
|  | SingleReleaseCallbackImpl::SingleReleaseCallbackImpl( | 
|  | const ReleaseCallbackImpl& callback) | 
|  | : has_been_run_(false), callback_(callback) { | 
|  | DCHECK(!callback_.is_null()) | 
|  | << "Use a NULL SingleReleaseCallbackImpl for an empty callback."; | 
|  | } | 
|  |  | 
|  | SingleReleaseCallbackImpl::~SingleReleaseCallbackImpl() { | 
|  | DCHECK(callback_.is_null() || has_been_run_) | 
|  | << "SingleReleaseCallbackImpl was never run."; | 
|  | } | 
|  |  | 
|  | void SingleReleaseCallbackImpl::Run( | 
|  | uint32 sync_point, | 
|  | bool is_lost, | 
|  | BlockingTaskRunner* main_thread_task_runner) { | 
|  | DCHECK(!has_been_run_) << "SingleReleaseCallbackImpl was run more than once."; | 
|  | has_been_run_ = true; | 
|  | callback_.Run(sync_point, is_lost, main_thread_task_runner); | 
|  | } | 
|  |  | 
|  | }  // namespace cc |