SF: Separate RenderEngine into interface and impl
This allows the RenderEngine to be substituted by a GMock for tests.
RE::RenderEngine is now a pure virtual interface class.
RE::impl::RenderEngine is the normal/base implementation.
Similarly, RE::Image and RE::Surface are pure virtual interfaces.
RE::impl::Image and RE::impl::Surface are the normal implementations.
Test: Builds
Bug: None
Change-Id: Ib5e658df4bb4efc1a9c0ae95feaf0c1e052cdc94
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp
index cf70529..d40666e 100644
--- a/services/surfaceflinger/DisplayDevice.cpp
+++ b/services/surfaceflinger/DisplayDevice.cpp
@@ -84,7 +84,7 @@
mHwcDisplayId(hwcId),
mDisplayToken(displayToken),
mDisplaySurface(displaySurface),
- mSurface{flinger->getRenderEngine()},
+ mSurface{flinger->getRenderEngine().createSurface()},
mDisplayWidth(),
mDisplayHeight(),
mPageFlipCount(),
@@ -106,11 +106,11 @@
/*
* Create our display's surface
*/
- mSurface.setCritical(mType == DisplayDevice::DISPLAY_PRIMARY);
- mSurface.setAsync(mType >= DisplayDevice::DISPLAY_VIRTUAL);
- mSurface.setNativeWindow(window);
- mDisplayWidth = mSurface.queryWidth();
- mDisplayHeight = mSurface.queryHeight();
+ mSurface->setCritical(mType == DisplayDevice::DISPLAY_PRIMARY);
+ mSurface->setAsync(mType >= DisplayDevice::DISPLAY_VIRTUAL);
+ mSurface->setNativeWindow(window);
+ mDisplayWidth = mSurface->queryWidth();
+ mDisplayHeight = mSurface->queryHeight();
// Make sure that composition can never be stalled by a virtual display
// consumer that isn't processing buffers fast enough. We have to do this
@@ -207,7 +207,7 @@
void DisplayDevice::swapBuffers(HWComposer& hwc) const {
if (hwc.hasClientComposition(mHwcDisplayId) || hwc.hasFlipClientTargetRequest(mHwcDisplayId)) {
- mSurface.swapBuffers();
+ mSurface->swapBuffers();
}
status_t result = mDisplaySurface->advanceFrame();
@@ -222,7 +222,7 @@
}
bool DisplayDevice::makeCurrent() const {
- bool success = mFlinger->getRenderEngine().setCurrentSurface(mSurface);
+ bool success = mFlinger->getRenderEngine().setCurrentSurface(*mSurface);
setViewportAndProjection();
return success;
}
@@ -360,14 +360,14 @@
void DisplayDevice::setDisplaySize(const int newWidth, const int newHeight) {
dirtyRegion.set(getBounds());
- mSurface.setNativeWindow(nullptr);
+ mSurface->setNativeWindow(nullptr);
mDisplaySurface->resizeBuffers(newWidth, newHeight);
ANativeWindow* const window = mNativeWindow.get();
- mSurface.setNativeWindow(window);
- mDisplayWidth = mSurface.queryWidth();
- mDisplayHeight = mSurface.queryHeight();
+ mSurface->setNativeWindow(window);
+ mDisplayWidth = mSurface->queryWidth();
+ mDisplayHeight = mSurface->queryHeight();
LOG_FATAL_IF(mDisplayWidth != newWidth,
"Unable to set new width to %d", newWidth);
@@ -474,9 +474,9 @@
"(%d:%d:%d:%d), orient=%2d (type=%08x), "
"flips=%u, isSecure=%d, powerMode=%d, activeConfig=%d, numLayers=%zu\n",
mType, mHwcDisplayId, mLayerStack, mDisplayWidth, mDisplayHeight, window,
- mSurface.queryRedSize(), mSurface.queryGreenSize(), mSurface.queryBlueSize(),
- mSurface.queryAlphaSize(), mOrientation, tr.getType(),
- getPageFlipCount(), mIsSecure, mPowerMode, mActiveConfig,
+ mSurface->queryRedSize(), mSurface->queryGreenSize(),
+ mSurface->queryBlueSize(), mSurface->queryAlphaSize(), mOrientation,
+ tr.getType(), getPageFlipCount(), mIsSecure, mPowerMode, mActiveConfig,
mVisibleLayersSortedByZ.size());
result.appendFormat(" v:[%d,%d,%d,%d], f:[%d,%d,%d,%d], s:[%d,%d,%d,%d],"
"transform:[[%0.3f,%0.3f,%0.3f][%0.3f,%0.3f,%0.3f][%0.3f,%0.3f,%0.3f]]\n",