diff options
| author | 2014-05-09 21:08:39 +0000 | |
|---|---|---|
| committer | 2014-05-09 21:08:39 +0000 | |
| commit | 8a6cd189034ec4709a66e581b41deba56c028291 (patch) | |
| tree | ef3cf0d267c9d6951e15f6cdd6095ddc95b98fac /libs/ui/GraphicBufferMapper.cpp | |
| parent | 214b4a61ac3fa63e35c79157d3acf0d8b692b3ac (diff) | |
| parent | f60564a13e917877c76c99294194a621d872076b (diff) | |
am f60564a1: Merge "Use asynchronous lock/unlock API"
* commit 'f60564a13e917877c76c99294194a621d872076b':
Use asynchronous lock/unlock API
Diffstat (limited to 'libs/ui/GraphicBufferMapper.cpp')
| -rw-r--r-- | libs/ui/GraphicBufferMapper.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/libs/ui/GraphicBufferMapper.cpp b/libs/ui/GraphicBufferMapper.cpp index a4cfce2999..320b6c03d4 100644 --- a/libs/ui/GraphicBufferMapper.cpp +++ b/libs/ui/GraphicBufferMapper.cpp @@ -20,6 +20,8 @@ #include <stdint.h> #include <errno.h> +#include <sync/sync.h> + #include <utils/Errors.h> #include <utils/Log.h> #include <utils/Trace.h> @@ -109,5 +111,65 @@ 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 |