@@ -2699,4 +2699,57 @@ TEST_F(SurfaceTest, UnlimitedSlots_BatchOperations) {
26992699 EXPECT_EQ (128u , outputs.size ());
27002700}
27012701#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_UNLIMITED_SLOTS)
2702+
2703+ TEST_F (SurfaceTest, isBufferOwned) {
2704+ const int TEST_USAGE_FLAGS = GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_HW_RENDER;
2705+ auto [bufferItemConsumer, surface] = BufferItemConsumer::create (TEST_USAGE_FLAGS);
2706+
2707+ sp<SurfaceListener> listener = sp<StubSurfaceListener>::make ();
2708+ ASSERT_EQ (OK, surface->connect (NATIVE_WINDOW_API_CPU, listener));
2709+
2710+ sp<GraphicBuffer> surfaceAttachableBuffer =
2711+ sp<GraphicBuffer>::make (10 , 10 , PIXEL_FORMAT_RGBA_8888, 1 , TEST_USAGE_FLAGS);
2712+
2713+ //
2714+ // Attaching a buffer makes it owned.
2715+ //
2716+
2717+ bool isOwned;
2718+ EXPECT_EQ (OK, surface->isBufferOwned (surfaceAttachableBuffer, &isOwned));
2719+ EXPECT_FALSE (isOwned);
2720+
2721+ EXPECT_EQ (OK, surface->attachBuffer (surfaceAttachableBuffer.get ()));
2722+ EXPECT_EQ (OK, surface->isBufferOwned (surfaceAttachableBuffer, &isOwned));
2723+ EXPECT_TRUE (isOwned);
2724+
2725+ //
2726+ // A dequeued buffer is always owned.
2727+ //
2728+
2729+ sp<GraphicBuffer> buffer;
2730+ sp<Fence> fence;
2731+ EXPECT_EQ (OK, surface->dequeueBuffer (&buffer, &fence));
2732+ EXPECT_EQ (OK, surface->isBufferOwned (buffer, &isOwned));
2733+ EXPECT_TRUE (isOwned);
2734+
2735+ //
2736+ // A detached buffer is no longer owned.
2737+ //
2738+
2739+ EXPECT_EQ (OK, surface->detachBuffer (buffer));
2740+ EXPECT_EQ (OK, surface->isBufferOwned (buffer, &isOwned));
2741+ EXPECT_FALSE (isOwned);
2742+
2743+ //
2744+ // It's not currently possible to verify whether or not a consumer has attached a buffer until
2745+ // it shows up on the Surface.
2746+ //
2747+
2748+ sp<GraphicBuffer> consumerAttachableBuffer =
2749+ sp<GraphicBuffer>::make (10 , 10 , PIXEL_FORMAT_RGBA_8888, 1 , TEST_USAGE_FLAGS);
2750+
2751+ ASSERT_EQ (OK, bufferItemConsumer->attachBuffer (consumerAttachableBuffer));
2752+ EXPECT_EQ (OK, surface->isBufferOwned (consumerAttachableBuffer, &isOwned));
2753+ EXPECT_FALSE (isOwned);
2754+ }
27022755} // namespace android
0 commit comments