Index: components/exo/buffer.h |
diff --git a/components/exo/buffer.h b/components/exo/buffer.h |
index 192513b63bc3144d3a0349bd03ec62bfb441724c..2f60f5b9f7fa3c7b0ed21e43858ca4b7cf06d0df 100644 |
--- a/components/exo/buffer.h |
+++ b/components/exo/buffer.h |
@@ -9,9 +9,6 @@ |
#include "base/macros.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/weak_ptr.h" |
-#include "gpu/command_buffer/common/mailbox.h" |
-#include "gpu/command_buffer/common/sync_token.h" |
-#include "ui/gfx/buffer_types.h" |
#include "ui/gfx/geometry/size.h" |
namespace base { |
@@ -29,6 +26,10 @@ namespace gfx { |
class GpuMemoryBuffer; |
} |
+namespace gpu { |
+struct SyncToken; |
+} |
+ |
namespace exo { |
// This class provides the content for a Surface. The mechanism by which a |
@@ -50,7 +51,7 @@ class Buffer : public base::SupportsWeakPtr<Buffer> { |
// This function can be used to acquire a texture mailbox that is bound to |
// the buffer. Returns a release callback on success. The release callback |
// must be called before a new texture mailbox can be acquired. |
- scoped_ptr<cc::SingleReleaseCallback> AcquireTextureMailbox( |
+ scoped_ptr<cc::SingleReleaseCallback> ProduceTextureMailbox( |
cc::TextureMailbox* mailbox); |
// Returns the size of the buffer. |
@@ -60,18 +61,38 @@ class Buffer : public base::SupportsWeakPtr<Buffer> { |
scoped_refptr<base::trace_event::TracedValue> AsTracedValue() const; |
private: |
- static void Release(base::WeakPtr<Buffer> buffer, |
- unsigned texture_target, |
- unsigned texture_id, |
- unsigned image_id, |
- const gpu::SyncToken& sync_token, |
- bool is_lost); |
- |
+ class Texture; |
+ |
+ // Decrements the use count of buffer and notifies the client that buffer |
+ // as been released if it reached 0. |
+ void Release(); |
+ |
+ // This is used by ProduceTextureMailbox() to produce a release callback |
+ // that releases the buffer contents referenced by a texture before the |
+ // texture is destroyed or reused. |
+ // Note: This is a static function as it needs to run even if the buffer |
+ // has been destroyed. |
+ static void ReleaseTexture(base::WeakPtr<Buffer> buffer, |
+ scoped_ptr<Texture> texture, |
+ const gpu::SyncToken& sync_token, |
+ bool is_lost); |
+ |
+ // The GPU memory buffer that contains the contents of this buffer. |
scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer_; |
+ |
+ // Texture target that must be used when creating a texture for buffer. |
const unsigned texture_target_; |
- unsigned texture_id_; |
- unsigned image_id_; |
- gpu::Mailbox mailbox_; |
+ |
+ // This is incremented when a texture mailbox is produced and decremented |
+ // when a texture mailbox is released. It is used to determine when we should |
+ // notify the client that buffer has been released. |
+ unsigned use_count_; |
+ |
+ // The last released texture instance. ProduceTextureMailbox() will use this |
+ // instead of creating a new texture when possible. |
+ scoped_ptr<Texture> last_texture_; |
+ |
+ // The client release callback. |
base::Closure release_callback_; |
DISALLOW_COPY_AND_ASSIGN(Buffer); |