1 /* 2 * Copyright (C) 2009 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 com.android.camera.stress; 18 19 import com.android.camera.CameraActivity; 20 21 import android.app.Activity; 22 import android.app.Instrumentation; 23 import android.content.Intent; 24 import android.os.Environment; 25 import android.provider.MediaStore; 26 import android.test.InstrumentationTestCase; 27 import android.test.suitebuilder.annotation.LargeTest; 28 import android.util.Log; 29 30 import java.io.FileWriter; 31 import java.io.BufferedWriter; 32 33 /** 34 * Test cases to measure the camera and video recorder startup time. 35 */ 36 public class CameraStartUp extends InstrumentationTestCase { 37 38 private static final int TOTAL_NUMBER_OF_STARTUP = 20; 39 40 private String TAG = "CameraStartUp"; 41 private static final String CAMERA_TEST_OUTPUT_FILE = 42 Environment.getExternalStorageDirectory().toString() + "/mediaStressOut.txt"; 43 private static int WAIT_TIME_FOR_PREVIEW = 4 * 1000; //4 seconds. 44 45 private long launchCamera() { 46 long startupTime = 0; 47 try { 48 Intent intent = new Intent(Intent.ACTION_MAIN); 49 intent.setClass(getInstrumentation().getTargetContext(), CameraActivity.class); 50 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 51 long beforeStart = System.currentTimeMillis(); 52 Instrumentation inst = getInstrumentation(); 53 Activity cameraActivity = inst.startActivitySync(intent); 54 long cameraStarted = System.currentTimeMillis(); 55 Thread.sleep(WAIT_TIME_FOR_PREVIEW); 56 cameraActivity.finish(); 57 startupTime = cameraStarted - beforeStart; 58 Thread.sleep(2 * 1000); //sleep for 2 seconds. 59 Log.v(TAG, "camera startup time: " + startupTime); 60 } catch (Exception e) { 61 Log.v(TAG, "Got exception", e); 62 fail("Fails to get the output file"); 63 } 64 return startupTime; 65 } 66 67 private long launchVideo() { 68 long startupTime = 0; 69 70 try { 71 Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA); 72 intent.setClass(getInstrumentation().getTargetContext(), CameraActivity.class); 73 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 74 long beforeStart = System.currentTimeMillis(); 75 Instrumentation inst = getInstrumentation(); 76 Activity recorderActivity = inst.startActivitySync(intent); 77 long cameraStarted = System.currentTimeMillis(); 78 Thread.sleep(WAIT_TIME_FOR_PREVIEW); 79 recorderActivity.finish(); 80 startupTime = cameraStarted - beforeStart; 81 Log.v(TAG, "Video Startup Time = " + startupTime); 82 // wait for 1s to make sure it reach a clean stage 83 Thread.sleep(2 * 1000); //sleep for 2 seconds. 84 Log.v(TAG, "video startup time: " + startupTime); 85 } catch (Exception e) { 86 Log.v(TAG, "Got exception", e); 87 fail("Fails to launch video output file"); 88 } 89 return startupTime; 90 } 91 92 private void writeToOutputFile(long totalStartupTime, 93 String individualStartupTime, boolean firstStartUp, String Type) throws Exception { 94 // TODO (yslau) : Need to integrate the output data with central 95 // dashboard 96 try { 97 FileWriter fstream = null; 98 fstream = new FileWriter(CAMERA_TEST_OUTPUT_FILE, true); 99 BufferedWriter out = new BufferedWriter(fstream); 100 if (firstStartUp) { 101 out.write("First " + Type + " Startup: " + totalStartupTime + "\n"); 102 } else { 103 long averageStartupTime = totalStartupTime / (TOTAL_NUMBER_OF_STARTUP -1); 104 out.write(Type + "startup time: " + "\n"); 105 out.write("Number of loop: " + (TOTAL_NUMBER_OF_STARTUP -1) + "\n"); 106 out.write(individualStartupTime + "\n\n"); 107 out.write(Type + " average startup time: " + averageStartupTime + " ms\n\n"); 108 } 109 out.close(); 110 fstream.close(); 111 } catch (Exception e) { 112 fail("Camera write output to file"); 113 } 114 } 115 116 public void testLaunchVideo() throws Exception { 117 String individualStartupTime; 118 individualStartupTime = "Individual Video Startup Time = "; 119 long totalStartupTime = 0; 120 long startupTime = 0; 121 for (int i = 0; i < TOTAL_NUMBER_OF_STARTUP; i++) { 122 if (i == 0) { 123 // Capture the first startup time individually 124 long firstStartUpTime = launchVideo(); 125 writeToOutputFile(firstStartUpTime, "na", true, "Video"); 126 } else { 127 startupTime = launchVideo(); 128 totalStartupTime += startupTime; 129 individualStartupTime += startupTime + " ,"; 130 } 131 } 132 Log.v(TAG, "totalStartupTime =" + totalStartupTime); 133 writeToOutputFile(totalStartupTime, individualStartupTime, false, "Video"); 134 } 135 136 public void testLaunchCamera() throws Exception { 137 String individualStartupTime; 138 individualStartupTime = "Individual Camera Startup Time = "; 139 long totalStartupTime = 0; 140 long startupTime = 0; 141 for (int i = 0; i < TOTAL_NUMBER_OF_STARTUP; i++) { 142 if (i == 0) { 143 // Capture the first startup time individually 144 long firstStartUpTime = launchCamera(); 145 writeToOutputFile(firstStartUpTime, "na", true, "Camera"); 146 } else { 147 startupTime = launchCamera(); 148 totalStartupTime += startupTime; 149 individualStartupTime += startupTime + " ,"; 150 } 151 } 152 Log.v(TAG, "totalStartupTime =" + totalStartupTime); 153 writeToOutputFile(totalStartupTime, 154 individualStartupTime, false, "Camera"); 155 } 156 } 157