Loading services/surfaceflinger/CompositionEngine/tests/MockHWComposer.h +2 −0 Original line number Diff line number Diff line Loading @@ -133,6 +133,8 @@ public: status_t(PhysicalDisplayId, std::optional<aidl::android::hardware::graphics::common:: DisplayDecorationSupport>* support)); MOCK_METHOD2(setIdleTimerEnabled, status_t(PhysicalDisplayId, std::chrono::milliseconds)); MOCK_METHOD1(hasDisplayIdleTimerCapability, bool(PhysicalDisplayId displayId)); }; } // namespace mock Loading services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp +26 −0 Original line number Diff line number Diff line Loading @@ -248,6 +248,7 @@ bool AidlComposer::isSupported(OptionalFeature feature) const { case OptionalFeature::ExpectedPresentTime: case OptionalFeature::DisplayBrightnessCommand: case OptionalFeature::BootDisplayConfig: case OptionalFeature::KernelIdleTimer: return true; } } Loading Loading @@ -475,6 +476,19 @@ Error AidlComposer::getDozeSupport(Display display, bool* outSupport) { 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, float* outMaxLuminance, float* outMaxAverageLuminance, float* outMinLuminance) { Loading Loading @@ -1100,5 +1114,17 @@ Error AidlComposer::getDisplayDecorationSupport(Display display, } 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 android services/surfaceflinger/DisplayHardware/AidlComposerHal.h +2 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ public: std::vector<uint32_t>* outLayerRequestMasks) 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, float* outMaxAverageLuminance, float* outMinLuminance) override; Loading Loading @@ -220,6 +221,7 @@ public: Error getPreferredBootDisplayConfig(Display displayId, Config*) override; Error getDisplayDecorationSupport(Display display, std::optional<DisplayDecorationSupport>* support) override; Error setIdleTimerEnabled(Display displayId, std::chrono::milliseconds timeout) override; private: // Many public functions above simply write a command into the command Loading services/surfaceflinger/DisplayHardware/ComposerHal.h +3 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ public: // Whether setDisplayBrightness is able to be applied as part of a display command. DisplayBrightnessCommand, BootDisplayConfig, KernelIdleTimer, }; virtual bool isSupported(OptionalFeature) const = 0; Loading Loading @@ -134,6 +135,7 @@ public: std::vector<uint32_t>* outLayerRequestMasks) = 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, float* outMaxLuminance, float* outMaxAverageLuminance, float* outMinLuminance) = 0; Loading Loading @@ -274,6 +276,7 @@ public: Display display, std::optional<::aidl::android::hardware::graphics::common::DisplayDecorationSupport>* support) = 0; virtual Error setIdleTimerEnabled(Display displayId, std::chrono::milliseconds timeout) = 0; }; } // namespace Hwc2 Loading services/surfaceflinger/DisplayHardware/HWC2.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -148,6 +148,12 @@ bool Display::isVsyncPeriodSwitchSupported() const { 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) { std::vector<Hwc2::Layer> layerIds; std::vector<Composition> types; Loading Loading @@ -588,6 +594,11 @@ Error Display::getDisplayDecorationSupport( 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 void Display::setConnected(bool connected) { Loading Loading
services/surfaceflinger/CompositionEngine/tests/MockHWComposer.h +2 −0 Original line number Diff line number Diff line Loading @@ -133,6 +133,8 @@ public: status_t(PhysicalDisplayId, std::optional<aidl::android::hardware::graphics::common:: DisplayDecorationSupport>* support)); MOCK_METHOD2(setIdleTimerEnabled, status_t(PhysicalDisplayId, std::chrono::milliseconds)); MOCK_METHOD1(hasDisplayIdleTimerCapability, bool(PhysicalDisplayId displayId)); }; } // namespace mock Loading
services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp +26 −0 Original line number Diff line number Diff line Loading @@ -248,6 +248,7 @@ bool AidlComposer::isSupported(OptionalFeature feature) const { case OptionalFeature::ExpectedPresentTime: case OptionalFeature::DisplayBrightnessCommand: case OptionalFeature::BootDisplayConfig: case OptionalFeature::KernelIdleTimer: return true; } } Loading Loading @@ -475,6 +476,19 @@ Error AidlComposer::getDozeSupport(Display display, bool* outSupport) { 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, float* outMaxLuminance, float* outMaxAverageLuminance, float* outMinLuminance) { Loading Loading @@ -1100,5 +1114,17 @@ Error AidlComposer::getDisplayDecorationSupport(Display display, } 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 android
services/surfaceflinger/DisplayHardware/AidlComposerHal.h +2 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ public: std::vector<uint32_t>* outLayerRequestMasks) 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, float* outMaxAverageLuminance, float* outMinLuminance) override; Loading Loading @@ -220,6 +221,7 @@ public: Error getPreferredBootDisplayConfig(Display displayId, Config*) override; Error getDisplayDecorationSupport(Display display, std::optional<DisplayDecorationSupport>* support) override; Error setIdleTimerEnabled(Display displayId, std::chrono::milliseconds timeout) override; private: // Many public functions above simply write a command into the command Loading
services/surfaceflinger/DisplayHardware/ComposerHal.h +3 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ public: // Whether setDisplayBrightness is able to be applied as part of a display command. DisplayBrightnessCommand, BootDisplayConfig, KernelIdleTimer, }; virtual bool isSupported(OptionalFeature) const = 0; Loading Loading @@ -134,6 +135,7 @@ public: std::vector<uint32_t>* outLayerRequestMasks) = 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, float* outMaxLuminance, float* outMaxAverageLuminance, float* outMinLuminance) = 0; Loading Loading @@ -274,6 +276,7 @@ public: Display display, std::optional<::aidl::android::hardware::graphics::common::DisplayDecorationSupport>* support) = 0; virtual Error setIdleTimerEnabled(Display displayId, std::chrono::milliseconds timeout) = 0; }; } // namespace Hwc2 Loading
services/surfaceflinger/DisplayHardware/HWC2.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -148,6 +148,12 @@ bool Display::isVsyncPeriodSwitchSupported() const { 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) { std::vector<Hwc2::Layer> layerIds; std::vector<Composition> types; Loading Loading @@ -588,6 +594,11 @@ Error Display::getDisplayDecorationSupport( 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 void Display::setConnected(bool connected) { Loading