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

Commit 5541f127 authored by Brian Lindahl's avatar Brian Lindahl
Browse files

Add API to retrieve max layer picture profiles

Bug: 337330263
Test: atest SurfaceControlPictureProfileTest
Flag: com.android.graphics.libgui.flags.apply_picture_profiles

Change-Id: Idcfc3acd2e9eb89dd72baf0270d5d2a003d1f996
parent f5fdff8d
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -3056,6 +3056,14 @@ void SurfaceComposerClient::setDisplayPowerMode(const sp<IBinder>& token,
    ComposerServiceAIDL::getComposerService()->setPowerMode(token, mode);
}

status_t SurfaceComposerClient::getMaxLayerPictureProfiles(const sp<IBinder>& token,
                                                           int32_t* outMaxProfiles) {
    binder::Status status =
            ComposerServiceAIDL::getComposerService()->getMaxLayerPictureProfiles(token,
                                                                                  outMaxProfiles);
    return statusTFromBinderStatus(status);
}

status_t SurfaceComposerClient::getCompositionPreference(
        ui::Dataspace* defaultDataspace, ui::PixelFormat* defaultPixelFormat,
        ui::Dataspace* wideColorGamutDataspace, ui::PixelFormat* wideColorGamutPixelFormat) {
+5 −0
Original line number Diff line number Diff line
@@ -228,6 +228,11 @@ interface ISurfaceComposer {
     */
    void setGameContentType(IBinder display, boolean on);

    /**
     * Gets the maximum number of picture profiles supported by the display.
     */
    int getMaxLayerPictureProfiles(IBinder display);

    /**
     * Capture the specified screen. This requires READ_FRAME_BUFFER
     * permission.  This function will fail if there is a secure window on
+9 −0
Original line number Diff line number Diff line
@@ -345,6 +345,15 @@ public:

    static bool flagEdgeExtensionEffectUseShader();

    /**
     * Returns how many picture profiles are supported by the display.
     *
     * displayToken
     *      The token of the display.
     */
    static status_t getMaxLayerPictureProfiles(const sp<IBinder>& displayToken,
                                               int32_t* outMaxProfiles);

    // ------------------------------------------------------------------------
    // surface creation / destruction

+5 −0
Original line number Diff line number Diff line
@@ -1020,6 +1020,11 @@ public:
        return binder::Status::ok();
    }

    binder::Status getMaxLayerPictureProfiles(const sp<IBinder>& /*display*/,
                                              int32_t* /*outMaxProfiles*/) {
        return binder::Status::ok();
    }

protected:
    IBinder* onAsBinder() override { return nullptr; }

+28 −0
Original line number Diff line number Diff line
@@ -1840,6 +1840,24 @@ void SurfaceFlinger::setGameContentType(const sp<IBinder>& displayToken, bool on
    }));
}

status_t SurfaceFlinger::getMaxLayerPictureProfiles(const sp<IBinder>& displayToken,
                                                    int32_t* outMaxProfiles) {
    const char* const whence = __func__;
    auto future = mScheduler->schedule([=, this]() FTL_FAKE_GUARD(mStateLock) {
        const ssize_t index = mCurrentState.displays.indexOfKey(displayToken);
        if (index < 0) {
            ALOGE("%s: Invalid display token %p", whence, displayToken.get());
            return 0;
        }
        const DisplayDeviceState& state = mCurrentState.displays.valueAt(index);
        return state.maxLayerPictureProfiles > 0 ? state.maxLayerPictureProfiles
                : state.hasPictureProcessing     ? 1
                                                 : 0;
    });
    *outMaxProfiles = future.get();
    return NO_ERROR;
}

status_t SurfaceFlinger::overrideHdrTypes(const sp<IBinder>& displayToken,
                                          const std::vector<ui::Hdr>& hdrTypes) {
    Mutex::Autolock lock(mStateLock);
@@ -8759,6 +8777,16 @@ binder::Status SurfaceComposerAIDL::setGameContentType(const sp<IBinder>& displa
    return binder::Status::ok();
}

binder::Status SurfaceComposerAIDL::getMaxLayerPictureProfiles(const sp<IBinder>& display,
                                                               int32_t* outMaxProfiles) {
    status_t status = checkAccessPermission();
    if (status != OK) {
        return binderStatusFromStatusT(status);
    }
    mFlinger->getMaxLayerPictureProfiles(display, outMaxProfiles);
    return binder::Status::ok();
}

binder::Status SurfaceComposerAIDL::captureDisplay(
        const DisplayCaptureArgs& args, const sp<IScreenCaptureListener>& captureListener) {
    mFlinger->captureDisplay(args, captureListener);
Loading