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

Commit 0c9a1ed9 authored by Dan Stoza's avatar Dan Stoza
Browse files

libgui: Normalize IGraphicBufferConsumer methods

This change modifies IGraphicBufferConsumer such that all synchronous
methods return a status_t and, as such, all outputs are returned by
output parameter rather than return value. It also eliminates the use
of a const char* parameter that SafeInterface can't handle.

Test: m -j + libgui_tests + manual testing
Change-Id: I9bb0e2892492d5e0a3f660bf228834b9ed014539
parent 1d0359c5
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ public:
    virtual status_t setMaxAcquiredBufferCount(int maxAcquiredBuffers);

    // setConsumerName sets the name used in logging
    virtual void setConsumerName(const String8& name);
    status_t setConsumerName(const String8& name) override;

    // setDefaultBufferFormat allows the BufferQueue to create
    // GraphicBuffers of a defaultFormat if no format is specified
@@ -135,7 +135,7 @@ public:
    virtual status_t setTransformHint(uint32_t hint);

    // Retrieve the sideband buffer stream, if any.
    virtual sp<NativeHandle> getSidebandStream() const;
    status_t getSidebandStream(sp<NativeHandle>* outStream) const override;

    // See IGraphicBufferConsumer::getOccupancyHistory
    virtual status_t getOccupancyHistory(bool forceFlush,
@@ -145,7 +145,7 @@ public:
    virtual status_t discardFreeBuffers() override;

    // dump our state in a String
    virtual void dumpState(String8& result, const char* prefix) const;
    status_t dumpState(const String8& prefix, String8* outResult) const override;

    // Functions required for backwards compatibility.
    // These will be modified/renamed in IGraphicBufferConsumer and will be
+1 −1
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ public:

private:
    // Dump our state in a string
    void dumpState(String8& result, const char* prefix) const;
    void dumpState(const String8& prefix, String8* outResult) const;

    // getMinUndequeuedBufferCountLocked returns the minimum number of buffers
    // that must remain in a state other than DEQUEUED. The async parameter
+10 −3
Original line number Diff line number Diff line
@@ -209,7 +209,7 @@ public:
    virtual status_t setMaxAcquiredBufferCount(int maxAcquiredBuffers) = 0;

    // setConsumerName sets the name used in logging
    virtual void setConsumerName(const String8& name) = 0;
    virtual status_t setConsumerName(const String8& name) = 0;

    // setDefaultBufferFormat allows the BufferQueue to create GraphicBuffers of a defaultFormat if
    // no format is specified in dequeueBuffer. The initial default is PIXEL_FORMAT_RGBA_8888.
@@ -239,7 +239,7 @@ public:
    virtual status_t setTransformHint(uint32_t hint) = 0;

    // Retrieve the sideband buffer stream, if any.
    virtual sp<NativeHandle> getSidebandStream() const = 0;
    virtual status_t getSidebandStream(sp<NativeHandle>* outStream) const = 0;

    // Retrieves any stored segments of the occupancy history of this BufferQueue and clears them.
    // Optionally closes out the pending segment if forceFlush is true.
@@ -252,7 +252,14 @@ public:
    virtual status_t discardFreeBuffers() = 0;

    // dump state into a string
    virtual void dumpState(String8& result, const char* prefix) const = 0;
    virtual status_t dumpState(const String8& prefix, String8* outResult) const = 0;

    // Provide backwards source compatibility
    void dumpState(String8& result, const char* prefix) {
        String8 returned;
        dumpState(String8(prefix), &returned);
        result.append(returned);
    }
};

