1 /* 2 * Copyright (C) 2016 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 17 package android.renderscript.cts; 18 19 import java.nio.ByteBuffer; 20 import java.util.Random; 21 22 import android.renderscript.Allocation; 23 import android.renderscript.Element; 24 import android.renderscript.Element.DataType; 25 import android.renderscript.RSIllegalArgumentException; 26 import android.renderscript.Type; 27 28 import android.util.Log; 29 import android.view.Surface; 30 31 public class AllocationCreateAllocationsTest extends RSBaseCompute { 32 private int dimX = 1920; 33 private int dimY = 1080; 34 private final int MAX_NUM_IO_ALLOC = 16; 35 createAllocationsHelper(int usage, int numAlloc)36 Allocation[] createAllocationsHelper(int usage, int numAlloc) { 37 Element e = Element.U8_4(mRS); 38 Type t = Type.createXY(mRS, e, dimX, dimY); 39 return Allocation.createAllocations(mRS, t, usage, numAlloc); 40 } 41 testCreateAllocations()42 public void testCreateAllocations() { 43 int usage = Allocation.USAGE_SCRIPT; 44 45 int numAlloc = MAX_NUM_IO_ALLOC + 1; 46 Allocation[] allocArray; 47 allocArray = createAllocationsHelper(usage, numAlloc); 48 assertTrue("failed to create AllocationQueue", allocArray != null); 49 for (Allocation a : allocArray) { 50 a.destroy(); 51 } 52 } 53 testCreateAllocations_USAGE_IO_INPUT()54 public void testCreateAllocations_USAGE_IO_INPUT() { 55 int usage = Allocation.USAGE_IO_INPUT; 56 57 int numAlloc = MAX_NUM_IO_ALLOC + 1; 58 Allocation[] allocArray; 59 try { 60 allocArray = createAllocationsHelper(usage, MAX_NUM_IO_ALLOC + 1); 61 fail("should throw RSIllegalArgumentException"); 62 } catch (RSIllegalArgumentException e) { 63 } 64 numAlloc = 10; 65 allocArray = createAllocationsHelper(usage, numAlloc); 66 assertTrue("failed to create AllocationQueue", allocArray != null); 67 for (Allocation a : allocArray) { 68 a.destroy(); 69 } 70 } 71 testGetProperties()72 public void testGetProperties() { 73 int numAlloc = 10; 74 int usage = Allocation.USAGE_SCRIPT | Allocation.USAGE_IO_INPUT; 75 Allocation[] allocArray = createAllocationsHelper(usage, numAlloc); 76 77 Element eRef = allocArray[0].getElement(); 78 Type tRef = allocArray[0].getType(); 79 int uRef = allocArray[0].getUsage(); 80 Surface sRef = allocArray[0].getSurface(); 81 for (int i=1; i<numAlloc; i++) { 82 Element e = allocArray[i].getElement(); 83 assertTrue("Element mismatch between AllocationQueue and Allocation", 84 e.equals(eRef)); 85 Type t = allocArray[i].getType(); 86 assertTrue("Type mismatch between AllocationQueue and Allocation", 87 t.equals(tRef)); 88 int u = allocArray[i].getUsage(); 89 assertTrue("Usage mismatch between AllocationQueue and Allocation", 90 u == uRef); 91 Surface s = allocArray[i].getSurface(); 92 assertTrue("Surface mismatch between AllocationQueue and Allocation", 93 s.equals(sRef)); 94 } 95 for (Allocation a : allocArray) { 96 a.destroy(); 97 } 98 } 99 testMultipleIoReceive_USAGE_IO_INPUT()100 public void testMultipleIoReceive_USAGE_IO_INPUT() { 101 int usage = Allocation.USAGE_SCRIPT | Allocation.USAGE_IO_INPUT; 102 int dX = 64, dY = 64, numAlloc = 5; 103 Type t = Type.createXY(mRS, Element.U8_4(mRS), dX, dY); 104 105 Allocation[] allocArray = Allocation.createAllocations(mRS, t, usage, numAlloc); 106 Allocation inputAlloc = Allocation.createTyped(mRS, t, 107 Allocation.USAGE_SCRIPT | Allocation.USAGE_IO_OUTPUT); 108 inputAlloc.setSurface(allocArray[0].getSurface()); 109 110 for (int i=0; i<numAlloc; i++) { 111 Random r = new Random(); 112 byte[] dataIn = new byte[dX * dY * 4]; 113 byte[] dataOut = new byte[dX * dY * 4]; 114 115 r.nextBytes(dataIn); 116 inputAlloc.copyFromUnchecked(dataIn); 117 inputAlloc.ioSend(); 118 allocArray[i].ioReceive(); 119 allocArray[i].copyTo(dataOut); 120 for (int j=0; j<dX*dY*4; j++) { 121 assertTrue("IoReceive Failed, Frame: " + i, dataIn[j] == dataOut[j]); 122 } 123 } 124 for (Allocation a : allocArray) { 125 a.destroy(); 126 } 127 inputAlloc.destroy(); 128 } 129 } 130