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

Commit 962174da authored by Jesse Hall's avatar Jesse Hall Committed by Android (Google) Code Review
Browse files

Merge "Return fence to client in dequeuBuffer"

parents 33264868 f9783af2
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;
}