texture_mailbox_deleter.h revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
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 12namespace cc { 13class ContextProvider; 14class SingleReleaseCallback; 15 16class 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( 36 SingleReleaseCallback* impl_callback, 37 unsigned sync_point, 38 bool is_lost); 39 40 base::WeakPtrFactory<TextureMailboxDeleter> weak_ptr_factory_; 41 ScopedPtrVector<SingleReleaseCallback> impl_callbacks_; 42}; 43 44} // namespace cc 45 46#endif // CC_RESOURCES_TEXTURE_MAILBOX_DELETER_H_ 47