Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a1435cb6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "BlastBufferQueue: Add SurfaceView resize tests"

parents 7f7193e0 6d92d013
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
include /services/core/java/com/android/server/wm/OWNERS
 No newline at end of file
+24 −21
Original line number Diff line number Diff line
@@ -27,12 +27,13 @@ class BufferPresentationTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase
    @Test
    fun testQueueBuffers() {
        val numFrames = 100L
        val trace = withTrace {
        val trace = withTrace { activity ->
            for (i in 1..numFrames) {
                it.mSurfaceProxy.ANativeWindowLock()
                it.mSurfaceProxy.ANativeWindowUnlockAndPost()
                activity.mSurfaceProxy.ANativeWindowLock()
                activity.mSurfaceProxy.ANativeWindowUnlockAndPost()
            }
            assertEquals(0, it.mSurfaceProxy.waitUntilBufferDisplayed(numFrames, 1000 /* ms */))
            assertEquals(0, activity.mSurfaceProxy.waitUntilBufferDisplayed(numFrames,
                    1000 /* ms */))
        }

        assertThat(trace).hasFrameSequence("SurfaceView", 1..numFrames)
@@ -40,13 +41,13 @@ class BufferPresentationTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase

    @Test
    fun testSetBufferScalingMode_outOfOrderQueueBuffer() {
        val trace = withTrace {
            assertEquals(0, it.mSurfaceProxy.SurfaceDequeueBuffer(0, 1000 /* ms */))
            assertEquals(0, it.mSurfaceProxy.SurfaceDequeueBuffer(1, 1000 /* ms */))
        val trace = withTrace { activity ->
            assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(0, 1000 /* ms */))
            assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(1, 1000 /* ms */))

            it.mSurfaceProxy.SurfaceQueueBuffer(1)
            it.mSurfaceProxy.SurfaceQueueBuffer(0)
            assertEquals(0, it.mSurfaceProxy.waitUntilBufferDisplayed(2, 5000 /* ms */))
            activity.mSurfaceProxy.SurfaceQueueBuffer(1)
            activity.mSurfaceProxy.SurfaceQueueBuffer(0)
            assertEquals(0, activity.mSurfaceProxy.waitUntilBufferDisplayed(2, 5000 /* ms */))
        }

        assertThat(trace).hasFrameSequence("SurfaceView", 1..2L)
@@ -55,15 +56,16 @@ class BufferPresentationTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase
    @Test
    fun testSetBufferScalingMode_multipleDequeueBuffer() {
        val numFrames = 20L
        val trace = withTrace {
        val trace = withTrace { activity ->
            for (count in 1..(numFrames / 2)) {
                assertEquals(0, it.mSurfaceProxy.SurfaceDequeueBuffer(0, 1000 /* ms */))
                assertEquals(0, it.mSurfaceProxy.SurfaceDequeueBuffer(1, 1000 /* ms */))
                assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(0, 1000 /* ms */))
                assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(1, 1000 /* ms */))

                it.mSurfaceProxy.SurfaceQueueBuffer(0)
                it.mSurfaceProxy.SurfaceQueueBuffer(1)
                activity.mSurfaceProxy.SurfaceQueueBuffer(0)
                activity.mSurfaceProxy.SurfaceQueueBuffer(1)
            }
            assertEquals(0, it.mSurfaceProxy.waitUntilBufferDisplayed(numFrames, 5000 /* ms */))
            assertEquals(0, activity.mSurfaceProxy.waitUntilBufferDisplayed(numFrames,
                    5000 /* ms */))
        }

        assertThat(trace).hasFrameSequence("SurfaceView", 1..numFrames)
@@ -73,19 +75,20 @@ class BufferPresentationTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase
    fun testSetBufferCount_queueMaxBufferCountMinusOne() {
        val numBufferCount = 8
        val numFrames = numBufferCount * 5L
        val trace = withTrace {
            assertEquals(0, it.mSurfaceProxy.NativeWindowSetBufferCount(numBufferCount + 1))
        val trace = withTrace { activity ->
            assertEquals(0, activity.mSurfaceProxy.NativeWindowSetBufferCount(numBufferCount + 1))
            for (i in 1..numFrames / numBufferCount) {
                for (bufferSlot in 0..numBufferCount - 1) {
                    assertEquals(0,
                            it.mSurfaceProxy.SurfaceDequeueBuffer(bufferSlot, 1000 /* ms */))
                            activity.mSurfaceProxy.SurfaceDequeueBuffer(bufferSlot, 1000 /* ms */))
                }

                for (bufferSlot in 0..numBufferCount - 1) {
                    it.mSurfaceProxy.SurfaceQueueBuffer(bufferSlot)
                    activity.mSurfaceProxy.SurfaceQueueBuffer(bufferSlot)
                }
            }
            assertEquals(0, it.mSurfaceProxy.waitUntilBufferDisplayed(numFrames, 5000 /* ms */))
            assertEquals(0, activity.mSurfaceProxy.waitUntilBufferDisplayed(numFrames,
                    5000 /* ms */))
        }

        assertThat(trace).hasFrameSequence("SurfaceView", 1..numFrames)
+47 −46
Original line number Diff line number Diff line
@@ -28,20 +28,21 @@ import org.junit.runners.Parameterized
class BufferRejectionTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase(useBlastAdapter) {
    @Test
    fun testSetBuffersGeometry_0x0_rejectsBuffer() {
        val trace = withTrace {
            it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, 100, 100,
        val trace = withTrace { activity ->
            activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!, 100, 100,
                    R8G8B8A8_UNORM)
            activity.mSurfaceProxy.ANativeWindowLock()
            activity.mSurfaceProxy.ANativeWindowUnlockAndPost()
            activity.mSurfaceProxy.ANativeWindowLock()
            activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!, 0, 0,
                    R8G8B8A8_UNORM)
            it.mSurfaceProxy.ANativeWindowLock()
            it.mSurfaceProxy.ANativeWindowUnlockAndPost()
            it.mSurfaceProxy.ANativeWindowLock()
            it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, 0, 0, R8G8B8A8_UNORM)
            // Submit buffer one with a different size which should be rejected
            it.mSurfaceProxy.ANativeWindowUnlockAndPost()
            activity.mSurfaceProxy.ANativeWindowUnlockAndPost()

            // submit a buffer with the default buffer size
            it.mSurfaceProxy.ANativeWindowLock()
            it.mSurfaceProxy.ANativeWindowUnlockAndPost()
            it.mSurfaceProxy.waitUntilBufferDisplayed(3, 500 /* ms */)
            activity.mSurfaceProxy.ANativeWindowLock()
            activity.mSurfaceProxy.ANativeWindowUnlockAndPost()
            activity.mSurfaceProxy.waitUntilBufferDisplayed(3, 500 /* ms */)
        }
        // Verify we reject buffers since scaling mode == NATIVE_WINDOW_SCALING_MODE_FREEZE
        assertThat(trace).layer("SurfaceView", 2).doesNotExist()
@@ -61,22 +62,22 @@ class BufferRejectionTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase(us
    @Test
    fun testSetBufferScalingMode_freeze() {
        val bufferSize = Point(300, 200)
        val trace = withTrace {
            it.drawFrame()
            assertEquals(it.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */), 0)
            it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, bufferSize,
        val trace = withTrace { activity ->
            activity.drawFrame()
            assertEquals(activity.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */), 0)
            activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!, bufferSize,
                    R8G8B8A8_UNORM)
            assertEquals(0, it.mSurfaceProxy.SurfaceDequeueBuffer(0, 1000 /* ms */))
            assertEquals(0, it.mSurfaceProxy.SurfaceDequeueBuffer(1, 1000 /* ms */))
            assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(0, 1000 /* ms */))
            assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(1, 1000 /* ms */))
            // Change buffer size and set scaling mode to freeze
            it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, Point(0, 0),
            activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!, Point(0, 0),
                    R8G8B8A8_UNORM)

            // first dequeued buffer does not have the new size so it should be rejected.
            it.mSurfaceProxy.SurfaceQueueBuffer(0)
            it.mSurfaceProxy.SurfaceSetScalingMode(ScalingMode.SCALE_TO_WINDOW)
            it.mSurfaceProxy.SurfaceQueueBuffer(1)
            assertEquals(it.mSurfaceProxy.waitUntilBufferDisplayed(3, 500 /* ms */), 0)
            activity.mSurfaceProxy.SurfaceQueueBuffer(0)
            activity.mSurfaceProxy.SurfaceSetScalingMode(ScalingMode.SCALE_TO_WINDOW)
            activity.mSurfaceProxy.SurfaceQueueBuffer(1)
            assertEquals(activity.mSurfaceProxy.waitUntilBufferDisplayed(3, 500 /* ms */), 0)
        }

        // verify buffer size is reset to default buffer size
