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

Commit ee5fb929 authored by Jesse Hall's avatar Jesse Hall Committed by Android Git Automerger
Browse files

am ba607d53: Add Fence::waitForever which logs a warning timeout, and use it

* commit 'ba607d53':
  Add Fence::waitForever which logs a warning timeout, and use it
parents 7011d5a4 ba607d53
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -62,6 +62,13 @@ public:
    // indefinitely for the fence to signal.
    int wait(unsigned int timeout);

    // waitForever is a convenience function for waiting forever for a fence to
    // signal (just like wait(TIMEOUT_NEVER)), but issuing an error to the
    // system log and fence state to the kernel log if the wait lasts longer
    // than warningTimeout. The logname argument should be a string identifying
    // the caller and will be included in the log message.
    int waitForever(unsigned int warningTimeout, const char* logname);

    // TIMEOUT_NEVER may be passed to the wait method to indicate that it
    // should wait indefinitely for the fence to signal.
    enum { TIMEOUT_NEVER = -1 };
+1 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ status_t BufferItemConsumer::acquireBuffer(BufferItem *item, bool waitForFence)
    }

    if (waitForFence && item->mFence.get()) {
        err = item->mFence->wait(Fence::TIMEOUT_NEVER);
        err = item->mFence->waitForever(1000, "BufferItemConsumer::acquireBuffer");
        if (err != OK) {
            BI_LOGE("Failed to wait for fence of acquired buffer: %s (%d)",
                    strerror(-err), err);
+1 −1
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ status_t CpuConsumer::lockNextBuffer(LockedBuffer *nativeBuffer) {
    int buf = b.mBuf;

    if (b.mFence.get()) {
        err = b.mFence->wait(Fence::TIMEOUT_NEVER);
        err = b.mFence->waitForever(1000, "CpuConsumer::lockNextBuffer");
        if (err != OK) {
            CC_LOGE("Failed to wait for fence of acquired buffer: %s (%d)",
                    strerror(-err), err);
+2 −1
Original line number Diff line number Diff line
@@ -812,7 +812,8 @@ status_t SurfaceTexture::doGLFenceWaitLocked() const {
                return UNKNOWN_ERROR;
            }
        } else {
            status_t err = mCurrentFence->wait(Fence::TIMEOUT_NEVER);
            status_t err = mCurrentFence->waitForever(1000,
                    "SurfaceTexture::doGLFenceWaitLocked");
            if (err != NO_ERROR) {
                ST_LOGE("doGLFenceWait: error waiting for fence: %d", err);
                return err;
+8 −5
Original line number Diff line number Diff line
@@ -129,15 +129,18 @@ int SurfaceTextureClient::hook_queueBuffer(ANativeWindow* window,
int SurfaceTextureClient::hook_dequeueBuffer_DEPRECATED(ANativeWindow* window,
        ANativeWindowBuffer** buffer) {
    SurfaceTextureClient* c = getSelf(window);
    ANativeWindowBuffer* buf;
    int fenceFd = -1;
    int result = c->dequeueBuffer(buffer, &fenceFd);
    int result = c->dequeueBuffer(&buf, &fenceFd);
    sp<Fence> fence(new Fence(fenceFd));
    int waitResult = fence->wait(Fence::TIMEOUT_NEVER);
    int waitResult = fence->waitForever(1000, "dequeueBuffer_DEPRECATED");
    if (waitResult != OK) {
        ALOGE("hook_dequeueBuffer_DEPRECATED: Fence::wait returned an "
                "error: %d", waitResult);
        ALOGE("dequeueBuffer_DEPRECATED: Fence::wait returned an error: %d",
                waitResult);
        c->cancelBuffer(buf, -1);
        return waitResult;
    }
    *buffer = buf;
    return result;
}

@@ -751,7 +754,7 @@ status_t SurfaceTextureClient::lock(
        sp<GraphicBuffer> backBuffer(GraphicBuffer::getSelf(out));
        sp<Fence> fence(new Fence(fenceFd));

        err = fence->wait(Fence::TIMEOUT_NEVER);
        err = fence->waitForever(1000, "SurfaceTextureClient::lock");
        if (err != OK) {
            ALOGE("Fence::wait failed (%s)", strerror(-err));
            cancelBuffer(out, fenceFd);
Loading