Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / cc / resources / texture_mailbox_deleter.h
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.
4
5 #ifndef CC_RESOURCES_TEXTURE_MAILBOX_DELETER_H_
6 #define CC_RESOURCES_TEXTURE_MAILBOX_DELETER_H_
7
8 #include "base/memory/weak_ptr.h"
9 #include "cc/base/cc_export.h"
10 #include "cc/base/scoped_ptr_vector.h"
11
12 namespace cc {
13 class ContextProvider;
14 class SingleReleaseCallback;
15
16 class CC_EXPORT TextureMailboxDeleter {
17  public:
18   TextureMailboxDeleter();
19   ~TextureMailboxDeleter();
20
21   // Returns a Callback that can be used as the ReleaseCallback for a
22   // TextureMailbox attached to the |texture_id|. The ReleaseCallback can
23   // be passed to other threads and will destroy the texture, once it is
24   // run, on the impl thread. If the TextureMailboxDeleter is destroyed
25   // due to the compositor shutting down, then the ReleaseCallback will
26   // become a no-op and the texture will be deleted immediately on the
27   // impl thread, along with dropping the reference to the ContextProvider.
28   scoped_ptr<SingleReleaseCallback> GetReleaseCallback(
29       const scoped_refptr<ContextProvider>& context_provider,
30       unsigned texture_id);
31
32  private:
33   // Runs the |impl_callback| to delete the texture and removes the callback
34   // from the |impl_callbacks_| list.
35   void RunDeleteTextureOnImplThread(SingleReleaseCallback* impl_callback,
36                                     uint32 sync_point,
37                                     bool is_lost);
38
39   ScopedPtrVector<SingleReleaseCallback> impl_callbacks_;
40   base::WeakPtrFactory<TextureMailboxDeleter> weak_ptr_factory_;
41 };
42
43 }  // namespace cc
44
45 #endif  // CC_RESOURCES_TEXTURE_MAILBOX_DELETER_H_