Loading libs/gui/Surface.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -110,7 +110,7 @@ Surface::Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controll mConnectedToCpu = false; mProducerControlledByApp = controlledByApp; mSwapIntervalZero = false; mMaxBufferCount = 0; mMaxBufferCount = NUM_BUFFER_SLOTS; } Surface::~Surface() { Loading Loading @@ -1585,6 +1585,7 @@ int Surface::disconnect(int api, IGraphicBufferProducer::DisconnectMode mode) { mStickyTransform = 0; mAutoPrerotation = false; mEnableFrameTimestamps = false; mMaxBufferCount = NUM_BUFFER_SLOTS; if (api == NATIVE_WINDOW_API_CPU) { mConnectedToCpu = false; Loading libs/gui/tests/Surface_test.cpp +26 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <gui/SurfaceComposerClient.h> #include <inttypes.h> #include <private/gui/ComposerService.h> #include <ui/BufferQueueDefs.h> #include <ui/Rect.h> #include <utils/String8.h> Loading Loading @@ -1974,4 +1975,29 @@ TEST_F(SurfaceTest, DequeueWithConsumerDrivenSize) { ASSERT_EQ(NO_ERROR, window->cancelBuffer(window.get(), buffer, fence)); } TEST_F(SurfaceTest, DefaultMaxBufferCountSetAndUpdated) { sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); sp<DummyConsumer> dummyConsumer(new DummyConsumer); consumer->consumerConnect(dummyConsumer, false); sp<Surface> surface = new Surface(producer); sp<ANativeWindow> window(surface); int count = -1; ASSERT_EQ(NO_ERROR, window->query(window.get(), NATIVE_WINDOW_MAX_BUFFER_COUNT, &count)); EXPECT_EQ(BufferQueueDefs::NUM_BUFFER_SLOTS, count); consumer->setMaxBufferCount(10); ASSERT_EQ(NO_ERROR, native_window_api_connect(window.get(), NATIVE_WINDOW_API_CPU)); EXPECT_EQ(NO_ERROR, window->query(window.get(), NATIVE_WINDOW_MAX_BUFFER_COUNT, &count)); EXPECT_EQ(10, count); ASSERT_EQ(NO_ERROR, native_window_api_disconnect(window.get(), NATIVE_WINDOW_API_CPU)); ASSERT_EQ(NO_ERROR, window->query(window.get(), NATIVE_WINDOW_MAX_BUFFER_COUNT, &count)); EXPECT_EQ(BufferQueueDefs::NUM_BUFFER_SLOTS, count); } } // namespace android Loading
libs/gui/Surface.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -110,7 +110,7 @@ Surface::Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controll mConnectedToCpu = false; mProducerControlledByApp = controlledByApp; mSwapIntervalZero = false; mMaxBufferCount = 0; mMaxBufferCount = NUM_BUFFER_SLOTS; } Surface::~Surface() { Loading Loading @@ -1585,6 +1585,7 @@ int Surface::disconnect(int api, IGraphicBufferProducer::DisconnectMode mode) { mStickyTransform = 0; mAutoPrerotation = false; mEnableFrameTimestamps = false; mMaxBufferCount = NUM_BUFFER_SLOTS; if (api == NATIVE_WINDOW_API_CPU) { mConnectedToCpu = false; Loading
libs/gui/tests/Surface_test.cpp +26 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <gui/SurfaceComposerClient.h> #include <inttypes.h> #include <private/gui/ComposerService.h> #include <ui/BufferQueueDefs.h> #include <ui/Rect.h> #include <utils/String8.h> Loading Loading @@ -1974,4 +1975,29 @@ TEST_F(SurfaceTest, DequeueWithConsumerDrivenSize) { ASSERT_EQ(NO_ERROR, window->cancelBuffer(window.get(), buffer, fence)); } TEST_F(SurfaceTest, DefaultMaxBufferCountSetAndUpdated) { sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); sp<DummyConsumer> dummyConsumer(new DummyConsumer); consumer->consumerConnect(dummyConsumer, false); sp<Surface> surface = new Surface(producer); sp<ANativeWindow> window(surface); int count = -1; ASSERT_EQ(NO_ERROR, window->query(window.get(), NATIVE_WINDOW_MAX_BUFFER_COUNT, &count)); EXPECT_EQ(BufferQueueDefs::NUM_BUFFER_SLOTS, count); consumer->setMaxBufferCount(10); ASSERT_EQ(NO_ERROR, native_window_api_connect(window.get(), NATIVE_WINDOW_API_CPU)); EXPECT_EQ(NO_ERROR, window->query(window.get(), NATIVE_WINDOW_MAX_BUFFER_COUNT, &count)); EXPECT_EQ(10, count); ASSERT_EQ(NO_ERROR, native_window_api_disconnect(window.get(), NATIVE_WINDOW_API_CPU)); ASSERT_EQ(NO_ERROR, window->query(window.get(), NATIVE_WINDOW_MAX_BUFFER_COUNT, &count)); EXPECT_EQ(BufferQueueDefs::NUM_BUFFER_SLOTS, count); } } // namespace android