diff options
author | Greg Hackmann <ghackmann@google.com> | 2014-05-09 21:51:51 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-05-09 21:51:51 +0000 |
commit | 9493d4924a59f14b698389386337a9c07a7ea3c4 (patch) | |
tree | 98651c15faa330ec60118537abcb79225b5adcfd /libs | |
parent | 4b46776ff88c5a365700b88e8b2b04e1b2c77e6e (diff) | |
parent | 9eb142e34a5bc11508c0bd6f60ad3933c60aa530 (diff) | |
download | frameworks_native-9493d4924a59f14b698389386337a9c07a7ea3c4.zip frameworks_native-9493d4924a59f14b698389386337a9c07a7ea3c4.tar.gz frameworks_native-9493d4924a59f14b698389386337a9c07a7ea3c4.tar.bz2 |
am 9eb142e3: am a9d49f99: Merge "Revert "Use asynchronous lock/unlock API""
* commit '9eb142e34a5bc11508c0bd6f60ad3933c60aa530':
Revert "Use asynchronous lock/unlock API"
Diffstat (limited to 'libs')
-rw-r--r-- | libs/gui/Surface.cpp | 18 | ||||
-rw-r--r-- | libs/ui/GraphicBuffer.cpp | 46 | ||||
-rw-r--r-- | libs/ui/GraphicBufferMapper.cpp | 62 |
3 files changed, 13 insertions, 113 deletions
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index 21ffc06..27dbc4e 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -740,6 +740,15 @@ status_t Surface::lock( ALOGE_IF(err, "dequeueBuffer failed (%s)", strerror(-err)); if (err == NO_ERROR) { sp<GraphicBuffer> backBuffer(GraphicBuffer::getSelf(out)); + sp<Fence> fence(new Fence(fenceFd)); + + err = fence->waitForever("Surface::lock"); + if (err != OK) { + ALOGE("Fence::wait failed (%s)", strerror(-err)); + cancelBuffer(out, fenceFd); + return err; + } + const Rect bounds(backBuffer->width, backBuffer->height); Region newDirtyRegion; @@ -790,9 +799,9 @@ status_t Surface::lock( } void* vaddr; - status_t res = backBuffer->lockAsync( + status_t res = backBuffer->lock( GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN, - newDirtyRegion.bounds(), &vaddr, fenceFd); + newDirtyRegion.bounds(), &vaddr); ALOGW_IF(res, "failed locking buffer (handle = %p)", backBuffer->handle); @@ -818,11 +827,10 @@ status_t Surface::unlockAndPost() return INVALID_OPERATION; } - int fd = -1; - status_t err = mLockedBuffer->unlockAsync(&fd); + status_t err = mLockedBuffer->unlock(); ALOGE_IF(err, "failed unlocking buffer (%p)", mLockedBuffer->handle); - err = queueBuffer(mLockedBuffer.get(), fd); + err = queueBuffer(mLockedBuffer.get(), -1); ALOGE_IF(err, "queueBuffer (handle=%p) failed (%s)", mLockedBuffer->handle, strerror(-err)); diff --git a/libs/ui/GraphicBuffer.cpp b/libs/ui/GraphicBuffer.cpp index 708888e..c4e4efa 100644 --- a/libs/ui/GraphicBuffer.cpp +++ b/libs/ui/GraphicBuffer.cpp @@ -200,52 +200,6 @@ status_t GraphicBuffer::unlock() return res; } -status_t GraphicBuffer::lockAsync(uint32_t usage, void** vaddr, int fenceFd) -{ - const Rect lockBounds(width, height); - status_t res = lockAsync(usage, lockBounds, vaddr, fenceFd); - return res; -} - -status_t GraphicBuffer::lockAsync(uint32_t usage, const Rect& rect, void** vaddr, int fenceFd) -{ - if (rect.left < 0 || rect.right > this->width || - rect.top < 0 || rect.bottom > this->height) { - ALOGE("locking pixels (%d,%d,%d,%d) outside of buffer (w=%d, h=%d)", - rect.left, rect.top, rect.right, rect.bottom, - this->width, this->height); - return BAD_VALUE; - } - status_t res = getBufferMapper().lockAsync(handle, usage, rect, vaddr, fenceFd); - return res; -} - -status_t GraphicBuffer::lockAsyncYCbCr(uint32_t usage, android_ycbcr *ycbcr, int fenceFd) -{ - const Rect lockBounds(width, height); - status_t res = lockAsyncYCbCr(usage, lockBounds, ycbcr, fenceFd); - return res; -} - -status_t GraphicBuffer::lockAsyncYCbCr(uint32_t usage, const Rect& rect, android_ycbcr *ycbcr, int fenceFd) -{ - if (rect.left < 0 || rect.right > this->width || - rect.top < 0 || rect.bottom > this->height) { - ALOGE("locking pixels (%d,%d,%d,%d) outside of buffer (w=%d, h=%d)", - rect.left, rect.top, rect.right, rect.bottom, - this->width, this->height); - return BAD_VALUE; - } - status_t res = getBufferMapper().lockAsyncYCbCr(handle, usage, rect, ycbcr, fenceFd); - return res; -} - -status_t GraphicBuffer::unlockAsync(int *fenceFd) -{ - status_t res = getBufferMapper().unlockAsync(handle, fenceFd); - return res; -} - size_t GraphicBuffer::getFlattenedSize() const { return (8 + (handle ? handle->numInts : 0))*sizeof(int); } diff --git a/libs/ui/GraphicBufferMapper.cpp b/libs/ui/GraphicBufferMapper.cpp index 320b6c0..a4cfce2 100644 --- a/libs/ui/GraphicBufferMapper.cpp +++ b/libs/ui/GraphicBufferMapper.cpp @@ -20,8 +20,6 @@ #include <stdint.h> #include <errno.h> -#include <sync/sync.h> - #include <utils/Errors.h> #include <utils/Log.h> #include <utils/Trace.h> @@ -111,65 +109,5 @@ status_t GraphicBufferMapper::unlock(buffer_handle_t handle) return err; } -status_t GraphicBufferMapper::lockAsync(buffer_handle_t handle, - int usage, const Rect& bounds, void** vaddr, int fenceFd) -{ - ATRACE_CALL(); - status_t err; - - if (mAllocMod->common.module_api_version >= GRALLOC_MODULE_API_VERSION_0_3) { - err = mAllocMod->lockAsync(mAllocMod, handle, usage, - bounds.left, bounds.top, bounds.width(), bounds.height(), - vaddr, fenceFd); - } else { - sync_wait(fenceFd, -1); - close(fenceFd); - err = mAllocMod->lock(mAllocMod, handle, usage, - bounds.left, bounds.top, bounds.width(), bounds.height(), - vaddr); - } - - ALOGW_IF(err, "lockAsync(...) failed %d (%s)", err, strerror(-err)); - return err; -} - -status_t GraphicBufferMapper::lockAsyncYCbCr(buffer_handle_t handle, - int usage, const Rect& bounds, android_ycbcr *ycbcr, int fenceFd) -{ - ATRACE_CALL(); - status_t err; - - if (mAllocMod->common.module_api_version >= GRALLOC_MODULE_API_VERSION_0_3) { - err = mAllocMod->lockAsync_ycbcr(mAllocMod, handle, usage, - bounds.left, bounds.top, bounds.width(), bounds.height(), - ycbcr, fenceFd); - } else { - sync_wait(fenceFd, -1); - close(fenceFd); - err = mAllocMod->lock_ycbcr(mAllocMod, handle, usage, - bounds.left, bounds.top, bounds.width(), bounds.height(), - ycbcr); - } - - ALOGW_IF(err, "lock(...) failed %d (%s)", err, strerror(-err)); - return err; -} - -status_t GraphicBufferMapper::unlockAsync(buffer_handle_t handle, int *fenceFd) -{ - ATRACE_CALL(); - status_t err; - - if (mAllocMod->common.module_api_version >= GRALLOC_MODULE_API_VERSION_0_3) { - err = mAllocMod->unlockAsync(mAllocMod, handle, fenceFd); - } else { - *fenceFd = -1; - err = mAllocMod->unlock(mAllocMod, handle); - } - - ALOGW_IF(err, "unlockAsync(...) failed %d (%s)", err, strerror(-err)); - return err; -} - // --------------------------------------------------------------------------- }; // namespace android |