| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.camera.stress; |
| |
| import com.android.camera.CameraActivity; |
| |
| import android.app.Activity; |
| import android.app.Instrumentation; |
| import android.content.Intent; |
| import android.os.Environment; |
| import android.provider.MediaStore; |
| import android.test.InstrumentationTestCase; |
| import android.test.suitebuilder.annotation.LargeTest; |
| import android.util.Log; |
| |
| import java.io.FileWriter; |
| import java.io.BufferedWriter; |
| |
| /** |
| * Test cases to measure the camera and video recorder startup time. |
| */ |
| public class CameraStartUp extends InstrumentationTestCase { |
| |
| private static final int TOTAL_NUMBER_OF_STARTUP = 20; |
| |
| private String TAG = "CameraStartUp"; |
| private static final String CAMERA_TEST_OUTPUT_FILE = |
| Environment.getExternalStorageDirectory().toString() + "/mediaStressOut.txt"; |
| private static int WAIT_TIME_FOR_PREVIEW = 1500; //1.5 second |
| |
| private long launchCamera() { |
| long startupTime = 0; |
| try { |
| Intent intent = new Intent(Intent.ACTION_MAIN); |
| intent.setClass(getInstrumentation().getTargetContext(), CameraActivity.class); |
| intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
| long beforeStart = System.currentTimeMillis(); |
| Instrumentation inst = getInstrumentation(); |
| Activity cameraActivity = inst.startActivitySync(intent); |
| long cameraStarted = System.currentTimeMillis(); |
| Thread.sleep(WAIT_TIME_FOR_PREVIEW); |
| cameraActivity.finish(); |
| startupTime = cameraStarted - beforeStart; |
| Thread.sleep(1000); |
| Log.v(TAG, "camera startup time: " + startupTime); |
| } catch (Exception e) { |
| Log.v(TAG, "Got exception", e); |
| fail("Fails to get the output file"); |
| } |
| return startupTime; |
| } |
| |
| private long launchVideo() { |
| long startupTime = 0; |
| |
| try { |
| Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA); |
| intent.setClass(getInstrumentation().getTargetContext(), CameraActivity.class); |
| intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
| long beforeStart = System.currentTimeMillis(); |
| Instrumentation inst = getInstrumentation(); |
| Activity recorderActivity = inst.startActivitySync(intent); |
| long cameraStarted = System.currentTimeMillis(); |
| recorderActivity.finish(); |
| startupTime = cameraStarted - beforeStart; |
| Log.v(TAG, "Video Startup Time = " + startupTime); |
| // wait for 1s to make sure it reach a clean stage |
| Thread.sleep(WAIT_TIME_FOR_PREVIEW); |
| Log.v(TAG, "video startup time: " + startupTime); |
| } catch (Exception e) { |
| Log.v(TAG, "Got exception", e); |
| fail("Fails to launch video output file"); |
| } |
| return startupTime; |
| } |
| |
| private void writeToOutputFile(long totalStartupTime, |
| String individualStartupTime, boolean firstStartUp, String Type) throws Exception { |
| // TODO (yslau) : Need to integrate the output data with central |
| // dashboard |
| try { |
| FileWriter fstream = null; |
| fstream = new FileWriter(CAMERA_TEST_OUTPUT_FILE, true); |
| BufferedWriter out = new BufferedWriter(fstream); |
| if (firstStartUp) { |
| out.write("First " + Type + " Startup: " + totalStartupTime + "\n"); |
| } else { |
| long averageStartupTime = totalStartupTime / (TOTAL_NUMBER_OF_STARTUP -1); |
| out.write(Type + "startup time: " + "\n"); |
| out.write("Number of loop: " + (TOTAL_NUMBER_OF_STARTUP -1) + "\n"); |
| out.write(individualStartupTime + "\n\n"); |
| out.write(Type + " average startup time: " + averageStartupTime + " ms\n\n"); |
| } |
| out.close(); |
| fstream.close(); |
| } catch (Exception e) { |
| fail("Camera write output to file"); |
| } |
| } |
| |
| @LargeTest |
| public void testLaunchVideo() throws Exception { |
| String individualStartupTime; |
| individualStartupTime = "Individual Video Startup Time = "; |
| long totalStartupTime = 0; |
| long startupTime = 0; |
| for (int i = 0; i < TOTAL_NUMBER_OF_STARTUP; i++) { |
| if (i == 0) { |
| // Capture the first startup time individually |
| long firstStartUpTime = launchVideo(); |
| writeToOutputFile(firstStartUpTime, "na", true, "Video"); |
| } else { |
| startupTime = launchVideo(); |
| totalStartupTime += startupTime; |
| individualStartupTime += startupTime + " ,"; |
| } |
| } |
| Log.v(TAG, "totalStartupTime =" + totalStartupTime); |
| writeToOutputFile(totalStartupTime, individualStartupTime, false, "Video"); |
| } |
| |
| @LargeTest |
| public void testLaunchCamera() throws Exception { |
| String individualStartupTime; |
| individualStartupTime = "Individual Camera Startup Time = "; |
| long totalStartupTime = 0; |
| long startupTime = 0; |
| for (int i = 0; i < TOTAL_NUMBER_OF_STARTUP; i++) { |
| if (i == 0) { |
| // Capture the first startup time individually |
| long firstStartUpTime = launchCamera(); |
| writeToOutputFile(firstStartUpTime, "na", true, "Camera"); |
| } else { |
| startupTime = launchCamera(); |
| totalStartupTime += startupTime; |
| individualStartupTime += startupTime + " ,"; |
| } |
| } |
| Log.v(TAG, "totalStartupTime =" + totalStartupTime); |
| writeToOutputFile(totalStartupTime, |
| individualStartupTime, false, "Camera"); |
| } |
| } |