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

Commit b72d2e85 authored by Jim Shargo's avatar Jim Shargo Committed by Carlos Martinez Romero
Browse files

Supporting changes for the GraphicBufferSource.

Bug: 393639468
Flag: com.android.graphics.libgui.flags.wb_media_migration
Test: atest GraphicBufferSource_test and played a video on local device.

Change-Id: I83f3b24a3d750ee0a46175e4a7a1650757681d4d
parent 78d45e8f
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: