Loading services/surfaceflinger/Display/DisplayModeController.cpp +17 −11 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <ftl/concat.h> #include <ftl/expected.h> #include <log/log.h> #include <utils/Errors.h> namespace android::display { Loading Loading @@ -177,12 +178,13 @@ void DisplayModeController::clearDesiredMode(PhysicalDisplayId displayId) { } } bool DisplayModeController::initiateModeChange(PhysicalDisplayId displayId, DisplayModeRequest&& desiredMode, auto DisplayModeController::initiateModeChange( PhysicalDisplayId displayId, DisplayModeRequest&& desiredMode, const hal::VsyncPeriodChangeConstraints& constraints, hal::VsyncPeriodChangeTimeline& outTimeline) { hal::VsyncPeriodChangeTimeline& outTimeline) -> ModeChangeResult { std::lock_guard lock(mDisplayLock); const auto& displayPtr = FTL_EXPECT(mDisplays.get(displayId).ok_or(false)).get(); const auto& displayPtr = FTL_EXPECT(mDisplays.get(displayId).ok_or(ModeChangeResult::Aborted)).get(); // TODO: b/255635711 - Flow the DisplayModeRequest through the desired/pending/active states. // For now, `desiredMode` and `desiredModeOpt` are one and the same, but the latter is not Loading @@ -201,13 +203,17 @@ bool DisplayModeController::initiateModeChange(PhysicalDisplayId displayId, const auto& mode = *displayPtr->pendingModeOpt->mode.modePtr; if (mComposerPtr->setActiveModeWithConstraints(displayId, mode.getHwcId(), constraints, &outTimeline) != OK) { return false; } const auto error = mComposerPtr->setActiveModeWithConstraints(displayId, mode.getHwcId(), constraints, &outTimeline); switch (error) { case FAILED_TRANSACTION: return ModeChangeResult::Rejected; case OK: SFTRACE_INT(displayPtr->pendingModeFpsTrace.c_str(), mode.getVsyncRate().getIntValue()); return true; return ModeChangeResult::Changed; default: return ModeChangeResult::Aborted; } } void DisplayModeController::finalizeModeChange(PhysicalDisplayId displayId, DisplayModeId modeId, Loading services/surfaceflinger/Display/DisplayModeController.h +4 −3 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ public: RefreshRateSelectorPtr selectorPtrFor(PhysicalDisplayId) const EXCLUDES(mDisplayLock); enum class DesiredModeAction { None, InitiateDisplayModeSwitch, InitiateRenderRateSwitch }; enum class ModeChangeResult { Changed, Rejected, Aborted }; DesiredModeAction setDesiredMode(PhysicalDisplayId, DisplayModeRequest&&) EXCLUDES(mDisplayLock); Loading @@ -86,7 +87,7 @@ public: scheduler::FrameRateMode getActiveMode(PhysicalDisplayId) const EXCLUDES(mDisplayLock); bool initiateModeChange(PhysicalDisplayId, DisplayModeRequest&&, ModeChangeResult initiateModeChange(PhysicalDisplayId, DisplayModeRequest&&, const hal::VsyncPeriodChangeConstraints&, hal::VsyncPeriodChangeTimeline& outTimeline) REQUIRES(kMainThreadContext) EXCLUDES(mDisplayLock); Loading services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -1384,7 +1384,7 @@ V2_4::Error AidlComposer::getDisplayVsyncPeriod(Display display, VsyncPeriodNano return V2_4::Error::NONE; } V2_4::Error AidlComposer::setActiveConfigWithConstraints( Error AidlComposer::setActiveConfigWithConstraints( Display display, Config config, const IComposerClient::VsyncPeriodChangeConstraints& vsyncPeriodChangeConstraints, VsyncPeriodChangeTimeline* outTimeline) { Loading @@ -1398,10 +1398,10 @@ V2_4::Error AidlComposer::setActiveConfigWithConstraints( &timeline); if (!status.isOk()) { ALOGE("setActiveConfigWithConstraints failed %s", status.getDescription().c_str()); return static_cast<V2_4::Error>(status.getServiceSpecificError()); return static_cast<Error>(status.getServiceSpecificError()); } *outTimeline = translate<VsyncPeriodChangeTimeline>(timeline); return V2_4::Error::NONE; return Error::NONE; } V2_4::Error AidlComposer::setAutoLowLatencyMode(Display display, bool on) { Loading services/surfaceflinger/DisplayHardware/AidlComposerHal.h +1 −1 Original line number Diff line number Diff line Loading @@ -206,7 +206,7 @@ public: V2_4::Error getDisplayConnectionType(Display display, IComposerClient::DisplayConnectionType* outType) override; V2_4::Error getDisplayVsyncPeriod(Display display, VsyncPeriodNanos* outVsyncPeriod) override; V2_4::Error setActiveConfigWithConstraints( Error setActiveConfigWithConstraints( Display display, Config config, const IComposerClient::VsyncPeriodChangeConstraints& vsyncPeriodChangeConstraints, VsyncPeriodChangeTimeline* outTimeline) override; Loading services/surfaceflinger/DisplayHardware/ComposerHal.h +4 −2 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ #include <ui/PictureProfileHandle.h> #include <utils/StrongPointer.h> #include "DisplayHardware/Hal.h" #include <aidl/android/hardware/graphics/common/DisplayDecorationSupport.h> #include <aidl/android/hardware/graphics/common/HdrConversionCapability.h> #include <aidl/android/hardware/graphics/common/HdrConversionStrategy.h> Loading Loading @@ -73,9 +75,9 @@ using types::V1_2::ColorMode; using types::V1_2::Dataspace; using types::V1_2::PixelFormat; using hardware::graphics::composer::hal::Error; using V2_1::Config; using V2_1::Display; using V2_1::Error; using V2_1::Layer; using V2_4::CommandReaderBase; using V2_4::CommandWriterBase; Loading Loading @@ -261,7 +263,7 @@ public: Display display, IComposerClient::DisplayConnectionType* outType) = 0; virtual V2_4::Error getDisplayVsyncPeriod(Display display, VsyncPeriodNanos* outVsyncPeriod) = 0; virtual V2_4::Error setActiveConfigWithConstraints( virtual Error setActiveConfigWithConstraints( Display display, Config config, const IComposerClient::VsyncPeriodChangeConstraints& vsyncPeriodChangeConstraints, VsyncPeriodChangeTimeline* outTimeline) = 0; Loading Loading
services/surfaceflinger/Display/DisplayModeController.cpp +17 −11 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <ftl/concat.h> #include <ftl/expected.h> #include <log/log.h> #include <utils/Errors.h> namespace android::display { Loading Loading @@ -177,12 +178,13 @@ void DisplayModeController::clearDesiredMode(PhysicalDisplayId displayId) { } } bool DisplayModeController::initiateModeChange(PhysicalDisplayId displayId, DisplayModeRequest&& desiredMode, auto DisplayModeController::initiateModeChange( PhysicalDisplayId displayId, DisplayModeRequest&& desiredMode, const hal::VsyncPeriodChangeConstraints& constraints, hal::VsyncPeriodChangeTimeline& outTimeline) { hal::VsyncPeriodChangeTimeline& outTimeline) -> ModeChangeResult { std::lock_guard lock(mDisplayLock); const auto& displayPtr = FTL_EXPECT(mDisplays.get(displayId).ok_or(false)).get(); const auto& displayPtr = FTL_EXPECT(mDisplays.get(displayId).ok_or(ModeChangeResult::Aborted)).get(); // TODO: b/255635711 - Flow the DisplayModeRequest through the desired/pending/active states. // For now, `desiredMode` and `desiredModeOpt` are one and the same, but the latter is not Loading @@ -201,13 +203,17 @@ bool DisplayModeController::initiateModeChange(PhysicalDisplayId displayId, const auto& mode = *displayPtr->pendingModeOpt->mode.modePtr; if (mComposerPtr->setActiveModeWithConstraints(displayId, mode.getHwcId(), constraints, &outTimeline) != OK) { return false; } const auto error = mComposerPtr->setActiveModeWithConstraints(displayId, mode.getHwcId(), constraints, &outTimeline); switch (error) { case FAILED_TRANSACTION: return ModeChangeResult::Rejected; case OK: SFTRACE_INT(displayPtr->pendingModeFpsTrace.c_str(), mode.getVsyncRate().getIntValue()); return true; return ModeChangeResult::Changed; default: return ModeChangeResult::Aborted; } } void DisplayModeController::finalizeModeChange(PhysicalDisplayId displayId, DisplayModeId modeId, Loading
services/surfaceflinger/Display/DisplayModeController.h +4 −3 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ public: RefreshRateSelectorPtr selectorPtrFor(PhysicalDisplayId) const EXCLUDES(mDisplayLock); enum class DesiredModeAction { None, InitiateDisplayModeSwitch, InitiateRenderRateSwitch }; enum class ModeChangeResult { Changed, Rejected, Aborted }; DesiredModeAction setDesiredMode(PhysicalDisplayId, DisplayModeRequest&&) EXCLUDES(mDisplayLock); Loading @@ -86,7 +87,7 @@ public: scheduler::FrameRateMode getActiveMode(PhysicalDisplayId) const EXCLUDES(mDisplayLock); bool initiateModeChange(PhysicalDisplayId, DisplayModeRequest&&, ModeChangeResult initiateModeChange(PhysicalDisplayId, DisplayModeRequest&&, const hal::VsyncPeriodChangeConstraints&, hal::VsyncPeriodChangeTimeline& outTimeline) REQUIRES(kMainThreadContext) EXCLUDES(mDisplayLock); Loading
services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -1384,7 +1384,7 @@ V2_4::Error AidlComposer::getDisplayVsyncPeriod(Display display, VsyncPeriodNano return V2_4::Error::NONE; } V2_4::Error AidlComposer::setActiveConfigWithConstraints( Error AidlComposer::setActiveConfigWithConstraints( Display display, Config config, const IComposerClient::VsyncPeriodChangeConstraints& vsyncPeriodChangeConstraints, VsyncPeriodChangeTimeline* outTimeline) { Loading @@ -1398,10 +1398,10 @@ V2_4::Error AidlComposer::setActiveConfigWithConstraints( &timeline); if (!status.isOk()) { ALOGE("setActiveConfigWithConstraints failed %s", status.getDescription().c_str()); return static_cast<V2_4::Error>(status.getServiceSpecificError()); return static_cast<Error>(status.getServiceSpecificError()); } *outTimeline = translate<VsyncPeriodChangeTimeline>(timeline); return V2_4::Error::NONE; return Error::NONE; } V2_4::Error AidlComposer::setAutoLowLatencyMode(Display display, bool on) { Loading
services/surfaceflinger/DisplayHardware/AidlComposerHal.h +1 −1 Original line number Diff line number Diff line Loading @@ -206,7 +206,7 @@ public: V2_4::Error getDisplayConnectionType(Display display, IComposerClient::DisplayConnectionType* outType) override; V2_4::Error getDisplayVsyncPeriod(Display display, VsyncPeriodNanos* outVsyncPeriod) override; V2_4::Error setActiveConfigWithConstraints( Error setActiveConfigWithConstraints( Display display, Config config, const IComposerClient::VsyncPeriodChangeConstraints& vsyncPeriodChangeConstraints, VsyncPeriodChangeTimeline* outTimeline) override; Loading
services/surfaceflinger/DisplayHardware/ComposerHal.h +4 −2 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ #include <ui/PictureProfileHandle.h> #include <utils/StrongPointer.h> #include "DisplayHardware/Hal.h" #include <aidl/android/hardware/graphics/common/DisplayDecorationSupport.h> #include <aidl/android/hardware/graphics/common/HdrConversionCapability.h> #include <aidl/android/hardware/graphics/common/HdrConversionStrategy.h> Loading Loading @@ -73,9 +75,9 @@ using types::V1_2::ColorMode; using types::V1_2::Dataspace; using types::V1_2::PixelFormat; using hardware::graphics::composer::hal::Error; using V2_1::Config; using V2_1::Display; using V2_1::Error; using V2_1::Layer; using V2_4::CommandReaderBase; using V2_4::CommandWriterBase; Loading Loading @@ -261,7 +263,7 @@ public: Display display, IComposerClient::DisplayConnectionType* outType) = 0; virtual V2_4::Error getDisplayVsyncPeriod(Display display, VsyncPeriodNanos* outVsyncPeriod) = 0; virtual V2_4::Error setActiveConfigWithConstraints( virtual Error setActiveConfigWithConstraints( Display display, Config config, const IComposerClient::VsyncPeriodChangeConstraints& vsyncPeriodChangeConstraints, VsyncPeriodChangeTimeline* outTimeline) = 0; Loading