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

Commit 19e30fc8 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 12158986 from 057e5772 to 24Q4-release

Change-Id: I85592d4ec01886944226e546dfb9a2595420fa81
parents e162f022 057e5772
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1558,6 +1558,13 @@ static void DumpstateLimitedOnly() {
    RunDumpsys("DUMPSYS CONNECTIVITY REQUESTS", {"connectivity", "requests"},
               CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10));

    printf("========================================================\n");
    printf("== Networking Policy\n");
    printf("========================================================\n");

    RunDumpsys("DUMPSYS NETWORK POLICY", {"netpolicy"}, CommandOptions::WithTimeout(90).Build(),
               SEC_TO_MSEC(10));

    printf("========================================================\n");
    printf("== Dropbox crashes\n");
    printf("========================================================\n");
+5 −6
Original line number Diff line number Diff line
package com.android.graphics.bufferstreamsdemoapp

import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@@ -29,10 +27,11 @@ fun BufferDemosAppBar(
            navigationIcon = {
                if (canNavigateBack) {
                    IconButton(onClick = navigateUp) {
                        Icon(
                                imageVector = Icons.AutoMirrored.Filled.ArrowBack,
                                contentDescription = stringResource(R.string.back_button)
                        )
                        // b/355293776
                        // Icon(
                        //     imageVector = Icons.AutoMirrored.Filled.ArrowBack,
                        //     contentDescription = stringResource(R.string.back_button)
                        // )
                    }
                }
            }
+28 −4
Original line number Diff line number Diff line
@@ -21,8 +21,11 @@

#include <inttypes.h>

#include <com_android_graphics_libgui_flags.h>
#include <gui/BufferItem.h>
#include <gui/BufferItemConsumer.h>
#include <ui/BufferQueueDefs.h>
#include <ui/GraphicBuffer.h>

#define BI_LOGV(x, ...) ALOGV("[%s] " x, mName.c_str(), ##__VA_ARGS__)
// #define BI_LOGD(x, ...) ALOGD("[%s] " x, mName.c_str(), ##__VA_ARGS__)
@@ -87,17 +90,38 @@ status_t BufferItemConsumer::acquireBuffer(BufferItem *item,

status_t BufferItemConsumer::releaseBuffer(const BufferItem &item,
        const sp<Fence>& releaseFence) {
    status_t err;
    Mutex::Autolock _l(mMutex);
    return releaseBufferSlotLocked(item.mSlot, item.mGraphicBuffer, releaseFence);
}

#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)
status_t BufferItemConsumer::releaseBuffer(const sp<GraphicBuffer>& buffer,
                                           const sp<Fence>& releaseFence) {
    Mutex::Autolock _l(mMutex);

    err = addReleaseFenceLocked(item.mSlot, item.mGraphicBuffer, releaseFence);
    if (buffer == nullptr) {
        return BAD_VALUE;
    }

    int slotIndex = getSlotForBufferLocked(buffer);
    if (slotIndex == INVALID_BUFFER_SLOT) {
        return BAD_VALUE;
    }

    return releaseBufferSlotLocked(slotIndex, buffer, releaseFence);
}
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)

status_t BufferItemConsumer::releaseBufferSlotLocked(int slotIndex, const sp<GraphicBuffer>& buffer,
                                                     const sp<Fence>& releaseFence) {
    status_t err;

    err = addReleaseFenceLocked(slotIndex, buffer, releaseFence);
    if (err != OK) {
        BI_LOGE("Failed to addReleaseFenceLocked");
    }

    err = releaseBufferLocked(item.mSlot, item.mGraphicBuffer, EGL_NO_DISPLAY,
            EGL_NO_SYNC_KHR);
    err = releaseBufferLocked(slotIndex, buffer, EGL_NO_DISPLAY, EGL_NO_SYNC_KHR);
    if (err != OK && err != IGraphicBufferConsumer::STALE_BUFFER_SLOT) {
        BI_LOGE("Failed to release buffer: %s (%d)",
                strerror(-err), err);
+53 −7
Original line number Diff line number Diff line
@@ -30,9 +30,10 @@
#include <cutils/atomic.h>

#include <gui/BufferItem.h>
#include <gui/ConsumerBase.h>
#include <gui/ISurfaceComposer.h>
#include <gui/SurfaceComposerClient.h>
#include <gui/ConsumerBase.h>
#include <ui/BufferQueueDefs.h>

#include <private/gui/ComposerService.h>

@@ -40,6 +41,8 @@
#include <utils/String8.h>
#include <utils/Trace.h>

#include <com_android_graphics_libgui_flags.h>

// Macros for including the ConsumerBase name in log messages
#define CB_LOGV(x, ...) ALOGV("[%s] " x, mName.c_str(), ##__VA_ARGS__)
// #define CB_LOGD(x, ...) ALOGD("[%s] " x, mName.c_str(), ##__VA_ARGS__)
@@ -96,6 +99,35 @@ void ConsumerBase::onLastStrongRef(const void* id __attribute__((unused))) {
    abandon();
}

int ConsumerBase::getSlotForBufferLocked(const sp<GraphicBuffer>& buffer) {
    if (!buffer) {
        return BufferQueue::INVALID_BUFFER_SLOT;
    }

    uint64_t id = buffer->getId();
    for (int i = 0; i < BufferQueueDefs::NUM_BUFFER_SLOTS; i++) {
        auto& slot = mSlots[i];
        if (slot.mGraphicBuffer && slot.mGraphicBuffer->getId() == id) {
            return i;
        }
    }

    return BufferQueue::INVALID_BUFFER_SLOT;
}

status_t ConsumerBase::detachBufferLocked(int slotIndex) {
    status_t result = mConsumer->detachBuffer(slotIndex);

    if (result != NO_ERROR) {
        CB_LOGE("Failed to detach buffer: %d", result);
        return result;
    }

    freeBufferLocked(slotIndex);

    return result;
}

void ConsumerBase::freeBufferLocked(int slotIndex) {
    CB_LOGV("freeBufferLocked: slotIndex=%d", slotIndex);
    mSlots[slotIndex].mGraphicBuffer = nullptr;
@@ -252,16 +284,30 @@ status_t ConsumerBase::detachBuffer(int slot) {
        return NO_INIT;
    }

    status_t result = mConsumer->detachBuffer(slot);
    if (result != NO_ERROR) {
        CB_LOGE("Failed to detach buffer: %d", result);
        return result;
    return detachBufferLocked(slot);
}

    freeBufferLocked(slot);
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)
status_t ConsumerBase::detachBuffer(const sp<GraphicBuffer>& buffer) {
    CB_LOGV("detachBuffer");
    Mutex::Autolock lock(mMutex);

    return result;
    if (mAbandoned) {
        CB_LOGE("detachBuffer: ConsumerBase is abandoned!");
        return NO_INIT;
    }
    if (buffer == nullptr) {
        return BAD_VALUE;
    }

    int slotIndex = getSlotForBufferLocked(buffer);
    if (slotIndex == BufferQueue::INVALID_BUFFER_SLOT) {
        return BAD_VALUE;
    }

    return detachBufferLocked(slotIndex);
}
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)

status_t ConsumerBase::setDefaultBufferSize(uint32_t width, uint32_t height) {
    Mutex::Autolock _l(mMutex);
+12 −2
Original line number Diff line number Diff line
@@ -17,13 +17,15 @@
#ifndef ANDROID_GUI_BUFFERITEMCONSUMER_H
#define ANDROID_GUI_BUFFERITEMCONSUMER_H

#include <gui/ConsumerBase.h>
#include <com_android_graphics_libgui_flags.h>
#include <gui/BufferQueue.h>
#include <gui/ConsumerBase.h>

#define ANDROID_GRAPHICS_BUFFERITEMCONSUMER_JNI_ID "mBufferItemConsumer"

namespace android {

class GraphicBuffer;
class String8;

/**
@@ -85,7 +87,15 @@ class BufferItemConsumer: public ConsumerBase
    status_t releaseBuffer(const BufferItem &item,
            const sp<Fence>& releaseFence = Fence::NO_FENCE);

#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)
    status_t releaseBuffer(const sp<GraphicBuffer>& buffer,
                           const sp<Fence>& releaseFence = Fence::NO_FENCE);
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)

private:
    status_t releaseBufferSlotLocked(int slotIndex, const sp<GraphicBuffer>& buffer,
                                     const sp<Fence>& releaseFence);

    void freeBufferLocked(int slotIndex) override;

    // mBufferFreedListener is the listener object that will be called when
Loading