@@ -88,23 +89,23 @@ class BufferRejectionTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase(us
    @Test
    fun testSetBufferScalingMode_freeze_withBufferRotation() {
        val rotatedBufferSize = Point(defaultBufferSize.y, defaultBufferSize.x)
        val trace = withTrace {
            it.drawFrame()
            assertEquals(it.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */), 0)
            it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, rotatedBufferSize,
                    R8G8B8A8_UNORM)
            assertEquals(0, it.mSurfaceProxy.SurfaceDequeueBuffer(0, 1000 /* ms */))
            assertEquals(0, it.mSurfaceProxy.SurfaceDequeueBuffer(1, 1000 /* ms */))
        val trace = withTrace { activity ->
            activity.drawFrame()
            assertEquals(activity.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */), 0)
            activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!,
                    rotatedBufferSize, R8G8B8A8_UNORM)
            assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(0, 1000 /* ms */))
            assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(1, 1000 /* ms */))
            // Change buffer size and set scaling mode to freeze
            it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, Point(0, 0),
            activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!, Point(0, 0),
                    R8G8B8A8_UNORM)

            // first dequeued buffer does not have the new size so it should be rejected.
            it.mSurfaceProxy.SurfaceQueueBuffer(0)
            activity.mSurfaceProxy.SurfaceQueueBuffer(0)
            // add a buffer transform so the buffer size is correct.
            it.mSurfaceProxy.ANativeWindowSetBuffersTransform(Transform.ROT_90)
            it.mSurfaceProxy.SurfaceQueueBuffer(1)
            assertEquals(it.mSurfaceProxy.waitUntilBufferDisplayed(3, 500 /* ms */), 0)
            activity.mSurfaceProxy.ANativeWindowSetBuffersTransform(Transform.ROT_90)
            activity.mSurfaceProxy.SurfaceQueueBuffer(1)
            assertEquals(activity.mSurfaceProxy.waitUntilBufferDisplayed(3, 500 /* ms */), 0)
        }

        // verify buffer size is reset to default buffer size
