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

Commit 32cf0605 authored by ramindani's avatar ramindani
Browse files

[SF] Kernel idle timer configuration

This change configures the kernel idle timer using the composer3 HAL APIs.

BUG: 198808492
Test: atest libsurfaceflinger_unittest
Change-Id: I7de140c3094cb84c8efe782c19c98e126cb4c60b
parent 34885120
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -133,6 +133,8 @@ public:
                 status_t(PhysicalDisplayId,
                 status_t(PhysicalDisplayId,
                          std::optional<aidl::android::hardware::graphics::common::
                          std::optional<aidl::android::hardware::graphics::common::
                                                DisplayDecorationSupport>* support));
                                                DisplayDecorationSupport>* support));
    MOCK_METHOD2(setIdleTimerEnabled, status_t(PhysicalDisplayId, std::chrono::milliseconds));
    MOCK_METHOD1(hasDisplayIdleTimerCapability, bool(PhysicalDisplayId displayId));
};
};


} // namespace mock
} // namespace mock
+26 −0
Original line number Original line Diff line number Diff line
@@ -248,6 +248,7 @@ bool AidlComposer::isSupported(OptionalFeature feature) const {
        case OptionalFeature::ExpectedPresentTime:
        case OptionalFeature::ExpectedPresentTime:
        case OptionalFeature::DisplayBrightnessCommand:
        case OptionalFeature::DisplayBrightnessCommand:
        case OptionalFeature::BootDisplayConfig:
        case OptionalFeature::BootDisplayConfig:
        case OptionalFeature::KernelIdleTimer:
            return true;
            return true;
    }
    }
}
}
@@ -475,6 +476,19 @@ Error AidlComposer::getDozeSupport(Display display, bool* outSupport) {
    return Error::NONE;
    return Error::NONE;
}
}


Error AidlComposer::hasDisplayIdleTimerCapability(Display display, bool* outSupport) {
    std::vector<AidlDisplayCapability> capabilities;
    const auto status =
            mAidlComposerClient->getDisplayCapabilities(translate<int64_t>(display), &capabilities);
    if (!status.isOk()) {
        ALOGE("getDisplayCapabilities failed %s", status.getDescription().c_str());
        return static_cast<Error>(status.getServiceSpecificError());
    }
    *outSupport = std::find(capabilities.begin(), capabilities.end(),
                            AidlDisplayCapability::DISPLAY_IDLE_TIMER) != capabilities.end();
    return Error::NONE;
}

Error AidlComposer::getHdrCapabilities(Display display, std::vector<Hdr>* outTypes,
Error AidlComposer::getHdrCapabilities(Display display, std::vector<Hdr>* outTypes,
                                       float* outMaxLuminance, float* outMaxAverageLuminance,
                                       float* outMaxLuminance, float* outMaxAverageLuminance,
                                       float* outMinLuminance) {
                                       float* outMinLuminance) {
@@ -1100,5 +1114,17 @@ Error AidlComposer::getDisplayDecorationSupport(Display display,
    }
    }
    return Error::NONE;
    return Error::NONE;
}
}

Error AidlComposer::setIdleTimerEnabled(Display displayId, std::chrono::milliseconds timeout) {
    const auto status =
            mAidlComposerClient->setIdleTimerEnabled(translate<int64_t>(displayId),
                                                     translate<int32_t>(timeout.count()));
    if (!status.isOk()) {
        ALOGE("setIdleTimerEnabled failed %s", status.getDescription().c_str());
        return static_cast<Error>(status.getServiceSpecificError());
    }
    return Error::NONE;
}

} // namespace Hwc2
} // namespace Hwc2
} // namespace android
} // namespace android
+2 −0
Original line number Original line Diff line number Diff line
@@ -100,6 +100,7 @@ public:
                             std::vector<uint32_t>* outLayerRequestMasks) override;
                             std::vector<uint32_t>* outLayerRequestMasks) override;


    Error getDozeSupport(Display display, bool* outSupport) override;
    Error getDozeSupport(Display display, bool* outSupport) override;
    Error hasDisplayIdleTimerCapability(Display display, bool* outSupport) override;
    Error getHdrCapabilities(Display display, std::vector<Hdr>* outTypes, float* outMaxLuminance,
    Error getHdrCapabilities(Display display, std::vector<Hdr>* outTypes, float* outMaxLuminance,
                             float* outMaxAverageLuminance, float* outMinLuminance) override;
                             float* outMaxAverageLuminance, float* outMinLuminance) override;


