// Copyright 2013 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.

#ifndef CC_RESOURCES_TEXTURE_MAILBOX_DELETER_H_
#define CC_RESOURCES_TEXTURE_MAILBOX_DELETER_H_

#include "base/memory/weak_ptr.h"
#include "cc/base/cc_export.h"
#include "cc/base/scoped_ptr_vector.h"

namespace base {
class SingleThreadTaskRunner;
}

namespace cc {
class ContextProvider;
class SingleReleaseCallback;

class CC_EXPORT TextureMailboxDeleter {
 public:
  explicit TextureMailboxDeleter(
      const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
  ~TextureMailboxDeleter();

  // Returns a Callback that can be used as the ReleaseCallback for a
  // TextureMailbox attached to the |texture_id|. The ReleaseCallback can
  // be passed to other threads and will destroy the texture, once it is
  // run, on the impl thread. If the TextureMailboxDeleter is destroyed
  // due to the compositor shutting down, then the ReleaseCallback will
  // become a no-op and the texture will be deleted immediately on the
  // impl thread, along with dropping the reference to the ContextProvider.
  scoped_ptr<SingleReleaseCallback> GetReleaseCallback(
      const scoped_refptr<ContextProvider>& context_provider,
      unsigned texture_id);

 private:
  // Runs the |impl_callback| to delete the texture and removes the callback
  // from the |impl_callbacks_| list.
  void RunDeleteTextureOnImplThread(SingleReleaseCallback* impl_callback,
                                    uint32 sync_point,
                                    bool is_lost);

  scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner_;
  ScopedPtrVector<SingleReleaseCallback> impl_callbacks_;
  base::WeakPtrFactory<TextureMailboxDeleter> weak_ptr_factory_;
};

}  // namespace cc

#endif  // CC_RESOURCES_TEXTURE_MAILBOX_DELETER_H_
