1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CC_RESOURCES_TEXTURE_MAILBOX_DELETER_H_
6 #define CC_RESOURCES_TEXTURE_MAILBOX_DELETER_H_
8 #include "base/memory/weak_ptr.h"
9 #include "cc/base/cc_export.h"
10 #include "cc/base/scoped_ptr_vector.h"
13 class SingleThreadTaskRunner
;
17 class ContextProvider
;
18 class SingleReleaseCallback
;
20 class CC_EXPORT TextureMailboxDeleter
{
22 explicit TextureMailboxDeleter(
23 const scoped_refptr
<base::SingleThreadTaskRunner
>& task_runner
);
24 ~TextureMailboxDeleter();
26 // Returns a Callback that can be used as the ReleaseCallback for a
27 // TextureMailbox attached to the |texture_id|. The ReleaseCallback can
28 // be passed to other threads and will destroy the texture, once it is
29 // run, on the impl thread. If the TextureMailboxDeleter is destroyed
30 // due to the compositor shutting down, then the ReleaseCallback will
31 // become a no-op and the texture will be deleted immediately on the
32 // impl thread, along with dropping the reference to the ContextProvider.
33 scoped_ptr
<SingleReleaseCallback
> GetReleaseCallback(
34 const scoped_refptr
<ContextProvider
>& context_provider
,
38 // Runs the |impl_callback| to delete the texture and removes the callback
39 // from the |impl_callbacks_| list.
40 void RunDeleteTextureOnImplThread(SingleReleaseCallback
* impl_callback
,
44 scoped_refptr
<base::SingleThreadTaskRunner
> impl_task_runner_
;
45 ScopedPtrVector
<SingleReleaseCallback
> impl_callbacks_
;
46 base::WeakPtrFactory
<TextureMailboxDeleter
> weak_ptr_factory_
;
51 #endif // CC_RESOURCES_TEXTURE_MAILBOX_DELETER_H_