diff options
| author | 2020-06-22 18:41:12 +0000 | |
|---|---|---|
| committer | 2020-06-22 18:41:12 +0000 | |
| commit | 4524ce518978310b58ccb13c1fc7438f7c71819c (patch) | |
| tree | 4fa5558630acd673abe939a22bdceb88b5e674a0 | |
| parent | c8f2d9717489bb64955dd7ea809bc9e6e2814d0a (diff) | |
| parent | 74c9cc3112a172d9d637d12e5e257e60c11ba956 (diff) | |
Merge "libgui: align the Surface default mMaxBufferCount value with BufferQueue" into rvc-dev
| -rw-r--r-- | libs/gui/Surface.cpp | 3 | ||||
| -rw-r--r-- | libs/gui/tests/Surface_test.cpp | 26 |
2 files changed, 28 insertions, 1 deletions
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index 2bf8ff7581..cf269b33ba 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -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() { @@ -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; diff --git a/libs/gui/tests/Surface_test.cpp b/libs/gui/tests/Surface_test.cpp index c2b4ef93aa..9906166c67 100644 --- a/libs/gui/tests/Surface_test.cpp +++ b/libs/gui/tests/Surface_test.cpp @@ -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> @@ -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 |