1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.test 17 18 import android.app.Instrumentation 19 import android.graphics.Point 20 import android.provider.Settings 21 import android.tools.common.datatypes.Size 22 import android.tools.common.flicker.subject.layers.LayerSubject 23 import androidx.test.InstrumentationRegistry 24 import org.junit.After 25 import org.junit.Before 26 import org.junit.Rule 27 import org.junit.rules.TestName 28 import org.junit.runners.Parameterized 29 import kotlin.properties.Delegates 30 31 open class SurfaceViewBufferTestBase(val useBlastAdapter: Boolean) { 32 private var mInitialBlastConfig by Delegates.notNull<Boolean>() 33 34 val instrumentation: Instrumentation 35 get() = InstrumentationRegistry.getInstrumentation() 36 37 @get:Rule 38 var mName = TestName() 39 40 @Before 41 open fun setup() { 42 mInitialBlastConfig = getBlastAdapterSvEnabled() 43 setBlastAdapterSvEnabled(useBlastAdapter) 44 } 45 46 @After 47 open fun teardown() { 48 setBlastAdapterSvEnabled(mInitialBlastConfig) 49 } 50 51 private fun getBlastAdapterSvEnabled(): Boolean { 52 return Settings.Global.getInt(instrumentation.context.contentResolver, 53 "use_blast_adapter_sv", 0) != 0 54 } 55 56 private fun setBlastAdapterSvEnabled(enable: Boolean) { 57 Settings.Global.putInt(instrumentation.context.contentResolver, "use_blast_adapter_sv", 58 if (enable) 1 else 0) 59 } 60 61 companion object { 62 @JvmStatic 63 @Parameterized.Parameters(name = "blast={0}") 64 fun data(): Collection<Array<Any>> { 65 return listOf( 66 arrayOf(false), // First test: submit buffers via bufferqueue 67 arrayOf(true) // Second test: submit buffers via blast adapter 68 ) 69 } 70 71 const val R8G8B8A8_UNORM = 1 72 val defaultBufferSize = Point(640, 480) 73 74 fun LayerSubject.hasBufferSize(point: Point) = hasBufferSize(Size.from(point.x, point.y)) 75 76 fun LayerSubject.hasLayerSize(point: Point) = hasLayerSize(Size.from(point.x, point.y)) 77 78 // system/window.h definitions 79 enum class ScalingMode() { 80 FREEZE, // = 0 81 SCALE_TO_WINDOW, // =1 82 SCALE_CROP, // = 2 83 NO_SCALE_CROP // = 3 84 } 85 86 // system/window.h definitions 87 enum class Transform(val value: Int) { 88 /* flip source image horizontally */ 89 FLIP_H(1), 90 /* flip source image vertically */ 91 FLIP_V(2), 92 /* rotate source image 90 degrees clock-wise, and is applied after TRANSFORM_FLIP_{H|V} */ 93 ROT_90(4), 94 /* rotate source image 180 degrees */ 95 ROT_180(3), 96 /* rotate source image 270 degrees clock-wise */ 97 ROT_270(7), 98 /* transforms source by the inverse transform of the screen it is displayed onto. This 99 * transform is applied last */ 100 INVERSE_DISPLAY(0x08) 101 } 102 } 103 } 104