Loading include/ui/Fence.h +5 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,11 @@ public: static sp<Fence> merge(const String8& name, const sp<Fence>& f1, const sp<Fence>& f2); // Return a duplicate of the fence file descriptor. The caller is // responsible for closing the returned file descriptor. On error, -1 will // be returned and errno will indicate the problem. int dup() const; // Flattenable interface size_t getFlattenedSize() const; size_t getFdCount() const; Loading libs/gui/SurfaceTextureClient.cpp +8 −5 Original line number Diff line number Diff line Loading @@ -222,15 +222,18 @@ int SurfaceTextureClient::dequeueBuffer(android_native_buffer_t** buffer, } if (fence.get()) { status_t err = fence->wait(Fence::TIMEOUT_NEVER); if (err != OK) { ALOGE("dequeueBuffer: error waiting for fence: %d", err); *fenceFd = fence->dup(); if (*fenceFd == -1) { ALOGE("dequeueBuffer: error duping fence: %d", errno); // dup() should never fail; something is badly wrong. Soldier on // and hope for the best; the worst that should happen is some // visible corruption that lasts until the next frame. } fence.clear(); } else { *fenceFd = -1; } *buffer = gbuf.get(); *fenceFd = -1; return OK; } Loading libs/ui/Fence.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,10 @@ sp<Fence> Fence::merge(const String8& name, const sp<Fence>& f1, return sp<Fence>(new Fence(result)); } int Fence::dup() const { return ::dup(mFenceFd); } size_t Fence::getFlattenedSize() const { return 0; } Loading Loading
include/ui/Fence.h +5 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,11 @@ public: static sp<Fence> merge(const String8& name, const sp<Fence>& f1, const sp<Fence>& f2); // Return a duplicate of the fence file descriptor. The caller is // responsible for closing the returned file descriptor. On error, -1 will // be returned and errno will indicate the problem. int dup() const; // Flattenable interface size_t getFlattenedSize() const; size_t getFdCount() const; Loading
libs/gui/SurfaceTextureClient.cpp +8 −5 Original line number Diff line number Diff line Loading @@ -222,15 +222,18 @@ int SurfaceTextureClient::dequeueBuffer(android_native_buffer_t** buffer, } if (fence.get()) { status_t err = fence->wait(Fence::TIMEOUT_NEVER); if (err != OK) { ALOGE("dequeueBuffer: error waiting for fence: %d", err); *fenceFd = fence->dup(); if (*fenceFd == -1) { ALOGE("dequeueBuffer: error duping fence: %d", errno); // dup() should never fail; something is badly wrong. Soldier on // and hope for the best; the worst that should happen is some // visible corruption that lasts until the next frame. } fence.clear(); } else { *fenceFd = -1; } *buffer = gbuf.get(); *fenceFd = -1; return OK; } Loading
libs/ui/Fence.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,10 @@ sp<Fence> Fence::merge(const String8& name, const sp<Fence>& f1, return sp<Fence>(new Fence(result)); } int Fence::dup() const { return ::dup(mFenceFd); } size_t Fence::getFlattenedSize() const { return 0; } Loading