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;