diff options
Diffstat (limited to 'libs/vr/libvrflinger/acquired_buffer.cpp')
-rw-r--r-- | libs/vr/libvrflinger/acquired_buffer.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/libs/vr/libvrflinger/acquired_buffer.cpp b/libs/vr/libvrflinger/acquired_buffer.cpp index fda9585dc4..9614c6d306 100644 --- a/libs/vr/libvrflinger/acquired_buffer.cpp +++ b/libs/vr/libvrflinger/acquired_buffer.cpp @@ -9,8 +9,8 @@ namespace android { namespace dvr { AcquiredBuffer::AcquiredBuffer(const std::shared_ptr<BufferConsumer>& buffer, - LocalHandle acquire_fence) - : buffer_(buffer), acquire_fence_(std::move(acquire_fence)) {} + LocalHandle acquire_fence, std::size_t slot) + : buffer_(buffer), acquire_fence_(std::move(acquire_fence)), slot_(slot) {} AcquiredBuffer::AcquiredBuffer(const std::shared_ptr<BufferConsumer>& buffer, int* error) { @@ -31,18 +31,20 @@ AcquiredBuffer::AcquiredBuffer(const std::shared_ptr<BufferConsumer>& buffer, } } -AcquiredBuffer::AcquiredBuffer(AcquiredBuffer&& other) - : buffer_(std::move(other.buffer_)), - acquire_fence_(std::move(other.acquire_fence_)) {} +AcquiredBuffer::AcquiredBuffer(AcquiredBuffer&& other) { + *this = std::move(other); +} AcquiredBuffer::~AcquiredBuffer() { Release(LocalHandle(kEmptyFence)); } AcquiredBuffer& AcquiredBuffer::operator=(AcquiredBuffer&& other) { if (this != &other) { - Release(LocalHandle(kEmptyFence)); + Release(); - buffer_ = std::move(other.buffer_); - acquire_fence_ = std::move(other.acquire_fence_); + using std::swap; + swap(buffer_, other.buffer_); + swap(acquire_fence_, other.acquire_fence_); + swap(slot_, other.slot_); } return *this; } @@ -81,8 +83,6 @@ int AcquiredBuffer::Release(LocalHandle release_fence) { ALOGD_IF(TRACE, "AcquiredBuffer::Release: buffer_id=%d release_fence=%d", buffer_ ? buffer_->id() : -1, release_fence.Get()); if (buffer_) { - // Close the release fence since we can't transfer it with an async release. - release_fence.Close(); const int ret = buffer_->ReleaseAsync(); if (ret < 0) { ALOGE("AcquiredBuffer::Release: Failed to release buffer %d: %s", @@ -92,9 +92,10 @@ int AcquiredBuffer::Release(LocalHandle release_fence) { } buffer_ = nullptr; - acquire_fence_.Close(); } + acquire_fence_.Close(); + slot_ = 0; return 0; } |