SF: Introduce DisplayDeviceCreationArgs
Introduce a structure to hold the arguments used by the DisplayDevice
constructor. This simplifies the injector code used by the test, and
makes it easier to change the arguments without requiring a change to
the test or to the upcoming factory.
Test: atest libsurfaceflinger_unittest
Test: Marlin boots and appears usable
Bug: None
Change-Id: I4c806bf40f8f3c2c00f5115b83c6ab926317d628
diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
index 341734c..33a0242 100644
--- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
+++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
@@ -193,7 +193,7 @@
public:
FakePowerAdvisor() = default;
~FakePowerAdvisor() override = default;
- void setExpensiveRenderingExpected(hwc2_display_t, bool) override { }
+ void setExpensiveRenderingExpected(hwc2_display_t, bool) override {}
};
struct HWC2Display : public HWC2::Display {
@@ -316,7 +316,8 @@
public:
FakeDisplayDeviceInjector(TestableSurfaceFlinger& flinger, DisplayDevice::DisplayType type,
int32_t displayId)
- : mFlinger(flinger), mType(type), mDisplayId(displayId) {}
+ : mFlinger(flinger),
+ mCreationArgs(flinger.mFlinger.get(), mDisplayToken, type, displayId) {}
sp<IBinder> token() const { return mDisplayToken; }
@@ -339,54 +340,49 @@
auto& mutableDisplayDevice() { return mFlinger.mutableDisplays()[mDisplayToken]; }
auto& setNativeWindow(const sp<ANativeWindow>& nativeWindow) {
- mNativeWindow = nativeWindow;
+ mCreationArgs.nativeWindow = nativeWindow;
return *this;
}
auto& setDisplaySurface(const sp<DisplaySurface>& displaySurface) {
- mDisplaySurface = displaySurface;
+ mCreationArgs.displaySurface = displaySurface;
return *this;
}
auto& setRenderSurface(std::unique_ptr<renderengine::Surface> renderSurface) {
- mRenderSurface = std::move(renderSurface);
+ mCreationArgs.renderSurface = std::move(renderSurface);
return *this;
}
auto& setSecure(bool secure) {
- mSecure = secure;
+ mCreationArgs.isSecure = secure;
return *this;
}
auto& setDisplaySize(int width, int height) {
- mWidth = width;
- mHeight = height;
+ mCreationArgs.displayWidth = width;
+ mCreationArgs.displayHeight = height;
return *this;
}
auto& setPowerMode(int mode) {
- mPowerMode = mode;
+ mCreationArgs.initialPowerMode = mode;
return *this;
}
sp<DisplayDevice> inject() {
- std::unordered_map<ui::ColorMode, std::vector<ui::RenderIntent>> hdrAndRenderIntents;
- sp<DisplayDevice> device =
- new DisplayDevice(mFlinger.mFlinger.get(), mType, mDisplayId, mSecure,
- mDisplayToken, mNativeWindow, mDisplaySurface,
- std::move(mRenderSurface), mWidth, mHeight,
- DisplayState::eOrientationDefault, false, HdrCapabilities(),
- 0, hdrAndRenderIntents, mPowerMode);
- mFlinger.mutableDisplays().emplace(mDisplayToken, device);
-
DisplayDeviceState state;
- state.type = mType;
- state.isSecure = mSecure;
+ state.type = mCreationArgs.type;
+ state.isSecure = mCreationArgs.isSecure;
+
+ sp<DisplayDevice> device = new DisplayDevice(std::move(mCreationArgs));
+ mFlinger.mutableDisplays().emplace(mDisplayToken, device);
mFlinger.mutableCurrentState().displays.add(mDisplayToken, state);
mFlinger.mutableDrawingState().displays.add(mDisplayToken, state);
- if (mType >= DisplayDevice::DISPLAY_PRIMARY && mType < DisplayDevice::DISPLAY_VIRTUAL) {
- mFlinger.mutableDisplayTokens()[mType] = mDisplayToken;
+ if (state.type >= DisplayDevice::DISPLAY_PRIMARY &&
+ state.type < DisplayDevice::DISPLAY_VIRTUAL) {
+ mFlinger.mutableDisplayTokens()[state.type] = mDisplayToken;
}
return device;
@@ -395,15 +391,7 @@
private:
TestableSurfaceFlinger& mFlinger;
sp<BBinder> mDisplayToken = new BBinder();
- DisplayDevice::DisplayType mType;
- const int32_t mDisplayId;
- sp<ANativeWindow> mNativeWindow;
- sp<DisplaySurface> mDisplaySurface;
- std::unique_ptr<renderengine::Surface> mRenderSurface;
- bool mSecure = false;
- int mWidth = 0;
- int mHeight = 0;
- int mPowerMode = HWC_POWER_MODE_NORMAL;
+ DisplayDeviceCreationArgs mCreationArgs;
};
sp<SurfaceFlinger> mFlinger = new SurfaceFlinger(SurfaceFlinger::SkipInitialization);