FileDocCategorySizeDatePackage
RsBenchRS.javaAPI DocAndroid 5.1 API11159Thu Mar 12 22:22:44 GMT 2015com.android.perftest

RsBenchRS

public class RsBenchRS extends Object

Fields Summary
private static final String
TAG
int
mWidth
int
mHeight
int
mLoops
int
mCurrentLoop
int
mBenchmarkDimX
int
mBenchmarkDimY
private boolean
stopTest
private android.content.res.Resources
mRes
private RenderScriptGL
mRS
private ProgramStore
mProgStoreBlendNone
private ProgramStore
mProgStoreBlendAlpha
private ProgramFragment
mProgFragmentTexture
private ProgramFragment
mProgFragmentColor
private ProgramVertex
mProgVertex
private ProgramVertexFixedFunction.Constants
mPVA
private ProgramVertexFixedFunction.Constants
mPvProjectionAlloc
private ScriptC_rsbench
mScript
ScriptField_TestScripts_s.Item[]
mIndividualTests
int
mMode
String[]
mTestNames
float[]
mLocalTestResults
protected android.renderscript.RenderScript.RSMessageHandler
mRsMessage
Create a message handler to handle message sent from the script
Constructors Summary
public RsBenchRS()


      
    
Methods Summary
voidappendTests(RsBenchBaseTest testSet)

        ScriptField_TestScripts_s.Item[] newTests = testSet.getTests();
        if (mIndividualTests != null) {
            ScriptField_TestScripts_s.Item[] combined;
            combined = new ScriptField_TestScripts_s.Item[newTests.length + mIndividualTests.length];
            System.arraycopy(mIndividualTests, 0, combined, 0, mIndividualTests.length);
            System.arraycopy(newTests, 0, combined, mIndividualTests.length, newTests.length);
            mIndividualTests = combined;
        } else {
            mIndividualTests = newTests;
        }

        String[] newNames = testSet.getTestNames();
        if (mTestNames != null) {
            String[] combinedNames;
            combinedNames = new String[newNames.length + mTestNames.length];
            System.arraycopy(mTestNames, 0, combinedNames, 0, mTestNames.length);
            System.arraycopy(newNames, 0, combinedNames, mTestNames.length, newNames.length);
            mTestNames = combinedNames;
        } else {
            mTestNames = newNames;
        }
    
voidcreateTestAllocation()

        int numTests = mIndividualTests.length;
        mLocalTestResults = new float[numTests];
        ScriptField_TestScripts_s allTests;
        allTests = new ScriptField_TestScripts_s(mRS, numTests);
        for (int i = 0; i < numTests; i ++) {
            allTests.set(mIndividualTests[i], i, false);
        }
        allTests.copyAll();
        mScript.bind_gTestScripts(allTests);
    
static AllocationcreateZeroTerminatedAlloc(RenderScript rs, java.lang.String str, int usage)


       
                                                 
                                                  
        byte[] allocArray = null;
        try {
            allocArray = str.getBytes("UTF-8");
            byte[] allocArrayZero = new byte[allocArray.length + 1];
            System.arraycopy(allocArray, 0, allocArrayZero, 0, allocArray.length);
            allocArrayZero[allocArrayZero.length - 1] = '\0";
            Allocation alloc = Allocation.createSized(rs, Element.U8(rs),
                                                      allocArrayZero.length, usage);
            alloc.copyFrom(allocArrayZero);
            return alloc;
        }
        catch (Exception e) {
            throw new RSRuntimeException("Could not convert string to utf-8.");
        }

    
public voidinit(RenderScriptGL rs, android.content.res.Resources res, int width, int height, int loops)

        mRS = rs;
        mRes = res;
        mWidth = width;
        mHeight = height;
        mMode = 0;
        mLoops = loops;
        mCurrentLoop = 0;
        mBenchmarkDimX = 1280;
        mBenchmarkDimY = 720;
        initRS();
    
private voidinitProgramFragment()


        ProgramFragmentFixedFunction.Builder texBuilder = new ProgramFragmentFixedFunction.Builder(mRS);
        texBuilder.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE,
                              ProgramFragmentFixedFunction.Builder.Format.RGBA, 0);
        mProgFragmentTexture = texBuilder.create();
        mProgFragmentTexture.bindSampler(Sampler.CLAMP_LINEAR(mRS), 0);

        ProgramFragmentFixedFunction.Builder colBuilder = new ProgramFragmentFixedFunction.Builder(mRS);
        colBuilder.setVaryingColor(false);
        mProgFragmentColor = colBuilder.create();

        mScript.set_gProgFragmentTexture(mProgFragmentTexture);
    
