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.Camera; 20 import com.android.camera.VideoCamera; 21 22 import android.app.Activity; 23 import android.app.Instrumentation; 24 import android.content.Intent; 25 import android.os.Environment; 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 launchCamera()45 private long launchCamera() { 46 long startupTime = 0; 47 try { 48 Intent intent = new Intent(Intent.ACTION_MAIN); 49 intent.setClass(getInstrumentation().getTargetContext(), Camera.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 cameraActivity.finish(); 56 startupTime = cameraStarted - beforeStart; 57 Thread.sleep(1000); 58 Log.v(TAG, "camera startup time: " + startupTime); 59 } catch (Exception e) { 60 Log.v(TAG, "Got exception", e); 61 fail("Fails to get the output file"); 62 } 63 return startupTime; 64 } 65 launchVideo()66 private long launchVideo() { 67 long startupTime = 0; 68 69 try { 70 Intent intent = new Intent(Intent.ACTION_MAIN); 71 intent.setClass(getInstrumentation().getTargetContext(), VideoCamera.class); 72 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 73 long beforeStart = System.currentTimeMillis(); 74 Instrumentation inst = getInstrumentation(); 75 Activity recorderActivity = inst.startActivitySync(intent); 76 long cameraStarted = System.currentTimeMillis(); 77 recorderActivity.finish(); 78 startupTime = cameraStarted - beforeStart; 79 Log.v(TAG, "Video Startup Time = " + startupTime); 80 // wait for 1s to make sure it reach a clean stage 81 Thread.sleep(WAIT_TIME_FOR_PREVIEW); 82 Log.v(TAG, "video startup time: " + startupTime); 83 } catch (Exception e) { 84 Log.v(TAG, "Got exception", e); 85 fail("Fails to launch video output file"); 86 } 87 return startupTime; 88 } 89 writeToOutputFile(long totalStartupTime, String individualStartupTime, boolean firstStartUp, String Type)90 private void writeToOutputFile(long totalStartupTime, 91 String individualStartupTime, boolean firstStartUp, String Type) throws Exception { 92 // TODO (yslau) : Need to integrate the output data with central 93 // dashboard 94 try { 95 FileWriter fstream = null; 96 fstream = new FileWriter(CAMERA_TEST_OUTPUT_FILE, true); 97 BufferedWriter out = new BufferedWriter(fstream); 98 if (firstStartUp) { 99 out.write("First " + Type + " Startup: " + totalStartupTime + "\n"); 100 } else { 101 long averageStartupTime = totalStartupTime / (TOTAL_NUMBER_OF_STARTUP -1); 102 out.write(Type + "startup time: " + "\n"); 103 out.write("Number of loop: " + (TOTAL_NUMBER_OF_STARTUP -1) + "\n"); 104 out.write(individualStartupTime + "\n\n"); 105 out.write(Type + " average startup time: " + averageStartupTime + " ms\n\n"); 106 } 107 out.close(); 108 fstream.close(); 109 } catch (Exception e) { 110 fail("Camera write output to file"); 111 } 112 } 113 114 @LargeTest testLaunchVideo()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 @LargeTest testLaunchCamera()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 }