summaryrefslogtreecommitdiff
path: root/libs/gui/Surface.cpp
diff options
context:
space:
mode:
author Greg Hackmann <ghackmann@google.com> 2014-05-09 22:00:04 +0000
committer Android Git Automerger <android-git-automerger@android.com> 2014-05-09 22:00:04 +0000
commit2f3dca149a2bcae96f18e38f7ba99a95c3e1b08c (patch)
treec42170cdac8e30c84813a2723fbb89689b7d2463 /libs/gui/Surface.cpp
parent02528cf6aaedbbfec55be57d33389e1c57d88245 (diff)
parent9493d4924a59f14b698389386337a9c07a7ea3c4 (diff)
am 9493d492: am 9eb142e3: am a9d49f99: Merge "Revert "Use asynchronous lock/unlock API""
* commit '9493d4924a59f14b698389386337a9c07a7ea3c4': Revert "Use asynchronous lock/unlock API"
Diffstat (limited to 'libs/gui/Surface.cpp')
-rw-r--r--libs/gui/Surface.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index 88c45b2d1e..d1ef503f83 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -764,6 +764,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;
@@ -814,9 +823,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);
@@ -842,11 +851,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));