16b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk/* 2394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * Copyright (C) 2010-2011 The Android Open Source Project 36b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * 46b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 56b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * you may not use this file except in compliance with the License. 66b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * You may obtain a copy of the License at 76b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * 86b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 96b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * 106b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 116b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 126b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * See the License for the specific language governing permissions and 146b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * limitations under the License. 156b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk */ 166b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 17c29a4442812d5f0e9f1af13b36cb6a806b6b46e0Alex Sakhartchoukpackage com.android.perftest; 186b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 196b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport java.io.Writer; 204d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchoukimport java.io.BufferedWriter; 214d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchoukimport java.io.FileWriter; 224d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchoukimport java.io.IOException; 234d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchoukimport java.io.File; 244d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchoukimport java.io.FileOutputStream; 254d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchoukimport java.io.OutputStream; 264d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk 274d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchoukimport android.os.Environment; 286b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.content.res.Resources; 296b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.renderscript.*; 308e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukimport android.renderscript.Element.DataKind; 318e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukimport android.renderscript.Element.DataType; 326d8eb266dd398abf0511685fdaf98abba3396174Jason Samsimport android.renderscript.Allocation.MipmapControl; 336b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.renderscript.Program.TextureType; 342738fb1cb13314e68ea5442e335de427261cde3cXia Wangimport android.renderscript.RenderScript.RSMessageHandler; 356b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.renderscript.Sampler.Value; 362dc7afd9c4307fba45120371abbf8b953d33a6b0Xia Wangimport android.renderscript.Mesh.Primitive; 372dc7afd9c4307fba45120371abbf8b953d33a6b0Xia Wangimport android.renderscript.Matrix4f; 382dc7afd9c4307fba45120371abbf8b953d33a6b0Xia Wangimport android.renderscript.ProgramVertexFixedFunction; 392dc7afd9c4307fba45120371abbf8b953d33a6b0Xia Wang 406b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.util.Log; 416b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 426b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 436b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukpublic class RsBenchRS { 446b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 454d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk private static final String TAG = "RsBenchRS"; 466b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk int mWidth; 476b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk int mHeight; 482738fb1cb13314e68ea5442e335de427261cde3cXia Wang int mLoops; 494d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk int mCurrentLoop; 504d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk 514d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk int mBenchmarkDimX; 524d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk int mBenchmarkDimY; 536b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 546b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk public RsBenchRS() { 556b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk } 566b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 572738fb1cb13314e68ea5442e335de427261cde3cXia Wang public void init(RenderScriptGL rs, Resources res, int width, int height, int loops) { 586b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mRS = rs; 596b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mRes = res; 606b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mWidth = width; 616b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mHeight = height; 626b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mMode = 0; 632738fb1cb13314e68ea5442e335de427261cde3cXia Wang mLoops = loops; 644d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk mCurrentLoop = 0; 654d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk mBenchmarkDimX = 1280; 664d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk mBenchmarkDimY = 720; 676b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk initRS(); 686b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk } 696b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 702738fb1cb13314e68ea5442e335de427261cde3cXia Wang private boolean stopTest = false; 712738fb1cb13314e68ea5442e335de427261cde3cXia Wang 726b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private Resources mRes; 736b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private RenderScriptGL mRS; 746b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 756b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private ProgramStore mProgStoreBlendNone; 766b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private ProgramStore mProgStoreBlendAlpha; 776b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 786b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private ProgramFragment mProgFragmentTexture; 796b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private ProgramFragment mProgFragmentColor; 806b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 816b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private ProgramVertex mProgVertex; 82b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk private ProgramVertexFixedFunction.Constants mPVA; 838596457bc34151dff2a465c90994130deac7f148Xia Wang private ProgramVertexFixedFunction.Constants mPvProjectionAlloc; 846b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 856b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private ScriptC_rsbench mScript; 866b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 87394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_TestScripts_s.Item[] mIndividualTests; 886b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 896b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk int mMode; 906b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 914d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk String[] mTestNames; 924d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk float[] mLocalTestResults; 934d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk 945de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk static Allocation createZeroTerminatedAlloc(RenderScript rs, 955de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk String str, 965de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk int usage) { 975de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk byte[] allocArray = null; 985de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk try { 995de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk allocArray = str.getBytes("UTF-8"); 1005de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk byte[] allocArrayZero = new byte[allocArray.length + 1]; 1015de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk System.arraycopy(allocArray, 0, allocArrayZero, 0, allocArray.length); 1025de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk allocArrayZero[allocArrayZero.length - 1] = '\0'; 1035de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk Allocation alloc = Allocation.createSized(rs, Element.U8(rs), 1045de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk allocArrayZero.length, usage); 1055de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk alloc.copyFrom(allocArrayZero); 1065de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk return alloc; 1075de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk } 1085de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk catch (Exception e) { 1095de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk throw new RSRuntimeException("Could not convert string to utf-8."); 1105de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk } 1115de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk 1125de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk } 1135de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk 114394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk void appendTests(RsBenchBaseTest testSet) { 115394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_TestScripts_s.Item[] newTests = testSet.getTests(); 116394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk if (mIndividualTests != null) { 117394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_TestScripts_s.Item[] combined; 118394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk combined = new ScriptField_TestScripts_s.Item[newTests.length + mIndividualTests.length]; 119394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk System.arraycopy(mIndividualTests, 0, combined, 0, mIndividualTests.length); 120394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk System.arraycopy(newTests, 0, combined, mIndividualTests.length, newTests.length); 121394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mIndividualTests = combined; 122394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } else { 123394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mIndividualTests = newTests; 124394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 125394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 126394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk String[] newNames = testSet.getTestNames(); 127394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk if (mTestNames != null) { 128394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk String[] combinedNames; 129394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk combinedNames = new String[newNames.length + mTestNames.length]; 130394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk System.arraycopy(mTestNames, 0, combinedNames, 0, mTestNames.length); 131394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk System.arraycopy(newNames, 0, combinedNames, mTestNames.length, newNames.length); 132394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTestNames = combinedNames; 133394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } else { 134394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTestNames = newNames; 135394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 136394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 137394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 138394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk void createTestAllocation() { 139394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk int numTests = mIndividualTests.length; 1405de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk mLocalTestResults = new float[numTests]; 141394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_TestScripts_s allTests; 142394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk allTests = new ScriptField_TestScripts_s(mRS, numTests); 143394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk for (int i = 0; i < numTests; i ++) { 144394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk allTests.set(mIndividualTests[i], i, false); 145394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 146394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk allTests.copyAll(); 147394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mScript.bind_gTestScripts(allTests); 1486b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk } 1496b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 1504d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk private void saveTestResults() { 1514d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk String state = Environment.getExternalStorageState(); 1524d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk if (!Environment.MEDIA_MOUNTED.equals(state)) { 1534d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk Log.v(TAG, "sdcard is read only"); 1544d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk return; 1554d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk } 1564d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk File sdCard = Environment.getExternalStorageDirectory(); 1574d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk if (!sdCard.canWrite()) { 1584d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk Log.v(TAG, "ssdcard is read only"); 1594d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk return; 1604d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk } 1614d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk 1624d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk File resultFile = new File(sdCard, "rsbench_result" + mCurrentLoop + ".csv"); 1634d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk resultFile.setWritable(true, false); 1644d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk 1654d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk try { 1664d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk BufferedWriter results = new BufferedWriter(new FileWriter(resultFile)); 1674d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk for (int i = 0; i < mLocalTestResults.length; i ++) { 1684d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk results.write(mTestNames[i] + ", " + mLocalTestResults[i] + ",\n"); 1694d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk } 1704d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk results.close(); 1714d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk Log.v(TAG, "Saved results in: " + resultFile.getAbsolutePath()); 1724d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk } catch (IOException e) { 1734d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk Log.v(TAG, "Unable to write result file " + e.getMessage()); 1744d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk } 1754d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk } 1764d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk 1772738fb1cb13314e68ea5442e335de427261cde3cXia Wang /** 1782738fb1cb13314e68ea5442e335de427261cde3cXia Wang * Create a message handler to handle message sent from the script 1792738fb1cb13314e68ea5442e335de427261cde3cXia Wang */ 1802738fb1cb13314e68ea5442e335de427261cde3cXia Wang protected RSMessageHandler mRsMessage = new RSMessageHandler() { 1812738fb1cb13314e68ea5442e335de427261cde3cXia Wang public void run() { 1824d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk if (mID == mScript.get_RS_MSG_RESULTS_READY()) { 1834d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk for (int i = 0; i < mLocalTestResults.length; i ++) { 1844d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk mLocalTestResults[i] = Float.intBitsToFloat(mData[i]); 1854d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk } 1864d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk saveTestResults(); 1874d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk if (mLoops > 0) { 1884d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk mCurrentLoop ++; 1894d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk mCurrentLoop = mCurrentLoop % mLoops; 1904d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk } 1914d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk return; 1924d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk 1934d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk } else if (mID == mScript.get_RS_MSG_TEST_DONE()) { 1942738fb1cb13314e68ea5442e335de427261cde3cXia Wang synchronized(this) { 1952738fb1cb13314e68ea5442e335de427261cde3cXia Wang stopTest = true; 1962738fb1cb13314e68ea5442e335de427261cde3cXia Wang this.notifyAll(); 1972738fb1cb13314e68ea5442e335de427261cde3cXia Wang } 1982738fb1cb13314e68ea5442e335de427261cde3cXia Wang return; 1992738fb1cb13314e68ea5442e335de427261cde3cXia Wang } else { 2004d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk Log.v(TAG, "Perf test got unexpected message"); 2012738fb1cb13314e68ea5442e335de427261cde3cXia Wang return; 2022738fb1cb13314e68ea5442e335de427261cde3cXia Wang } 2032738fb1cb13314e68ea5442e335de427261cde3cXia Wang } 2042738fb1cb13314e68ea5442e335de427261cde3cXia Wang }; 2052738fb1cb13314e68ea5442e335de427261cde3cXia Wang 2062738fb1cb13314e68ea5442e335de427261cde3cXia Wang /** 2072738fb1cb13314e68ea5442e335de427261cde3cXia Wang * Wait for message from the script 2082738fb1cb13314e68ea5442e335de427261cde3cXia Wang */ 2092738fb1cb13314e68ea5442e335de427261cde3cXia Wang public boolean testIsFinished() { 2102738fb1cb13314e68ea5442e335de427261cde3cXia Wang synchronized(this) { 2112738fb1cb13314e68ea5442e335de427261cde3cXia Wang while (true) { 2122738fb1cb13314e68ea5442e335de427261cde3cXia Wang if (stopTest) { 2132738fb1cb13314e68ea5442e335de427261cde3cXia Wang return true; 2142738fb1cb13314e68ea5442e335de427261cde3cXia Wang } else { 2152738fb1cb13314e68ea5442e335de427261cde3cXia Wang try { 2162738fb1cb13314e68ea5442e335de427261cde3cXia Wang this.wait(60*1000); 2172738fb1cb13314e68ea5442e335de427261cde3cXia Wang } catch (InterruptedException e) { 2182738fb1cb13314e68ea5442e335de427261cde3cXia Wang e.printStackTrace(); 2192738fb1cb13314e68ea5442e335de427261cde3cXia Wang } 2202738fb1cb13314e68ea5442e335de427261cde3cXia Wang } 2212738fb1cb13314e68ea5442e335de427261cde3cXia Wang } 2222738fb1cb13314e68ea5442e335de427261cde3cXia Wang } 2232738fb1cb13314e68ea5442e335de427261cde3cXia Wang } 2242738fb1cb13314e68ea5442e335de427261cde3cXia Wang 2256b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private void initProgramFragment() { 2266b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 227b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk ProgramFragmentFixedFunction.Builder texBuilder = new ProgramFragmentFixedFunction.Builder(mRS); 228b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk texBuilder.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE, 229b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk ProgramFragmentFixedFunction.Builder.Format.RGBA, 0); 2306b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mProgFragmentTexture = texBuilder.create(); 23146bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk mProgFragmentTexture.bindSampler(Sampler.CLAMP_LINEAR(mRS), 0); 2326b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 233b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk ProgramFragmentFixedFunction.Builder colBuilder = new ProgramFragmentFixedFunction.Builder(mRS); 2346b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk colBuilder.setVaryingColor(false); 2356b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mProgFragmentColor = colBuilder.create(); 2366b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 2376b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mScript.set_gProgFragmentTexture(mProgFragmentTexture); 2386b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk } 2396b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 2406b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private void initProgramVertex() { 241b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS); 2426b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mProgVertex = pvb.create(); 2436b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 244b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mPVA = new ProgramVertexFixedFunction.Constants(mRS); 245b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk ((ProgramVertexFixedFunction)mProgVertex).bindConstants(mPVA); 246b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Matrix4f proj = new Matrix4f(); 2474d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk proj.loadOrthoWindow(mBenchmarkDimX, mBenchmarkDimY); 248b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mPVA.setProjection(proj); 2496b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 2506b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mScript.set_gProgVertex(mProgVertex); 2516b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk } 2526b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 2534d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk private int strlen(byte[] array) { 2544d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk int count = 0; 2554d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk while(count < array.length && array[count] != 0) { 2564d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk count ++; 2574d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk } 2584d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk return count; 2594d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk } 2604d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk 26146bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk public void setDebugMode(int num) { 26246bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk mScript.invoke_setDebugMode(num); 26346bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk } 26446bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk 26537333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk public void setBenchmarkMode(int benchNum) { 26637333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk mScript.invoke_setBenchmarkMode(benchNum); 26746bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk } 26846bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk 269e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk public void pause(boolean pause) { 270e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk mScript.set_gPauseRendering(pause); 271e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk } 272e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk 2736b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private void initRS() { 2746b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 2756b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mScript = new ScriptC_rsbench(mRS, mRes, R.raw.rsbench); 276394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mRS.bindRootScript(mScript); 27746bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk 2782738fb1cb13314e68ea5442e335de427261cde3cXia Wang mRS.setMessageHandler(mRsMessage); 2796b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 2802738fb1cb13314e68ea5442e335de427261cde3cXia Wang mScript.set_gMaxLoops(mLoops); 2816b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 2826b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk initProgramVertex(); 2838596457bc34151dff2a465c90994130deac7f148Xia Wang initProgramFragment(); 284394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mScript.set_gFontSerif(Font.create(mRS, mRes, "serif", Font.Style.NORMAL, 8)); 2856b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 2868e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Type.Builder b = new Type.Builder(mRS, Element.RGBA_8888(mRS)); 2874d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk b.setX(mBenchmarkDimX).setY(mBenchmarkDimY); 2888e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Allocation offscreen = Allocation.createTyped(mRS, 2898e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk b.create(), 2908e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE | 2918e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Allocation.USAGE_GRAPHICS_RENDER_TARGET); 2928e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.set_gRenderBufferColor(offscreen); 2938e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 2948e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk b = new Type.Builder(mRS, 2958e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Element.createPixel(mRS, DataType.UNSIGNED_16, 2968e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk DataKind.PIXEL_DEPTH)); 2974d7b19aa23f7546e2e26baf27cd7c4b9479b9384Alex Sakhartchouk b.setX(mBenchmarkDimX).setY(mBenchmarkDimY); 2988e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk offscreen = Allocation.createTyped(mRS, 2998e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk b.create(), 3008e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Allocation.USAGE_GRAPHICS_RENDER_TARGET); 3018e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.set_gRenderBufferDepth(offscreen); 302394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mScript.set_gLinearClamp(Sampler.CLAMP_LINEAR(mRS)); 3038e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 304394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk RsBenchBaseTest test = new TextTest(); 305394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk if (test.init(mRS, mRes)) { 306394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk appendTests(test); 30762e8f2228f81c3ae6a55c665b6ec0fe8c09b271eXia Wang } 308394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk test = new FillTest(); 309394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk if (test.init(mRS, mRes)) { 310394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk appendTests(test); 311cb040a063fd527afc37f6f703fab882ac3ab63cdXia Wang } 312394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk test = new MeshTest(); 313394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk if (test.init(mRS, mRes)) { 314394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk appendTests(test); 3157c7d135790ccc66bbee793c42c7ed65cf5bb76cdXia Wang } 316394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk test = new TorusTest(); 317394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk if (test.init(mRS, mRes)) { 318394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk appendTests(test); 319394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 320394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk test = new UiTest(); 321394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk if (test.init(mRS, mRes)) { 322394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk appendTests(test); 323394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 324394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk createTestAllocation(); 32546bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk 326394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mScript.set_gLoadComplete(true); 3276b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk } 3286b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk} 329