1f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang/* 2f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * Copyright (C) 2011 The Android Open Source Project 3f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * 4f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * you may not use this file except in compliance with the License. 6f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * You may obtain a copy of the License at 7f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * 8f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * http://www.apache.org/licenses/LICENSE-2.0 9f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * 10f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * Unless required by applicable law or agreed to in writing, software 11f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * distributed under the License is distributed on an "AS IS" BASIS, 12f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * See the License for the specific language governing permissions and 14f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * limitations under the License. 15f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang */ 16f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang 17f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangpackage com.android.rs.image; 18f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang 19f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport android.os.Bundle; 20f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport android.os.Environment; 21f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport android.app.Instrumentation; 22f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport android.content.Context; 23f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport android.content.Intent; 24f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport android.net.Uri; 25f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport android.test.ActivityInstrumentationTestCase2; 26f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport android.test.suitebuilder.annotation.LargeTest; 27f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport android.util.Log; 28f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang 29f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport java.io.BufferedWriter; 30f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport java.io.File; 31f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport java.io.FileWriter; 32f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport java.io.IOException; 33f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang 34f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang/** 35f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * ImageProcessing benchmark test. 36f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * To run the test, please use command 37f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * 38f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * adb shell am instrument -w com.android.rs.image/.ImageProcessingTestRunner 39f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * 40f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang */ 41f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangpublic class ImageProcessingTest extends ActivityInstrumentationTestCase2<ImageProcessingActivity> { 42f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang private final String TAG = "ImageProcessingTest"; 43f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang private final String RESULT_FILE = "image_processing_result.txt"; 446e31a7b762c08177b4f53783c2e3e0c6840f5221Xia Wang private int ITERATION = 5; 45f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang private ImageProcessingActivity mAct; 46f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang 47f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang public ImageProcessingTest() { 48f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang super(ImageProcessingActivity.class); 49f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang } 50f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang 51f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang @Override 52f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang public void setUp() throws Exception { 53f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang super.setUp(); 54f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang mAct = getActivity(); 55f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang } 56f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang 57f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang @Override 58f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang public void tearDown() throws Exception { 59f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang super.tearDown(); 60f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang } 61f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang 62f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang /** 63f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang * ImageProcessing benchmark test 64f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang */ 65f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang @LargeTest 66f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang public void testImageProcessingBench() { 676e31a7b762c08177b4f53783c2e3e0c6840f5221Xia Wang long t = 0; 686e31a7b762c08177b4f53783c2e3e0c6840f5221Xia Wang long sum = 0; 69f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang // write result into a file 70f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang File externalStorage = Environment.getExternalStorageDirectory(); 71f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang if (!externalStorage.canWrite()) { 72f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang Log.v(TAG, "sdcard is not writable"); 73f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang return; 74f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang } 75f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang File resultFile = new File(externalStorage, RESULT_FILE); 76f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang resultFile.setWritable(true, false); 77f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang try { 786e31a7b762c08177b4f53783c2e3e0c6840f5221Xia Wang BufferedWriter rsWriter = new BufferedWriter(new FileWriter(resultFile)); 79f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang Log.v(TAG, "Saved results in: " + resultFile.getAbsolutePath()); 806e31a7b762c08177b4f53783c2e3e0c6840f5221Xia Wang for (int i = 0; i < ITERATION; i++ ) { 8176fb2973b988b150ed4b62611dc41c2658eeb892Jason Sams t = (long)mAct.getBenchmark(); 826e31a7b762c08177b4f53783c2e3e0c6840f5221Xia Wang sum += t; 836e31a7b762c08177b4f53783c2e3e0c6840f5221Xia Wang rsWriter.write("Renderscript frame time core: " + t + " ms\n"); 846e31a7b762c08177b4f53783c2e3e0c6840f5221Xia Wang Log.v(TAG, "RenderScript framew time core: " + t + " ms"); 856e31a7b762c08177b4f53783c2e3e0c6840f5221Xia Wang } 866e31a7b762c08177b4f53783c2e3e0c6840f5221Xia Wang long avgValue = sum/ITERATION; 87e2ce3b8252d402653810ef3810bf0f2643307706Xia Wang rsWriter.write("Average frame time: " + avgValue + " ms\n"); 886e31a7b762c08177b4f53783c2e3e0c6840f5221Xia Wang Log.v(TAG, "Average frame time: " + avgValue + " ms"); 896e31a7b762c08177b4f53783c2e3e0c6840f5221Xia Wang rsWriter.close(); 90f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang } catch (IOException e) { 91f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang Log.v(TAG, "Unable to write result file " + e.getMessage()); 92f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang } 93f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang } 94f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang} 95