SF: Remove display config functions from HWC2
HWC2 is unnecessary stateful stopgap between HWComposer and
ComposerHal. In this CL the following functions are removed from HWC2
* getActiveConfig
* getActiveConfigIndex
* getDisplayVsyncPeriod
and ComposerHal is called directly from HWComposer. This way display
configs are stored only in HWComposer.
Additionally HWC2::Display::Config is renamed to DisplayMode and
it's extracted in its own file.
From the perspective of SurfaceFlinger this CL is not modifying
behaviour.
Bug: 159590486
Bug: 175678215
Test: atest libsurfaceflinger_unittest
Change-Id: I8cb450209adf038d891cff00d1c2690c8e6d94f7
diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
index 739a9b2..e7ded8b 100644
--- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
+++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
@@ -41,7 +41,6 @@
#include "SurfaceFlingerDefaultFactory.h"
#include "SurfaceInterceptor.h"
#include "TestableScheduler.h"
-#include "mock/DisplayHardware/MockDisplay.h"
#include "mock/MockDisplayIdGenerator.h"
#include "mock/MockFrameTimeline.h"
#include "mock/MockFrameTracer.h"
@@ -211,17 +210,12 @@
std::unique_ptr<EventThread> appEventThread,
std::unique_ptr<EventThread> sfEventThread,
ISchedulerCallback* callback = nullptr, bool hasMultipleConfigs = false) {
- std::vector<std::shared_ptr<const HWC2::Display::Config>> configs{
- HWC2::Display::Config::Builder(mDisplay, 0)
- .setVsyncPeriod(16'666'667)
- .setConfigGroup(0)
- .build()};
+ DisplayModes configs{
+ DisplayMode::Builder(0).setVsyncPeriod(16'666'667).setConfigGroup(0).build()};
if (hasMultipleConfigs) {
- configs.emplace_back(HWC2::Display::Config::Builder(mDisplay, 1)
- .setVsyncPeriod(11'111'111)
- .setConfigGroup(0)
- .build());
+ configs.emplace_back(
+ DisplayMode::Builder(1).setVsyncPeriod(11'111'111).setConfigGroup(0).build());
}
const auto currConfig = HwcConfigIndexType(0);
@@ -470,7 +464,6 @@
}
auto& mutableIsConnected() { return this->mIsConnected; }
- auto& mutableConfigs() { return this->mConfigs; }
auto& mutableLayers() { return this->mLayers; }
};
@@ -545,19 +538,20 @@
auto display = std::make_unique<HWC2Display>(*composer, *mCapabilities, mHwcDisplayId,
mHwcDisplayType);
- auto config = HWC2::Display::Config::Builder(*display, mActiveConfig);
- config.setWidth(mWidth);
- config.setHeight(mHeight);
- config.setVsyncPeriod(mRefreshRate);
- config.setDpiX(mDpiX);
- config.setDpiY(mDpiY);
- config.setConfigGroup(mConfigGroup);
- display->mutableConfigs().emplace(static_cast<int32_t>(mActiveConfig), config.build());
display->mutableIsConnected() = true;
display->setPowerMode(mPowerMode);
-
flinger->mutableHwcDisplayData()[mDisplayId].hwcDisplay = std::move(display);
+ auto config = DisplayMode::Builder(mActiveConfig)
+ .setWidth(mWidth)
+ .setHeight(mHeight)
+ .setVsyncPeriod(mRefreshRate)
+ .setDpiX(mDpiX)
+ .setDpiY(mDpiY)
+ .setConfigGroup(mConfigGroup)
+ .build();
+ flinger->mutableHwcDisplayData()[mDisplayId].modes.push_back(config);
+
if (mHwcDisplayType == hal::DisplayType::PHYSICAL) {
const auto physicalId = PhysicalDisplayId::tryCast(mDisplayId);
LOG_ALWAYS_FATAL_IF(!physicalId);
@@ -704,7 +698,6 @@
surfaceflinger::test::Factory mFactory;
sp<SurfaceFlinger> mFlinger = new SurfaceFlinger(mFactory, SurfaceFlinger::SkipInitialization);
TestableScheduler* mScheduler = nullptr;
- Hwc2::mock::Display mDisplay;
mock::DisplayIdGenerator<GpuVirtualDisplayId> mGpuVirtualDisplayIdGenerator;
};