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

Commit 43f2b9d3 authored by Jim Shargo's avatar Jim Shargo Committed by Android (Google) Code Review
Browse files

Merge "bufferqueues: Simplify calls that don't use GL fences" into main

parents 12d98fef 5210808d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@ status_t BufferItemConsumer::releaseBufferSlotLocked(int slotIndex, const sp<Gra
        BI_LOGE("Failed to addReleaseFenceLocked");
    }

    err = releaseBufferLocked(slotIndex, buffer, EGL_NO_DISPLAY, EGL_NO_SYNC_KHR);
    err = releaseBufferLocked(slotIndex, buffer);
    if (err != OK && err != IGraphicBufferConsumer::STALE_BUFFER_SLOT) {
        BI_LOGE("Failed to release buffer: %s (%d)",
                strerror(-err), err);
+5 −9
Original line number Diff line number Diff line
@@ -314,7 +314,7 @@ status_t GLConsumer::releaseTexImage() {
            // so... basically, nothing more to do here.
        }

        err = releaseBufferLocked(buf, mSlots[buf].mGraphicBuffer, mEglDisplay, EGL_NO_SYNC_KHR);
        err = releaseBufferLocked(buf, mSlots[buf].mGraphicBuffer);
        if (err < NO_ERROR) {
            GLC_LOGE("releaseTexImage: failed to release buffer: %s (%d)",
                    strerror(-err), err);
@@ -418,16 +418,14 @@ status_t GLConsumer::updateAndReleaseLocked(const BufferItem& item,
    if (!mAttached) {
        GLC_LOGE("updateAndRelease: GLConsumer is not attached to an OpenGL "
                "ES context");
        releaseBufferLocked(slot, mSlots[slot].mGraphicBuffer,
                mEglDisplay, EGL_NO_SYNC_KHR);
        releaseBufferLocked(slot, mSlots[slot].mGraphicBuffer);
        return INVALID_OPERATION;
    }

    // Confirm state.
    err = checkAndUpdateEglStateLocked();
    if (err != NO_ERROR) {
        releaseBufferLocked(slot, mSlots[slot].mGraphicBuffer,
                mEglDisplay, EGL_NO_SYNC_KHR);
        releaseBufferLocked(slot, mSlots[slot].mGraphicBuffer);
        return err;
    }

@@ -440,8 +438,7 @@ status_t GLConsumer::updateAndReleaseLocked(const BufferItem& item,
    if (err != NO_ERROR) {
        GLC_LOGW("updateAndRelease: unable to createImage on display=%p slot=%d",
                mEglDisplay, slot);
        releaseBufferLocked(slot, mSlots[slot].mGraphicBuffer,
                mEglDisplay, EGL_NO_SYNC_KHR);
        releaseBufferLocked(slot, mSlots[slot].mGraphicBuffer);
        return UNKNOWN_ERROR;
    }

@@ -453,8 +450,7 @@ status_t GLConsumer::updateAndReleaseLocked(const BufferItem& item,
            // release the old buffer, so instead we just drop the new frame.
            // As we are still under lock since acquireBuffer, it is safe to
            // release by slot.
            releaseBufferLocked(slot, mSlots[slot].mGraphicBuffer,
                    mEglDisplay, EGL_NO_SYNC_KHR);
            releaseBufferLocked(slot, mSlots[slot].mGraphicBuffer);
            return err;
        }
    }
+7 −3
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@

#include <utils/NativeHandle.h>
#include <utils/String8.h>
#include <cstdint>

namespace android {

@@ -84,7 +85,8 @@ public:
                           EGLDisplay display __attribute__((unused)),
                           EGLSyncKHR fence __attribute__((unused)),
                           const sp<Fence>& releaseFence) override {
        return callRemote<ReleaseBuffer>(Tag::RELEASE_BUFFER, buf, frameNumber, releaseFence);
        using Signature = status_t (IGraphicBufferConsumer::*)(int, uint64_t, const sp<Fence>&);
        return callRemote<Signature>(Tag::RELEASE_BUFFER, buf, frameNumber, releaseFence);
    }

    status_t consumerConnect(const sp<IConsumerListener>& consumer, bool controlledByApp) override {
@@ -188,8 +190,10 @@ status_t BnGraphicBufferConsumer::onTransact(uint32_t code, const Parcel& data,
            return callLocal(data, reply, &IGraphicBufferConsumer::detachBuffer);
        case Tag::ATTACH_BUFFER:
            return callLocal(data, reply, &IGraphicBufferConsumer::attachBuffer);
        case Tag::RELEASE_BUFFER:
            return callLocal(data, reply, &IGraphicBufferConsumer::releaseHelper);
        case Tag::RELEASE_BUFFER: {
            using Signature = status_t (IGraphicBufferConsumer::*)(int, uint64_t, const sp<Fence>&);
            return callLocal<Signature>(data, reply, &IGraphicBufferConsumer::releaseBuffer);
        }
        case Tag::CONSUMER_CONNECT:
            return callLocal(data, reply, &IGraphicBufferConsumer::consumerConnect);
        case Tag::CONSUMER_DISCONNECT:
+1 −2
Original line number Diff line number Diff line
@@ -234,8 +234,7 @@ void StreamSplitter::onBufferReleasedByOutput(
    LOG_ALWAYS_FATAL_IF(status != NO_ERROR,
            "attaching buffer to input failed (%d)", status);

    status = mInput->releaseBuffer(consumerSlot, /* frameNumber */ 0,
            EGL_NO_DISPLAY, EGL_NO_SYNC_KHR, tracker->getMergedFence());
    status = mInput->releaseBuffer(consumerSlot, /* frameNumber */ 0, tracker->getMergedFence());
    LOG_ALWAYS_FATAL_IF(status != NO_ERROR,
            "releasing buffer to input failed (%d)", status);

+3 −3
Original line number Diff line number Diff line
@@ -268,9 +268,9 @@ protected:

    // releaseBufferLocked overrides the ConsumerBase method to update the
    // mEglSlots array in addition to the ConsumerBase.
    virtual status_t releaseBufferLocked(int slot,
            const sp<GraphicBuffer> graphicBuffer,
            EGLDisplay display, EGLSyncKHR eglFence) override;
    virtual status_t releaseBufferLocked(int slot, const sp<GraphicBuffer> graphicBuffer,
                                         EGLDisplay display = EGL_NO_DISPLAY,
                                         EGLSyncKHR eglFence = EGL_NO_SYNC_KHR) override;

    status_t releaseBufferLocked(int slot,
            const sp<GraphicBuffer> graphicBuffer, EGLSyncKHR eglFence) {
Loading