class BnGraphicBufferConsumer : public BnInterface<IGraphicBufferConsumer> {
+11 −7
Original line number Diff line number Diff line
@@ -675,12 +675,13 @@ status_t BufferQueueConsumer::setMaxAcquiredBufferCount(
    return NO_ERROR;
}

void BufferQueueConsumer::setConsumerName(const String8& name) {
status_t BufferQueueConsumer::setConsumerName(const String8& name) {
    ATRACE_CALL();
    BQ_LOGV("setConsumerName: '%s'", name.string());
    Mutex::Autolock lock(mCore->mMutex);
    mCore->mConsumerName = name;
    mConsumerName = name;
    return NO_ERROR;
}

status_t BufferQueueConsumer::setDefaultBufferFormat(PixelFormat defaultFormat) {
@@ -716,9 +717,10 @@ status_t BufferQueueConsumer::setTransformHint(uint32_t hint) {
    return NO_ERROR;
}

sp<NativeHandle> BufferQueueConsumer::getSidebandStream() const {
status_t BufferQueueConsumer::getSidebandStream(sp<NativeHandle>* outStream) const {
    Mutex::Autolock lock(mCore->mMutex);
    return mCore->mSidebandStream;
    *outStream = mCore->mSidebandStream;
    return NO_ERROR;
}

status_t BufferQueueConsumer::getOccupancyHistory(bool forceFlush,
@@ -734,20 +736,22 @@ status_t BufferQueueConsumer::discardFreeBuffers() {
    return NO_ERROR;
}

void BufferQueueConsumer::dumpState(String8& result, const char* prefix) const {
status_t BufferQueueConsumer::dumpState(const String8& prefix, String8* outResult) const {
    const IPCThreadState* ipc = IPCThreadState::self();
    const pid_t pid = ipc->getCallingPid();
    const uid_t uid = ipc->getCallingUid();
    if ((uid != AID_SHELL)
            && !PermissionCache::checkPermission(String16(
            "android.permission.DUMP"), pid, uid)) {
        result.appendFormat("Permission Denial: can't dump BufferQueueConsumer "
        outResult->appendFormat("Permission Denial: can't dump BufferQueueConsumer "
                "from pid=%d, uid=%d\n", pid, uid);
        android_errorWriteWithInfoLog(0x534e4554, "27046057",
                static_cast<int32_t>(uid), NULL, 0);
    } else {
        mCore->dumpState(result, prefix);
        return PERMISSION_DENIED;
    }

    mCore->dumpState(prefix, outResult);
    return NO_ERROR;
}

} // namespace android
+9 −9
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ BufferQueueCore::BufferQueueCore(const sp<IGraphicBufferAlloc>& allocator) :

BufferQueueCore::~BufferQueueCore() {}

void BufferQueueCore::dumpState(String8& result, const char* prefix) const {
void BufferQueueCore::dumpState(const String8& prefix, String8* outResult) const {
    Mutex::Autolock lock(mMutex);

    String8 fifo;
@@ -148,10 +148,10 @@ void BufferQueueCore::dumpState(String8& result, const char* prefix) const {
        ++current;
    }

    result.appendFormat("%s-BufferQueue mMaxAcquiredBufferCount=%d, "
    outResult->appendFormat("%s-BufferQueue mMaxAcquiredBufferCount=%d, "
            "mMaxDequeuedBufferCount=%d, mDequeueBufferCannotBlock=%d "
            "mAsyncMode=%d, default-size=[%dx%d], default-format=%d, "
            "transform-hint=%02x, FIFO(%zu)={%s}\n", prefix,
            "transform-hint=%02x, FIFO(%zu)={%s}\n", prefix.string(),
            mMaxAcquiredBufferCount, mMaxDequeuedBufferCount,
            mDequeueBufferCannotBlock, mAsyncMode, mDefaultWidth,
            mDefaultHeight, mDefaultBufferFormat, mTransformHint, mQueue.size(),
@@ -161,28 +161,28 @@ void BufferQueueCore::dumpState(String8& result, const char* prefix) const {
        const sp<GraphicBuffer>& buffer(mSlots[s].mGraphicBuffer);
        // A dequeued buffer might be null if it's still being allocated
        if (buffer.get()) {
            result.appendFormat("%s%s[%02d:%p] state=%-8s, %p "
                    "[%4ux%4u:%4u,%3X]\n", prefix,
            outResult->appendFormat("%s%s[%02d:%p] state=%-8s, %p "
                    "[%4ux%4u:%4u,%3X]\n", prefix.string(),
                    (mSlots[s].mBufferState.isAcquired()) ? ">" : " ", s,
                    buffer.get(), mSlots[s].mBufferState.string(),
                    buffer->handle, buffer->width, buffer->height,
                    buffer->stride, buffer->format);
        } else {
            result.appendFormat("%s [%02d:%p] state=%-8s\n", prefix, s,
            outResult->appendFormat("%s [%02d:%p] state=%-8s\n", prefix.string(), s,
                    buffer.get(), mSlots[s].mBufferState.string());
        }
    }
    for (int s : mFreeBuffers) {
        const sp<GraphicBuffer>& buffer(mSlots[s].mGraphicBuffer);
        result.appendFormat("%s [%02d:%p] state=%-8s, %p [%4ux%4u:%4u,%3X]\n",
                prefix, s, buffer.get(), mSlots[s].mBufferState.string(),
        outResult->appendFormat("%s [%02d:%p] state=%-8s, %p [%4ux%4u:%4u,%3X]\n",
                prefix.string(), s, buffer.get(), mSlots[s].mBufferState.string(),
                buffer->handle, buffer->width, buffer->height, buffer->stride,
                buffer->format);
    }

    for (int s : mFreeSlots) {
        const sp<GraphicBuffer>& buffer(mSlots[s].mGraphicBuffer);
        result.appendFormat("%s [%02d:%p] state=%-8s\n", prefix, s,
        outResult->appendFormat("%s [%02d:%p] state=%-8s\n", prefix.string(), s,
                buffer.get(), mSlots[s].mBufferState.string());
    }
}
Loading