Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f9783af2 authored by Jesse Hall's avatar Jesse Hall
Browse files

Return fence to client in dequeuBuffer

Change-Id: Ic19750793ad993f0e85391f3cabd743ba565d4c9
parent b7c839b1
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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;
+8 −5
Original line number Diff line number Diff line
@@ -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;
}

+4 −0
Original line number Diff line number Diff line
@@ -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;
}