private voidinitProgramVertex()

        ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS);
        mProgVertex = pvb.create();

        mPVA = new ProgramVertexFixedFunction.Constants(mRS);
        ((ProgramVertexFixedFunction)mProgVertex).bindConstants(mPVA);
        Matrix4f proj = new Matrix4f();
        proj.loadOrthoWindow(mBenchmarkDimX, mBenchmarkDimY);
        mPVA.setProjection(proj);

        mScript.set_gProgVertex(mProgVertex);
    
private voidinitRS()


        mScript = new ScriptC_rsbench(mRS, mRes, R.raw.rsbench);
        mRS.bindRootScript(mScript);

        mRS.setMessageHandler(mRsMessage);

        mScript.set_gMaxLoops(mLoops);

        initProgramVertex();
        initProgramFragment();
        mScript.set_gFontSerif(Font.create(mRS, mRes, "serif", Font.Style.NORMAL, 8));

        Type.Builder b = new Type.Builder(mRS, Element.RGBA_8888(mRS));
        b.setX(mBenchmarkDimX).setY(mBenchmarkDimY);
        Allocation offscreen = Allocation.createTyped(mRS,
                                                      b.create(),
                                                      Allocation.USAGE_GRAPHICS_TEXTURE |
                                                      Allocation.USAGE_GRAPHICS_RENDER_TARGET);
        mScript.set_gRenderBufferColor(offscreen);

        b = new Type.Builder(mRS,
                             Element.createPixel(mRS, DataType.UNSIGNED_16,
                             DataKind.PIXEL_DEPTH));
        b.setX(mBenchmarkDimX).setY(mBenchmarkDimY);
        offscreen = Allocation.createTyped(mRS,
                                           b.create(),
                                           Allocation.USAGE_GRAPHICS_RENDER_TARGET);
        mScript.set_gRenderBufferDepth(offscreen);
        mScript.set_gLinearClamp(Sampler.CLAMP_LINEAR(mRS));

        RsBenchBaseTest test = new TextTest();
        if (test.init(mRS, mRes)) {
            appendTests(test);
        }
        test = new FillTest();
        if (test.init(mRS, mRes)) {
            appendTests(test);
        }
        test = new MeshTest();
        if (test.init(mRS, mRes)) {
            appendTests(test);
        }
        test = new TorusTest();
        if (test.init(mRS, mRes)) {
            appendTests(test);
        }
        test = new UiTest();
        if (test.init(mRS, mRes)) {
            appendTests(test);
        }
        createTestAllocation();

        mScript.set_gLoadComplete(true);
    
public voidpause(boolean pause)

        mScript.set_gPauseRendering(pause);
    
private voidsaveTestResults()

        String state = Environment.getExternalStorageState();
        if (!Environment.MEDIA_MOUNTED.equals(state)) {
            Log.v(TAG, "sdcard is read only");
            return;
        }
        File sdCard = Environment.getExternalStorageDirectory();
        if (!sdCard.canWrite()) {
            Log.v(TAG, "ssdcard is read only");
            return;
        }

        File resultFile = new File(sdCard, "rsbench_result" + mCurrentLoop + ".csv");
        resultFile.setWritable(true, false);

        try {
            BufferedWriter results = new BufferedWriter(new FileWriter(resultFile));
            for (int i = 0; i < mLocalTestResults.length; i ++) {
                results.write(mTestNames[i] + ", " + mLocalTestResults[i] + ",\n");
            }
            results.close();
            Log.v(TAG, "Saved results in: " + resultFile.getAbsolutePath());
        } catch (IOException e) {
            Log.v(TAG, "Unable to write result file " + e.getMessage());
        }
    
public voidsetBenchmarkMode(int benchNum)

        mScript.invoke_setBenchmarkMode(benchNum);
    
public voidsetDebugMode(int num)

        mScript.invoke_setDebugMode(num);
    
private intstrlen(byte[] array)

        int count = 0;
        while(count < array.length && array[count] != 0) {
            count ++;
        }
        return count;
    
public booleantestIsFinished()
Wait for message from the script


               
       
        synchronized(this) {
            while (true) {
                if (stopTest) {
                    return true;
                } else {
                    try {
                        this.wait(60*1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }