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

Commit 045a30e0 authored by Shuangxi Xiang's avatar Shuangxi Xiang
Browse files

NewBufferCount'value changed:simplifying the steps of applying for new buffers

In Commit:0a3e7847, the calculation method of newBufferCount was modified from newBufferCount = mCore->mFreeSlots.size(); to newBufferCount = mCore->mFreeSlots.empty() ? 0 : 1;. When the value of newBufferCount is 0, it means that the maximum number of GB has been applied for. At this time, no new GB will be applied for and the code will be returned directly. The maximum value of newBufferCount is 1, and the subsequent steps of applying for a new buffer will only be executed once. So the for loop can be removed here to simplify the code.

Change-Id: I6c72d7c9a672dc091bd462d384481bed5f88e226
Signed-off-by:
Shuangxi Xiang <xiangshuangxi@xiaomi.corp-partner.google.com>
parent 0c014546
Loading
Loading
Loading
Loading
+20 −26
Original line number Diff line number Diff line
@@ -1501,7 +1501,6 @@ void BufferQueueProducer::allocateBuffers(uint32_t width, uint32_t height,

    const bool useDefaultSize = !width && !height;
    while (true) {
        size_t newBufferCount = 0;
        uint32_t allocWidth = 0;
        uint32_t allocHeight = 0;
        PixelFormat allocFormat = PIXEL_FORMAT_UNKNOWN;
@@ -1523,8 +1522,9 @@ void BufferQueueProducer::allocateBuffers(uint32_t width, uint32_t height,

            // Only allocate one buffer at a time to reduce risks of overlapping an allocation from
            // both allocateBuffers and dequeueBuffer.
            newBufferCount = mCore->mFreeSlots.empty() ? 0 : 1;
            if (newBufferCount == 0) {
            if (mCore->mFreeSlots.empty()) {
                BQ_LOGV("allocateBuffers: a slot was occupied while "
                        "allocating. Dropping allocated buffer.");
                return;
            }

@@ -1566,8 +1566,6 @@ void BufferQueueProducer::allocateBuffers(uint32_t width, uint32_t height,
        };
#endif

        Vector<sp<GraphicBuffer>> buffers;
        for (size_t i = 0; i < newBufferCount; ++i) {
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(BQ_EXTENDEDALLOCATE)
        sp<GraphicBuffer> graphicBuffer = new GraphicBuffer(allocRequest);
#else
@@ -1586,8 +1584,6 @@ void BufferQueueProducer::allocateBuffers(uint32_t width, uint32_t height,
            mCore->mIsAllocatingCondition.notify_all();
            return;
        }
            buffers.push_back(graphicBuffer);
        }

        { // Autolock scope
            std::unique_lock<std::mutex> lock(mCore->mMutex);
@@ -1614,15 +1610,13 @@ void BufferQueueProducer::allocateBuffers(uint32_t width, uint32_t height,
                continue;
            }

            for (size_t i = 0; i < newBufferCount; ++i) {
            if (mCore->mFreeSlots.empty()) {
                BQ_LOGV("allocateBuffers: a slot was occupied while "
                        "allocating. Dropping allocated buffer.");
                    continue;
                }
            } else {
                auto slot = mCore->mFreeSlots.begin();
                mCore->clearBufferSlotLocked(*slot); // Clean up the slot first
                mSlots[*slot].mGraphicBuffer = buffers[i];
                mSlots[*slot].mGraphicBuffer = graphicBuffer;
                mSlots[*slot].mFence = Fence::NO_FENCE;
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(BQ_EXTENDEDALLOCATE)
                mSlots[*slot].mAdditionalOptionsGenerationId = allocOptionsGenId;