Home | History | Annotate | Download | only in resources
      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 base {
     13 class SingleThreadTaskRunner;
     14 }
     15 
     16 namespace cc {
     17 class ContextProvider;
     18 class SingleReleaseCallback;
     19 
     20 class CC_EXPORT TextureMailboxDeleter {
     21  public:
     22   explicit TextureMailboxDeleter(
     23       const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
     24   ~TextureMailboxDeleter();
     25 
     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,
     35       unsigned texture_id);
     36 
     37  private:
     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,
     41                                     uint32 sync_point,
     42                                     bool is_lost);
     43 
     44   scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner_;
     45   ScopedPtrVector<SingleReleaseCallback> impl_callbacks_;
     46   base::WeakPtrFactory<TextureMailboxDeleter> weak_ptr_factory_;
     47 };
     48 
     49 }  // namespace cc
     50 
     51 #endif  // CC_RESOURCES_TEXTURE_MAILBOX_DELETER_H_
     52