@@ -220,6 +221,7 @@ public:
    Error getPreferredBootDisplayConfig(Display displayId, Config*) override;
    Error getPreferredBootDisplayConfig(Display displayId, Config*) override;
    Error getDisplayDecorationSupport(Display display,
    Error getDisplayDecorationSupport(Display display,
                                      std::optional<DisplayDecorationSupport>* support) override;
                                      std::optional<DisplayDecorationSupport>* support) override;
    Error setIdleTimerEnabled(Display displayId, std::chrono::milliseconds timeout) override;


private:
private:
    // Many public functions above simply write a command into the command
    // Many public functions above simply write a command into the command
+3 −0
Original line number Original line Diff line number Diff line
@@ -93,6 +93,7 @@ public:
        // Whether setDisplayBrightness is able to be applied as part of a display command.
        // Whether setDisplayBrightness is able to be applied as part of a display command.
        DisplayBrightnessCommand,
        DisplayBrightnessCommand,
        BootDisplayConfig,
        BootDisplayConfig,
        KernelIdleTimer,
    };
    };


    virtual bool isSupported(OptionalFeature) const = 0;
    virtual bool isSupported(OptionalFeature) const = 0;
@@ -134,6 +135,7 @@ public:
                                     std::vector<uint32_t>* outLayerRequestMasks) = 0;
                                     std::vector<uint32_t>* outLayerRequestMasks) = 0;


    virtual Error getDozeSupport(Display display, bool* outSupport) = 0;
    virtual Error getDozeSupport(Display display, bool* outSupport) = 0;
    virtual Error hasDisplayIdleTimerCapability(Display display, bool* outSupport) = 0;
    virtual Error getHdrCapabilities(Display display, std::vector<Hdr>* outTypes,
    virtual Error getHdrCapabilities(Display display, std::vector<Hdr>* outTypes,
                                     float* outMaxLuminance, float* outMaxAverageLuminance,
                                     float* outMaxLuminance, float* outMaxAverageLuminance,
                                     float* outMinLuminance) = 0;
                                     float* outMinLuminance) = 0;
@@ -274,6 +276,7 @@ public:
            Display display,
            Display display,
            std::optional<::aidl::android::hardware::graphics::common::DisplayDecorationSupport>*
            std::optional<::aidl::android::hardware::graphics::common::DisplayDecorationSupport>*
                    support) = 0;
                    support) = 0;
    virtual Error setIdleTimerEnabled(Display displayId, std::chrono::milliseconds timeout) = 0;
};
};


} // namespace Hwc2
} // namespace Hwc2
+11 −0
Original line number Original line Diff line number Diff line
@@ -148,6 +148,12 @@ bool Display::isVsyncPeriodSwitchSupported() const {
    return mComposer.isSupported(android::Hwc2::Composer::OptionalFeature::RefreshRateSwitching);
    return mComposer.isSupported(android::Hwc2::Composer::OptionalFeature::RefreshRateSwitching);
}
}


bool Display::hasDisplayIdleTimerCapability() const {
    bool isCapabilitySupported = false;
    return mComposer.hasDisplayIdleTimerCapability(mId, &isCapabilitySupported) == Error::NONE &&
            isCapabilitySupported;
}

Error Display::getChangedCompositionTypes(std::unordered_map<HWC2::Layer*, Composition>* outTypes) {
Error Display::getChangedCompositionTypes(std::unordered_map<HWC2::Layer*, Composition>* outTypes) {
    std::vector<Hwc2::Layer> layerIds;
    std::vector<Hwc2::Layer> layerIds;
    std::vector<Composition> types;
    std::vector<Composition> types;
@@ -588,6 +594,11 @@ Error Display::getDisplayDecorationSupport(
    return static_cast<Error>(error);
    return static_cast<Error>(error);
}
}


Error Display::setIdleTimerEnabled(std::chrono::milliseconds timeout) {
    const auto error = mComposer.setIdleTimerEnabled(mId, timeout);
    return static_cast<Error>(error);
}

// For use by Device
// For use by Device


void Display::setConnected(bool connected) {
void Display::setConnected(bool connected) {
Loading