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 = 1500; //1.5 second 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(1000); 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 recorderActivity.finish(); 79 startupTime = cameraStarted - beforeStart; 80 Log.v(TAG, "Video Startup Time = " + startupTime); 81 // wait for 1s to make sure it reach a clean stage 82 Thread.sleep(WAIT_TIME_FOR_PREVIEW); 83 Log.v(TAG, "video startup time: " + startupTime); 84 } catch (Exception e) { 85 Log.v(TAG, "Got exception", e); 86 fail("Fails to launch video output file"); 87 } 88 return startupTime; 89 } 90 91 private void writeToOutputFile(long totalStartupTime, 92 String individualStartupTime, boolean firstStartUp, String Type) throws Exception { 93 // TODO (yslau) : Need to integrate the output data with central 94 // dashboard 95 try { 96 FileWriter fstream = null; 97 fstream = new FileWriter(CAMERA_TEST_OUTPUT_FILE, true); 98 BufferedWriter out = new BufferedWriter(fstream); 99 if (firstStartUp) { 100 out.write("First " + Type + " Startup: " + totalStartupTime + "\n"); 101 } else { 102 long averageStartupTime = totalStartupTime / (TOTAL_NUMBER_OF_STARTUP -1); 103 out.write(Type + "startup time: " + "\n"); 104 out.write("Number of loop: " + (TOTAL_NUMBER_OF_STARTUP -1) + "\n"); 105 out.write(individualStartupTime + "\n\n"); 106 out.write(Type + " average startup time: " + averageStartupTime + " ms\n\n"); 107 } 108 out.close(); 109 fstream.close(); 110 } catch (Exception e) { 111 fail("Camera write output to file"); 112 } 113 } 114 115 public void testLaunchVideo() throws Exception { 116 String individualStartupTime; 117 individualStartupTime = "Individual Video Startup Time = "; 118 long totalStartupTime = 0; 119 long startupTime = 0; 120 for (int i = 0; i < TOTAL_NUMBER_OF_STARTUP; i++) { 121 if (i == 0) { 122 // Capture the first startup time individually 123 long firstStartUpTime = launchVideo(); 124 writeToOutputFile(firstStartUpTime, "na", true, "Video"); 125 } else { 126 startupTime = launchVideo(); 127 totalStartupTime += startupTime; 128 individualStartupTime += startupTime + " ,"; 129 } 130 } 131 Log.v(TAG, "totalStartupTime =" + totalStartupTime); 132 writeToOutputFile(totalStartupTime, individualStartupTime, false, "Video"); 133 } 134 135 public void testLaunchCamera() throws Exception { 136 String individualStartupTime; 137 individualStartupTime = "Individual Camera Startup Time = "; 138 long totalStartupTime = 0; 139 long startupTime = 0; 140 for (int i = 0; i < TOTAL_NUMBER_OF_STARTUP; i++) { 141 if (i == 0) { 142 // Capture the first startup time individually 143 long firstStartUpTime = launchCamera(); 144 writeToOutputFile(firstStartUpTime, "na", true, "Camera"); 145 } else { 146 startupTime = launchCamera(); 147 totalStartupTime += startupTime; 148 individualStartupTime += startupTime + " ,"; 149 } 150 } 151 Log.v(TAG, "totalStartupTime =" + totalStartupTime); 152 writeToOutputFile(totalStartupTime, 153 individualStartupTime, false, "Camera"); 154 } 155 } 156