Loading libs/gui/SurfaceComposerClient.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -2640,6 +2640,9 @@ void SurfaceComposerClient::onFirstRef() { if (status.isOk() && conn != nullptr) { mClient = conn; mStatus = NO_ERROR; } else { ALOGE("SurfaceComposerClient::onFirstRef unable to create client connection, error: %s", status.toString8().c_str()); } } } Loading libs/gui/tests/Surface_test.cpp +45 −40 Original line number Diff line number Diff line Loading @@ -129,34 +129,6 @@ private: class SurfaceTest : public ::testing::Test { protected: SurfaceTest() { ProcessState::self()->startThreadPool(); } virtual void SetUp() { mComposerClient = sp<SurfaceComposerClient>::make(); ASSERT_EQ(NO_ERROR, mComposerClient->initCheck()); // TODO(brianderson): The following sometimes fails and is a source of // test flakiness. mSurfaceControl = mComposerClient->createSurface( String8("Test Surface"), 32, 32, PIXEL_FORMAT_RGBA_8888, 0); SurfaceComposerClient::Transaction().apply(true); ASSERT_TRUE(mSurfaceControl != nullptr); ASSERT_TRUE(mSurfaceControl->isValid()); Transaction t; ASSERT_EQ(NO_ERROR, t.setLayer(mSurfaceControl, 0x7fffffff).show(mSurfaceControl).apply()); mSurface = mSurfaceControl->getSurface(); ASSERT_TRUE(mSurface != nullptr); } virtual void TearDown() { mComposerClient->dispose(); } void testSurfaceListener(bool hasSurfaceListener, bool enableReleasedCb, int32_t extraDiscardedBuffers) { sp<IGraphicBufferProducer> producer; Loading Loading @@ -237,13 +209,46 @@ protected: // Disconnect the surface ASSERT_EQ(NO_ERROR, surface->disconnect(NATIVE_WINDOW_API_CPU)); } }; class SurfaceComposerSurfaceTest : public SurfaceTest { protected: SurfaceComposerSurfaceTest() { ProcessState::self()->startThreadPool(); } virtual void SetUp() override { SurfaceTest::SetUp(); mComposerClient = sp<SurfaceComposerClient>::make(); ASSERT_EQ(NO_ERROR, mComposerClient->initCheck()); // TODO(brianderson): The following sometimes fails and is a source of // test flakiness. mSurfaceControl = mComposerClient->createSurface(String8("Test Surface"), 32, 32, PIXEL_FORMAT_RGBA_8888, 0); SurfaceComposerClient::Transaction().apply(true); ASSERT_TRUE(mSurfaceControl != nullptr); ASSERT_TRUE(mSurfaceControl->isValid()); Transaction t; ASSERT_EQ(NO_ERROR, t.setLayer(mSurfaceControl, 0x7fffffff).show(mSurfaceControl).apply()); mSurface = mSurfaceControl->getSurface(); ASSERT_TRUE(mSurface != nullptr); } virtual void TearDown() { SurfaceTest::TearDown(); mComposerClient->dispose(); } sp<Surface> mSurface; sp<SurfaceComposerClient> mComposerClient; sp<SurfaceControl> mSurfaceControl; }; TEST_F(SurfaceTest, CreateSurfaceReturnsErrorBadClient) { TEST_F(SurfaceComposerSurfaceTest, CreateSurfaceReturnsErrorBadClient) { mComposerClient->dispose(); ASSERT_EQ(NO_INIT, mComposerClient->initCheck()); Loading @@ -253,7 +258,7 @@ TEST_F(SurfaceTest, CreateSurfaceReturnsErrorBadClient) { ASSERT_EQ(NO_INIT, err); } TEST_F(SurfaceTest, QueuesToWindowComposerIsTrueWhenVisible) { TEST_F(SurfaceComposerSurfaceTest, QueuesToWindowComposerIsTrueWhenVisible) { sp<ANativeWindow> anw(mSurface); int result = -123; int err = anw->query(anw.get(), NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER, Loading @@ -262,7 +267,7 @@ TEST_F(SurfaceTest, QueuesToWindowComposerIsTrueWhenVisible) { EXPECT_EQ(1, result); } TEST_F(SurfaceTest, QueuesToWindowComposerIsTrueWhenPurgatorized) { TEST_F(SurfaceComposerSurfaceTest, QueuesToWindowComposerIsTrueWhenPurgatorized) { mSurfaceControl.clear(); // Wait for the async clean-up to complete. std::this_thread::sleep_for(50ms); Loading @@ -275,7 +280,7 @@ TEST_F(SurfaceTest, QueuesToWindowComposerIsTrueWhenPurgatorized) { EXPECT_EQ(1, result); } TEST_F(SurfaceTest, ConcreteTypeIsSurface) { TEST_F(SurfaceComposerSurfaceTest, ConcreteTypeIsSurface) { sp<ANativeWindow> anw(mSurface); int result = -123; int err = anw->query(anw.get(), NATIVE_WINDOW_CONCRETE_TYPE, &result); Loading @@ -283,7 +288,7 @@ TEST_F(SurfaceTest, ConcreteTypeIsSurface) { EXPECT_EQ(NATIVE_WINDOW_SURFACE, result); } TEST_F(SurfaceTest, LayerCountIsOne) { TEST_F(SurfaceComposerSurfaceTest, LayerCountIsOne) { sp<ANativeWindow> anw(mSurface); int result = -123; int err = anw->query(anw.get(), NATIVE_WINDOW_LAYER_COUNT, &result); Loading @@ -291,7 +296,7 @@ TEST_F(SurfaceTest, LayerCountIsOne) { EXPECT_EQ(1, result); } TEST_F(SurfaceTest, QueryConsumerUsage) { TEST_F(SurfaceComposerSurfaceTest, QueryConsumerUsage) { const int TEST_USAGE_FLAGS = GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_HW_RENDER; auto [c, s] = BufferItemConsumer::create(TEST_USAGE_FLAGS); Loading @@ -304,7 +309,7 @@ TEST_F(SurfaceTest, QueryConsumerUsage) { ASSERT_EQ(TEST_USAGE_FLAGS, flags); } TEST_F(SurfaceTest, QueryDefaultBuffersDataSpace) { TEST_F(SurfaceComposerSurfaceTest, QueryDefaultBuffersDataSpace) { const android_dataspace TEST_DATASPACE = HAL_DATASPACE_V0_SRGB; auto [cpuConsumer, s] = CpuConsumer::create(1); Loading Loading @@ -582,7 +587,7 @@ TEST_F(SurfaceTest, SurfaceListenerTest) { testSurfaceListener(/*hasListener*/true, /*enableReleasedCb*/true, /*extraDiscardedBuffers*/2); } TEST_F(SurfaceTest, TestGetLastDequeueStartTime) { TEST_F(SurfaceComposerSurfaceTest, TestGetLastDequeueStartTime) { sp<ANativeWindow> anw(mSurface); ASSERT_EQ(NO_ERROR, native_window_api_connect(anw.get(), NATIVE_WINDOW_API_CPU)); Loading @@ -598,7 +603,7 @@ TEST_F(SurfaceTest, TestGetLastDequeueStartTime) { ASSERT_GE(after, lastDequeueTime); } TEST_F(SurfaceTest, SurfaceIsForCursor) { TEST_F(SurfaceComposerSurfaceTest, SurfaceIsForCursor) { sp<SurfaceControl> control; ASSERT_EQ(NO_ERROR, mComposerClient->createSurfaceChecked(String8("Test Surface"), 32, 32, Loading Loading
libs/gui/SurfaceComposerClient.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -2640,6 +2640,9 @@ void SurfaceComposerClient::onFirstRef() { if (status.isOk() && conn != nullptr) { mClient = conn; mStatus = NO_ERROR; } else { ALOGE("SurfaceComposerClient::onFirstRef unable to create client connection, error: %s", status.toString8().c_str()); } } } Loading
libs/gui/tests/Surface_test.cpp +45 −40 Original line number Diff line number Diff line Loading @@ -129,34 +129,6 @@ private: class SurfaceTest : public ::testing::Test { protected: SurfaceTest() { ProcessState::self()->startThreadPool(); } virtual void SetUp() { mComposerClient = sp<SurfaceComposerClient>::make(); ASSERT_EQ(NO_ERROR, mComposerClient->initCheck()); // TODO(brianderson): The following sometimes fails and is a source of // test flakiness. mSurfaceControl = mComposerClient->createSurface( String8("Test Surface"), 32, 32, PIXEL_FORMAT_RGBA_8888, 0); SurfaceComposerClient::Transaction().apply(true); ASSERT_TRUE(mSurfaceControl != nullptr); ASSERT_TRUE(mSurfaceControl->isValid()); Transaction t; ASSERT_EQ(NO_ERROR, t.setLayer(mSurfaceControl, 0x7fffffff).show(mSurfaceControl).apply()); mSurface = mSurfaceControl->getSurface(); ASSERT_TRUE(mSurface != nullptr); } virtual void TearDown() { mComposerClient->dispose(); } void testSurfaceListener(bool hasSurfaceListener, bool enableReleasedCb, int32_t extraDiscardedBuffers) { sp<IGraphicBufferProducer> producer; Loading Loading @@ -237,13 +209,46 @@ protected: // Disconnect the surface ASSERT_EQ(NO_ERROR, surface->disconnect(NATIVE_WINDOW_API_CPU)); } }; class SurfaceComposerSurfaceTest : public SurfaceTest { protected: SurfaceComposerSurfaceTest() { ProcessState::self()->startThreadPool(); } virtual void SetUp() override { SurfaceTest::SetUp(); mComposerClient = sp<SurfaceComposerClient>::make(); ASSERT_EQ(NO_ERROR, mComposerClient->initCheck()); // TODO(brianderson): The following sometimes fails and is a source of // test flakiness. mSurfaceControl = mComposerClient->createSurface(String8("Test Surface"), 32, 32, PIXEL_FORMAT_RGBA_8888, 0); SurfaceComposerClient::Transaction().apply(true); ASSERT_TRUE(mSurfaceControl != nullptr); ASSERT_TRUE(mSurfaceControl->isValid()); Transaction t; ASSERT_EQ(NO_ERROR, t.setLayer(mSurfaceControl, 0x7fffffff).show(mSurfaceControl).apply()); mSurface = mSurfaceControl->getSurface(); ASSERT_TRUE(mSurface != nullptr); } virtual void TearDown() { SurfaceTest::TearDown(); mComposerClient->dispose(); } sp<Surface> mSurface; sp<SurfaceComposerClient> mComposerClient; sp<SurfaceControl> mSurfaceControl; }; TEST_F(SurfaceTest, CreateSurfaceReturnsErrorBadClient) { TEST_F(SurfaceComposerSurfaceTest, CreateSurfaceReturnsErrorBadClient) { mComposerClient->dispose(); ASSERT_EQ(NO_INIT, mComposerClient->initCheck()); Loading @@ -253,7 +258,7 @@ TEST_F(SurfaceTest, CreateSurfaceReturnsErrorBadClient) { ASSERT_EQ(NO_INIT, err); } TEST_F(SurfaceTest, QueuesToWindowComposerIsTrueWhenVisible) { TEST_F(SurfaceComposerSurfaceTest, QueuesToWindowComposerIsTrueWhenVisible) { sp<ANativeWindow> anw(mSurface); int result = -123; int err = anw->query(anw.get(), NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER, Loading @@ -262,7 +267,7 @@ TEST_F(SurfaceTest, QueuesToWindowComposerIsTrueWhenVisible) { EXPECT_EQ(1, result); } TEST_F(SurfaceTest, QueuesToWindowComposerIsTrueWhenPurgatorized) { TEST_F(SurfaceComposerSurfaceTest, QueuesToWindowComposerIsTrueWhenPurgatorized) { mSurfaceControl.clear(); // Wait for the async clean-up to complete. std::this_thread::sleep_for(50ms); Loading @@ -275,7 +280,7 @@ TEST_F(SurfaceTest, QueuesToWindowComposerIsTrueWhenPurgatorized) { EXPECT_EQ(1, result); } TEST_F(SurfaceTest, ConcreteTypeIsSurface) { TEST_F(SurfaceComposerSurfaceTest, ConcreteTypeIsSurface) { sp<ANativeWindow> anw(mSurface); int result = -123; int err = anw->query(anw.get(), NATIVE_WINDOW_CONCRETE_TYPE, &result); Loading @@ -283,7 +288,7 @@ TEST_F(SurfaceTest, ConcreteTypeIsSurface) { EXPECT_EQ(NATIVE_WINDOW_SURFACE, result); } TEST_F(SurfaceTest, LayerCountIsOne) { TEST_F(SurfaceComposerSurfaceTest, LayerCountIsOne) { sp<ANativeWindow> anw(mSurface); int result = -123; int err = anw->query(anw.get(), NATIVE_WINDOW_LAYER_COUNT, &result); Loading @@ -291,7 +296,7 @@ TEST_F(SurfaceTest, LayerCountIsOne) { EXPECT_EQ(1, result); } TEST_F(SurfaceTest, QueryConsumerUsage) { TEST_F(SurfaceComposerSurfaceTest, QueryConsumerUsage) { const int TEST_USAGE_FLAGS = GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_HW_RENDER; auto [c, s] = BufferItemConsumer::create(TEST_USAGE_FLAGS); Loading @@ -304,7 +309,7 @@ TEST_F(SurfaceTest, QueryConsumerUsage) { ASSERT_EQ(TEST_USAGE_FLAGS, flags); } TEST_F(SurfaceTest, QueryDefaultBuffersDataSpace) { TEST_F(SurfaceComposerSurfaceTest, QueryDefaultBuffersDataSpace) { const android_dataspace TEST_DATASPACE = HAL_DATASPACE_V0_SRGB; auto [cpuConsumer, s] = CpuConsumer::create(1); Loading Loading @@ -582,7 +587,7 @@ TEST_F(SurfaceTest, SurfaceListenerTest) { testSurfaceListener(/*hasListener*/true, /*enableReleasedCb*/true, /*extraDiscardedBuffers*/2); } TEST_F(SurfaceTest, TestGetLastDequeueStartTime) { TEST_F(SurfaceComposerSurfaceTest, TestGetLastDequeueStartTime) { sp<ANativeWindow> anw(mSurface); ASSERT_EQ(NO_ERROR, native_window_api_connect(anw.get(), NATIVE_WINDOW_API_CPU)); Loading @@ -598,7 +603,7 @@ TEST_F(SurfaceTest, TestGetLastDequeueStartTime) { ASSERT_GE(after, lastDequeueTime); } TEST_F(SurfaceTest, SurfaceIsForCursor) { TEST_F(SurfaceComposerSurfaceTest, SurfaceIsForCursor) { sp<SurfaceControl> control; ASSERT_EQ(NO_ERROR, mComposerClient->createSurfaceChecked(String8("Test Surface"), 32, 32, Loading