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

Commit 831e5f85 authored by Carlos Martinez Romero's avatar Carlos Martinez Romero Committed by Android (Google) Code Review
Browse files

Merge "Supporting changes for the GraphicBufferSource." into main

parents 3581ce1b b72d2e85
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -402,17 +402,21 @@ filegroup {
    srcs: [
        "BatchBufferOps.cpp",
        "BufferItem.cpp",
        "BufferItemConsumer.cpp",
        "BufferQueue.cpp",
        "BufferQueueConsumer.cpp",
        "BufferQueueCore.cpp",
        "BufferQueueProducer.cpp",
        "BufferQueueThreadState.cpp",
        "BufferSlot.cpp",
        "ConsumerBase.cpp",
        "FenceMonitor.cpp",
        "FrameRateUtils.cpp",
        "FrameTimestamps.cpp",
        "GLConsumerUtils.cpp",
        "HdrMetadata.cpp",
        "IGraphicBufferProducerFlattenables.cpp",
        "Surface.cpp",
        "bufferqueue/1.0/Conversion.cpp",
        "bufferqueue/1.0/H2BProducerListener.cpp",
        "bufferqueue/1.0/WProducerListener.cpp",
+4 −1
Original line number Diff line number Diff line
@@ -31,9 +31,12 @@
#include <gui/BufferItem.h>
#include <gui/BufferQueue.h>
#include <gui/ConsumerBase.h>
#ifndef NO_BINDER
#include <gui/IConsumerListener.h>
#include <gui/ISurfaceComposer.h>
#include <gui/Surface.h>
#include <gui/SurfaceComposerClient.h>
#endif
#include <gui/Surface.h>

#include <private/gui/ComposerService.h>

+33 −10
Original line number Diff line number Diff line
@@ -29,7 +29,15 @@

#include <inttypes.h>

#ifndef NO_BINDER
#include <android/gui/DisplayStatInfo.h>
#include <gui/AidlUtil.h>
#include <gui/ISurfaceComposer.h>
#include <gui/LayerState.h>
#include <private/gui/ComposerService.h>
#include <private/gui/ComposerServiceAIDL.h>
#endif

#include <android/native_window.h>

#include <gui/FenceMonitor.h>
@@ -44,20 +52,13 @@
#include <ui/GraphicBuffer.h>
#include <ui/Region.h>

#include <gui/AidlUtil.h>
#include <gui/BufferItem.h>

#include <gui/ISurfaceComposer.h>
#include <gui/LayerState.h>
#include <private/gui/ComposerService.h>
#include <private/gui/ComposerServiceAIDL.h>

#include <com_android_graphics_libgui_flags.h>

namespace android {

using namespace com::android::graphics::libgui;
using gui::aidl_utils::statusTFromBinderStatus;
using ui::Dataspace;

namespace {
@@ -157,7 +158,7 @@ Surface::~Surface() {
    if (mConnectedToCpu) {
        Surface::disconnect(NATIVE_WINDOW_API_CPU);
    }
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS) && !defined(NO_BINDER)
    if (mSurfaceDeathListener != nullptr) {
        IInterface::asBinder(mGraphicBufferProducer)->unlinkToDeath(mSurfaceDeathListener);
        mSurfaceDeathListener = nullptr;
@@ -165,6 +166,7 @@ Surface::~Surface() {
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)
}

#ifndef NO_BINDER
sp<ISurfaceComposer> Surface::composerService() const {
    return ComposerService::getComposerService();
}
@@ -172,6 +174,7 @@ sp<ISurfaceComposer> Surface::composerService() const {
sp<gui::ISurfaceComposer> Surface::composerServiceAIDL() const {
    return ComposerServiceAIDL::getComposerService();
}
#endif

nsecs_t Surface::now() const {
    return systemTime();
@@ -228,6 +231,12 @@ status_t Surface::getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer,
status_t Surface::getDisplayRefreshCycleDuration(nsecs_t* outRefreshDuration) {
    ATRACE_CALL();

#ifdef NO_BINDER
    (void)outRefreshDuration;
    return INVALID_OPERATION;
#else
    using gui::aidl_utils::statusTFromBinderStatus;

    gui::DisplayStatInfo stats;
    binder::Status status = composerServiceAIDL()->getDisplayStats(nullptr, &stats);
    if (!status.isOk()) {
@@ -237,6 +246,7 @@ status_t Surface::getDisplayRefreshCycleDuration(nsecs_t* outRefreshDuration) {
    *outRefreshDuration = stats.vsyncPeriod;

    return NO_ERROR;
#endif
}

void Surface::enableFrameTimestamps(bool enable) {
@@ -1438,6 +1448,9 @@ int Surface::queueBuffers(const std::vector<BatchQueuedBuffer>& buffers) {
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)

void Surface::querySupportedTimestampsLocked() const {
#ifdef NO_BINDER
    LOG_ALWAYS_FATAL("Surface::querySupportedTimestampsLocked not supported in NO_BINDER mode");
#else
    // mMutex must be locked when calling this method.

    if (mQueriedSupportedTimestamps) {
@@ -1458,6 +1471,7 @@ void Surface::querySupportedTimestampsLocked() const {
            mFrameTimestampsSupportsPresent = true;
        }
    }
#endif
}

int Surface::query(int what, int* value) const {
@@ -1477,6 +1491,9 @@ int Surface::query(int what, int* value) const {
                if (err == NO_ERROR) {
                    return NO_ERROR;
                }
#ifdef NO_BINDER
                return -EPERM;
#else
                sp<gui::ISurfaceComposer> surfaceComposer = composerServiceAIDL();
                if (surfaceComposer == nullptr) {
                    return -EPERM; // likely permissions error
@@ -1484,6 +1501,7 @@ int Surface::query(int what, int* value) const {
                // ISurfaceComposer no longer supports authenticateSurfaceTexture
                *value = 0;
                return NO_ERROR;
#endif
            }
            case NATIVE_WINDOW_CONCRETE_TYPE:
                *value = NATIVE_WINDOW_SURFACE;
@@ -2051,6 +2069,10 @@ int Surface::dispatchGetLastQueuedBuffer2(va_list args) {
}

int Surface::dispatchSetFrameTimelineInfo(va_list args) {
#ifdef NO_BINDER
    (void)args;
    LOG_ALWAYS_FATAL("Surface::dispatchSetFrameTimelineInfo not supported in NO_BINDER mode");
#else
    ATRACE_CALL();
    ALOGV("Surface::%s", __func__);

@@ -2066,6 +2088,7 @@ int Surface::dispatchSetFrameTimelineInfo(va_list args) {
    ftlInfo.skippedFrameStartTimeNanos = nativeWindowFtlInfo.skippedFrameStartTimeNanos;

    return setFrameTimelineInfo(nativeWindowFtlInfo.frameNumber, ftlInfo);
#endif
}

int Surface::dispatchSetAdditionalOptions(va_list args) {
@@ -2127,7 +2150,7 @@ int Surface::connect(int api, const sp<SurfaceListener>& listener, bool reportBu

        mConsumerRunningBehind = (output.numPendingBuffers >= 2);

#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS) && !defined(NO_BINDER)
        if (listener && listener->needsDeathNotify()) {
            mSurfaceDeathListener = sp<ProducerDeathListenerProxy>::make(listener);
            IInterface::asBinder(mGraphicBufferProducer)->linkToDeath(mSurfaceDeathListener);
@@ -2174,7 +2197,7 @@ int Surface::disconnect(int api, IGraphicBufferProducer::DisconnectMode mode) {
        }
    }

#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS) && !defined(NO_BINDER)
    if (mSurfaceDeathListener != nullptr) {
        IInterface::asBinder(mGraphicBufferProducer)->unlinkToDeath(mSurfaceDeathListener);
        mSurfaceDeathListener = nullptr;
+3 −1
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
#ifndef ANDROID_GUI_SURFACE_H
#define ANDROID_GUI_SURFACE_H

#include <android/gui/FrameTimelineInfo.h>
#include <com_android_graphics_libgui_flags.h>
#include <gui/BufferQueueDefs.h>
#include <gui/HdrMetadata.h>
@@ -39,6 +38,7 @@ namespace android {
class GraphicBuffer;

namespace gui {
class FrameTimelineInfo;
class ISurfaceComposer;
} // namespace gui

@@ -283,9 +283,11 @@ public:
protected:
    virtual ~Surface();

#ifndef NO_BINDER
    // Virtual for testing.
    virtual sp<ISurfaceComposer> composerService() const;
    virtual sp<gui::ISurfaceComposer> composerServiceAIDL() const;
#endif
    virtual nsecs_t now() const;

private: