SurfaceComposerClient: Ensure createSurface returns error codes.
If SurfaceComposerClient::mStatus is not equal to NO_ERROR (for example
because we have attempted to construct a rooted-connection to a destroyed
surface, and initialization has failed) then it is possible for createSurface
to return NO_ERROR while failing to assign a value to outSurface. This
violates the expectations of the JNI layer which expects that NO_ERROR will
result in a valid surface.
Bug: 76231383
Test: Surface_test.cpp (libgui_test)
Change-Id: Ie68aafad01674c43e13af09bc144cc673b84ac1b
diff --git a/libs/gui/tests/Surface_test.cpp b/libs/gui/tests/Surface_test.cpp
index 66d5595..df391ed 100644
--- a/libs/gui/tests/Surface_test.cpp
+++ b/libs/gui/tests/Surface_test.cpp
@@ -58,7 +58,6 @@
class SurfaceTest : public ::testing::Test {
protected:
-
SurfaceTest() {
ProcessState::self()->startThreadPool();
}
@@ -93,6 +92,16 @@
sp<SurfaceControl> mSurfaceControl;
};
+TEST_F(SurfaceTest, CreateSurfaceReturnsErrorBadClient) {
+ mComposerClient->dispose();
+ ASSERT_EQ(NO_INIT, mComposerClient->initCheck());
+
+ sp<SurfaceControl> sc;
+ status_t err = mComposerClient->createSurfaceChecked(
+ String8("Test Surface"), 32, 32, PIXEL_FORMAT_RGBA_8888, &sc, 0);
+ ASSERT_EQ(NO_INIT, err);
+}
+
TEST_F(SurfaceTest, QueuesToWindowComposerIsTrueWhenVisible) {
sp<ANativeWindow> anw(mSurface);
int result = -123;