SF: Add DisplayDevice::initiateModeChange
This CL creates DisplayDevice::initiateModeChange which calls
HWC::setActiveConfigWithConstraints. SF should call DisplayDevice
instead of directly calling HWComposer.
This is a step towards removing the cached display modes from
the HWComposer class.
Test: presubmit
Bug: 159590486
Change-Id: Id05d2eacbbb6ed335fe205231b85e8af9a8ccd91
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp
index e3f15eb..b4a3ed1 100644
--- a/services/surfaceflinger/DisplayDevice.cpp
+++ b/services/surfaceflinger/DisplayDevice.cpp
@@ -51,12 +51,16 @@
ui::Transform::RotationFlags DisplayDevice::sPrimaryDisplayRotationFlags = ui::Transform::ROT_0;
DisplayDeviceCreationArgs::DisplayDeviceCreationArgs(
- const sp<SurfaceFlinger>& flinger, const wp<IBinder>& displayToken,
+ const sp<SurfaceFlinger>& flinger, HWComposer& hwComposer, const wp<IBinder>& displayToken,
std::shared_ptr<compositionengine::Display> compositionDisplay)
- : flinger(flinger), displayToken(displayToken), compositionDisplay(compositionDisplay) {}
+ : flinger(flinger),
+ hwComposer(hwComposer),
+ displayToken(displayToken),
+ compositionDisplay(compositionDisplay) {}
DisplayDevice::DisplayDevice(DisplayDeviceCreationArgs& args)
: mFlinger(args.flinger),
+ mHwComposer(args.hwComposer),
mDisplayToken(args.displayToken),
mSequenceId(args.sequenceId),
mConnectionType(args.connectionType),
@@ -146,6 +150,19 @@
mActiveModeId = id;
}
+status_t DisplayDevice::initiateModeChange(DisplayModeId modeId,
+ const hal::VsyncPeriodChangeConstraints& constraints,
+ hal::VsyncPeriodChangeTimeline* outTimeline) const {
+ const auto mode = getMode(modeId);
+ if (!mode) {
+ ALOGE("Trying to initiate a mode change to invalid mode %s on display %s",
+ std::to_string(modeId.value()).c_str(), to_string(getId()).c_str());
+ return BAD_VALUE;
+ }
+ return mHwComposer.setActiveModeWithConstraints(getPhysicalId(), mode->getHwcId(), constraints,
+ outTimeline);
+}
+
const DisplayModePtr& DisplayDevice::getActiveMode() const {
return mSupportedModes[mActiveModeId.value()];
}