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

Commit 4ef6d544 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Indicate optimization policy to SurfaceFlinger from DisplayManager" into main

parents 15bb18ab 8520206d
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -1391,11 +1391,16 @@ void SurfaceComposerClient::Transaction::enableDebugLogCallPoints() {
// ---------------------------------------------------------------------------

sp<IBinder> SurfaceComposerClient::createVirtualDisplay(const std::string& displayName,
                                                        bool isSecure, const std::string& uniqueId,
                                                        bool isSecure, bool optimizeForPower,
                                                        const std::string& uniqueId,
                                                        float requestedRefreshRate) {
    const gui::ISurfaceComposer::OptimizationPolicy optimizationPolicy = optimizeForPower
            ? gui::ISurfaceComposer::OptimizationPolicy::optimizeForPower
            : gui::ISurfaceComposer::OptimizationPolicy::optimizeForPerformance;
    sp<IBinder> display = nullptr;
    binder::Status status =
            ComposerServiceAIDL::getComposerService()->createVirtualDisplay(displayName, isSecure,
                                                                            optimizationPolicy,
                                                                            uniqueId,
                                                                            requestedRefreshRate,
                                                                            &display);
+10 −1
Original line number Diff line number Diff line
@@ -67,6 +67,11 @@ interface ISurfaceComposer {
        frameRateOverride = 1 << 1,
    }

    enum OptimizationPolicy {
        optimizeForPower = 0,
        optimizeForPerformance = 1,
    }

    /**
     * Signal that we're done booting.
     * Requires ACCESS_SURFACE_FLINGER permission
@@ -97,6 +102,10 @@ interface ISurfaceComposer {
     *     The name of the virtual display.
     * isSecure
     *     Whether this virtual display is secure.
     * optimizationPolicy
     *     Whether to optimize for power or performance. Displays that are optimizing for power may
     *     be dependent on a different display that optimizes for performance when they are on,
     *     which will guarantee performance for all of the other displays.
     * uniqueId
     *     The unique ID for the display.
     * requestedRefreshRate
@@ -108,7 +117,7 @@ interface ISurfaceComposer {
     * requires ACCESS_SURFACE_FLINGER permission.
     */
    @nullable IBinder createVirtualDisplay(@utf8InCpp String displayName, boolean isSecure,
            @utf8InCpp String uniqueId, float requestedRefreshRate);
            OptimizationPolicy optimizationPolicy, @utf8InCpp String uniqueId, float requestedRefreshRate);

    /**
     * Destroy a virtual display.
+1 −0
Original line number Diff line number Diff line
@@ -394,6 +394,7 @@ public:

    static const std::string kEmpty;
    static sp<IBinder> createVirtualDisplay(const std::string& displayName, bool isSecure,
                                            bool optimizeForPower = true,
                                            const std::string& uniqueId = kEmpty,
                                            float requestedRefreshRate = 0);

+5 −4
Original line number Diff line number Diff line
@@ -687,9 +687,10 @@ public:
        return binder::Status::ok();
    }

    binder::Status createVirtualDisplay(const std::string& /*displayName*/, bool /*isSecure*/,
                                        const std::string& /*uniqueId*/,
                                        float /*requestedRefreshRate*/,
    binder::Status createVirtualDisplay(
            const std::string& /*displayName*/, bool /*isSecure*/,
            gui::ISurfaceComposer::OptimizationPolicy /*optimizationPolicy*/,
            const std::string& /*uniqueId*/, float /*requestedRefreshRate*/,
            sp<IBinder>* /*outDisplay*/) override {
        return binder::Status::ok();
    }
+21 −0
Original line number Diff line number Diff line
@@ -51,6 +51,17 @@ namespace android {

namespace hal = hardware::graphics::composer::hal;

namespace gui {
inline std::string_view to_string(ISurfaceComposer::OptimizationPolicy optimizationPolicy) {
    switch (optimizationPolicy) {
        case ISurfaceComposer::OptimizationPolicy::optimizeForPower:
            return "optimizeForPower";
        case ISurfaceComposer::OptimizationPolicy::optimizeForPerformance:
            return "optimizeForPerformance";
    }
}
} // namespace gui

DisplayDeviceCreationArgs::DisplayDeviceCreationArgs(
        const sp<SurfaceFlinger>& flinger, HWComposer& hwComposer, const wp<IBinder>& displayToken,
        std::shared_ptr<compositionengine::Display> compositionDisplay)
@@ -283,6 +294,7 @@ void DisplayDevice::dump(utils::Dumper& dumper) const {

    dumper.dump("name"sv, '"' + mDisplayName + '"');
    dumper.dump("powerMode"sv, mPowerMode);
    dumper.dump("optimizationPolicy"sv, mOptimizationPolicy);

    if (mRefreshRateSelector) {
        mRefreshRateSelector->dump(dumper);
@@ -305,6 +317,15 @@ void DisplayDevice::setSecure(bool secure) {
    mCompositionDisplay->setSecure(secure);
}

gui::ISurfaceComposer::OptimizationPolicy DisplayDevice::getOptimizationPolicy() const {
    return mOptimizationPolicy;
}

void DisplayDevice::setOptimizationPolicy(
        gui::ISurfaceComposer::OptimizationPolicy optimizationPolicy) {
    mOptimizationPolicy = optimizationPolicy;
}

const Rect DisplayDevice::getBounds() const {
    return mCompositionDisplay->getState().displaySpace.getBoundsAsRect();
}
Loading