@@ -117,24 +118,24 @@ class BufferRejectionTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase(us
    @Test
    fun testRejectedBuffersAreReleased() {
        val bufferSize = Point(300, 200)
        val trace = withTrace {
        val trace = withTrace { activity ->
            for (count in 0 until 5) {
                it.drawFrame()
                assertEquals(it.mSurfaceProxy.waitUntilBufferDisplayed((count * 3) + 1L,
                activity.drawFrame()
                assertEquals(activity.mSurfaceProxy.waitUntilBufferDisplayed((count * 3) + 1L,
                        500 /* ms */), 0)
                it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, bufferSize,
                        R8G8B8A8_UNORM)
                assertEquals(0, it.mSurfaceProxy.SurfaceDequeueBuffer(0, 1000 /* ms */))
                assertEquals(0, it.mSurfaceProxy.SurfaceDequeueBuffer(1, 1000 /* ms */))
                activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!,
                        bufferSize, R8G8B8A8_UNORM)
                assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(0, 1000 /* ms */))
                assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(1, 1000 /* ms */))
                // Change buffer size and set scaling mode to freeze
                it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, Point(0, 0),
                        R8G8B8A8_UNORM)
                activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!,
                        Point(0, 0), R8G8B8A8_UNORM)

                // first dequeued buffer does not have the new size so it should be rejected.
                it.mSurfaceProxy.SurfaceQueueBuffer(0)
                it.mSurfaceProxy.SurfaceSetScalingMode(ScalingMode.SCALE_TO_WINDOW)
                it.mSurfaceProxy.SurfaceQueueBuffer(1)
                assertEquals(it.mSurfaceProxy.waitUntilBufferDisplayed((count * 3) + 3L,
                activity.mSurfaceProxy.SurfaceQueueBuffer(0)
                activity.mSurfaceProxy.SurfaceSetScalingMode(ScalingMode.SCALE_TO_WINDOW)
                activity.mSurfaceProxy.SurfaceQueueBuffer(1)
                assertEquals(activity.mSurfaceProxy.waitUntilBufferDisplayed((count * 3) + 3L,
                        500 /* ms */), 0)
            }
        }
+131 −29
Original line number Diff line number Diff line
@@ -15,25 +15,31 @@
 */
package com.android.test

import android.graphics.Color
import android.graphics.Point
import android.graphics.Rect
import android.os.SystemClock
import com.android.server.wm.flicker.traces.layers.LayersTraceSubject.Companion.assertThat
import com.android.test.SurfaceViewBufferTestBase.Companion.ScalingMode
import com.android.test.SurfaceViewBufferTestBase.Companion.Transform
import junit.framework.Assert.assertEquals
import junit.framework.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit

@RunWith(Parameterized::class)
class GeometryTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase(useBlastAdapter) {
    @Test
    fun testSetBuffersGeometry_0x0_resetsBufferSize() {
        val trace = withTrace {
            it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, 0, 0,
        val trace = withTrace { activity ->
            activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!, 0, 0,
                    R8G8B8A8_UNORM)
            it.mSurfaceProxy.ANativeWindowLock()
            it.mSurfaceProxy.ANativeWindowUnlockAndPost()
            it.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */)
            activity.mSurfaceProxy.ANativeWindowLock()
            activity.mSurfaceProxy.ANativeWindowUnlockAndPost()
            activity.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */)
        }

        // verify buffer size is reset to default buffer size
@@ -43,11 +49,11 @@ class GeometryTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase(useBlastA
    @Test
    fun testSetBuffersGeometry_smallerThanBuffer() {
        val bufferSize = Point(300, 200)
        val trace = withTrace {
            it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, bufferSize,
        val trace = withTrace { activity ->
            activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!, bufferSize,
                    R8G8B8A8_UNORM)
            it.drawFrame()
            it.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */)
            activity.drawFrame()
            activity.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */)
        }

        assertThat(trace).layer("SurfaceView", 1).also {
@@ -60,11 +66,11 @@ class GeometryTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase(useBlastA
    @Test
    fun testSetBuffersGeometry_largerThanBuffer() {
        val bufferSize = Point(3000, 2000)
        val trace = withTrace {
            it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, bufferSize,
        val trace = withTrace { activity ->
            activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!, bufferSize,
                    R8G8B8A8_UNORM)
            it.drawFrame()
            it.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */)
            activity.drawFrame()
            activity.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */)
        }

        assertThat(trace).layer("SurfaceView", 1).also {
@@ -77,22 +83,22 @@ class GeometryTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase(useBlastA
    @Test
    fun testSetBufferScalingMode_freeze() {
        val bufferSize = Point(300, 200)
        val trace = withTrace {
            it.drawFrame()
            assertEquals(it.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */), 0)
            it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, bufferSize,
        val trace = withTrace { activity ->
            activity.drawFrame()
            assertEquals(activity.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */), 0)
            activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!, bufferSize,
                    R8G8B8A8_UNORM)
            assertEquals(0, it.mSurfaceProxy.SurfaceDequeueBuffer(0, 1000 /* ms */))
            assertEquals(0, it.mSurfaceProxy.SurfaceDequeueBuffer(1, 1000 /* ms */))
            assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(0, 1000 /* ms */))
            assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(1, 1000 /* ms */))
            // Change buffer size and set scaling mode to freeze
            it.mSurfaceProxy.ANativeWindowSetBuffersGeometry(it.surface!!, Point(0, 0),
            activity.mSurfaceProxy.ANativeWindowSetBuffersGeometry(activity.surface!!, Point(0, 0),
                    R8G8B8A8_UNORM)

            // first dequeued buffer does not have the new size so it should be rejected.
            it.mSurfaceProxy.SurfaceQueueBuffer(0)
            it.mSurfaceProxy.SurfaceSetScalingMode(ScalingMode.SCALE_TO_WINDOW)
            it.mSurfaceProxy.SurfaceQueueBuffer(1)
            assertEquals(it.mSurfaceProxy.waitUntilBufferDisplayed(3, 500 /* ms */), 0)
            activity.mSurfaceProxy.SurfaceQueueBuffer(0)
            activity.mSurfaceProxy.SurfaceSetScalingMode(ScalingMode.SCALE_TO_WINDOW)
            activity.mSurfaceProxy.SurfaceQueueBuffer(1)
            assertEquals(activity.mSurfaceProxy.waitUntilBufferDisplayed(3, 500 /* ms */), 0)
        }

        // verify buffer size is reset to default buffer size
@@ -105,11 +111,11 @@ class GeometryTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase(useBlastA
    fun testSetBuffersTransform_FLIP() {
        val transforms = arrayOf(Transform.FLIP_H, Transform.FLIP_V, Transform.ROT_180).withIndex()
        for ((index, transform) in transforms) {
            val trace = withTrace {
                it.mSurfaceProxy.ANativeWindowSetBuffersTransform(transform)
                it.mSurfaceProxy.ANativeWindowLock()
                it.mSurfaceProxy.ANativeWindowUnlockAndPost()
                it.mSurfaceProxy.waitUntilBufferDisplayed(index + 1L, 500 /* ms */)
            val trace = withTrace { activity ->
                activity.mSurfaceProxy.ANativeWindowSetBuffersTransform(transform)
                activity.mSurfaceProxy.ANativeWindowLock()
                activity.mSurfaceProxy.ANativeWindowUnlockAndPost()
                activity.mSurfaceProxy.waitUntilBufferDisplayed(index + 1L, 500 /* ms */)
            }

            assertThat(trace).layer("SurfaceView", index + 1L).also {
@@ -119,4 +125,100 @@ class GeometryTests(useBlastAdapter: Boolean) : SurfaceTracingTestBase(useBlastA
            }
        }
    }

    @Test
    fun testSurfaceViewResizeImmediatelyWithNonFreezeScaling() {
        val surfaceViewPosition = Rect()
        var trace = withTrace { activity ->
            activity.mSurfaceProxy.SurfaceSetScalingMode(ScalingMode.SCALE_TO_WINDOW)
            assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(0, 1 /* ms */))
            activity.mSurfaceProxy.drawBuffer(0, Color.BLUE)
            activity.mSurfaceProxy.SurfaceQueueBuffer(0)
            activity.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */)
            activity.mSurfaceView!!.getBoundsOnScreen(surfaceViewPosition)
        }

        runOnUiThread {
            val svBounds = Rect(0, 0, defaultBufferSize.x, defaultBufferSize.y)
            svBounds.offsetTo(surfaceViewPosition.left, surfaceViewPosition.top)
            checkPixels(svBounds, Color.BLUE)
        }

        // check that the layer and buffer starts with the default size
        assertThat(trace).layer("SurfaceView", 1).also {
            it.hasBufferSize(defaultBufferSize)
            it.hasLayerSize(defaultBufferSize)
        }
        val newSize = Point(1280, 960)
        lateinit var resizeCountDownLatch: CountDownLatch
        runOnUiThread {
            resizeCountDownLatch = it.resizeSurfaceView(newSize)
        }
        assertTrue(resizeCountDownLatch.await(1000, TimeUnit.MILLISECONDS))
        // wait for sf to handle the resize transaction request
        SystemClock.sleep(500)
        trace = withTrace { _ ->
            // take a trace with the new size
        }

        // check that the layer size has changed and the buffer is now streched to the new layer
        // size
        runOnUiThread {
            val svBounds = Rect(0, 0, newSize.x, newSize.y)
            svBounds.offsetTo(surfaceViewPosition.left, surfaceViewPosition.top)
            checkPixels(svBounds, Color.BLUE)
        }

        assertThat(trace).layer("SurfaceView", 1).also {
            it.hasLayerSize(newSize)
            it.hasBufferSize(defaultBufferSize)
        }
    }

    @Test
    fun testSurfaceViewDoesNotResizeWithDefaultScaling() {
        val surfaceViewPosition = Rect()
        var trace = withTrace { activity ->
            assertEquals(0, activity.mSurfaceProxy.SurfaceDequeueBuffer(0, 1 /* ms */))
            activity.mSurfaceProxy.drawBuffer(0, Color.BLUE)
            activity.mSurfaceProxy.SurfaceQueueBuffer(0)
            activity.mSurfaceProxy.waitUntilBufferDisplayed(1, 500 /* ms */)
            activity.mSurfaceView!!.getBoundsOnScreen(surfaceViewPosition)
        }

        runOnUiThread {
            val svBounds = Rect(0, 0, defaultBufferSize.x, defaultBufferSize.y)
            svBounds.offsetTo(surfaceViewPosition.left, surfaceViewPosition.top)
            checkPixels(svBounds, Color.BLUE)
        }

        // check that the layer and buffer starts with the default size
        assertThat(trace).layer("SurfaceView", 1).also {
            it.hasBufferSize(defaultBufferSize)
            it.hasLayerSize(defaultBufferSize)
        }
        val newSize = Point(1280, 960)
        lateinit var resizeCountDownLatch: CountDownLatch
        runOnUiThread {
            resizeCountDownLatch = it.resizeSurfaceView(newSize)
        }
        assertTrue(resizeCountDownLatch.await(1000, TimeUnit.MILLISECONDS))
        // wait for sf to handle the resize transaction request
        SystemClock.sleep(500)
        trace = withTrace { _ ->
            // take a trace after the size change
        }

        // check the layer and buffer remains the same size
        runOnUiThread {
            val svBounds = Rect(0, 0, defaultBufferSize.x, defaultBufferSize.y)
            svBounds.offsetTo(surfaceViewPosition.left, surfaceViewPosition.top)
            checkPixels(svBounds, Color.BLUE)
        }

        assertThat(trace).layer("SurfaceView", 1).also {
            it.hasLayerSize(defaultBufferSize)
            it.hasBufferSize(defaultBufferSize)
        }
    }
}
 No newline at end of file
+15 −15

File changed.

Preview size limit exceeded, changes collapsed.

Loading