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