diff options
author | Yu Shan Emily Lau <yslau@google.com> | 2010-12-16 18:34:48 -0800 |
---|---|---|
committer | Yu Shan Emily Lau <yslau@google.com> | 2011-01-07 00:49:37 -0800 |
commit | f6069b16aea54fa33976c1ee4bf8654fd4518fc6 (patch) | |
tree | 78111b310c2838347a90b8b06e343774922cc6be /tests/src | |
parent | 8c120ca9580660d54a932d91448fb1852599492f (diff) | |
download | LegacyCamera-f6069b16aea54fa33976c1ee4bf8654fd4518fc6.zip LegacyCamera-f6069b16aea54fa33976c1ee4bf8654fd4518fc6.tar.gz LegacyCamera-f6069b16aea54fa33976c1ee4bf8654fd4518fc6.tar.bz2 |
Removed the flaky memory checking.
Added the image caputre and video recording stress test for the front facing camera.
Change-Id: Ie9b3eebde5665f768bb1e950b8bb593feabb55ff
Diffstat (limited to 'tests/src')
4 files changed, 218 insertions, 201 deletions
diff --git a/tests/src/com/android/camera/CameraStressTestRunner.java b/tests/src/com/android/camera/CameraStressTestRunner.java index 5c61c9b..5f1c485 100755 --- a/tests/src/com/android/camera/CameraStressTestRunner.java +++ b/tests/src/com/android/camera/CameraStressTestRunner.java @@ -34,6 +34,7 @@ public class CameraStressTestRunner extends InstrumentationTestRunner { public TestSuite getAllTests() { TestSuite suite = new InstrumentationTestSuite(this); suite.addTestSuite(ImageCapture.class); + suite.addTestSuite(VideoCapture.class); return suite; } diff --git a/tests/src/com/android/camera/stress/ImageCapture.java b/tests/src/com/android/camera/stress/ImageCapture.java index f376487..328a878 100755 --- a/tests/src/com/android/camera/stress/ImageCapture.java +++ b/tests/src/com/android/camera/stress/ImageCapture.java @@ -18,22 +18,16 @@ package com.android.camera.stress; import com.android.camera.Camera; import com.android.camera.VideoCamera; +import com.android.camera.stress.CameraStressTestRunner; import android.app.Instrumentation; import android.content.Intent; -import android.os.Environment; import android.test.ActivityInstrumentationTestCase2; import android.test.suitebuilder.annotation.LargeTest; import android.util.Log; import android.view.KeyEvent; +import android.app.Activity; -import java.io.FileWriter; -import java.io.Writer; -import java.io.File; -import java.io.FileWriter; -import java.io.BufferedWriter; -import java.io.IOException; -import java.io.InputStream; /** * Junit / Instrumentation test case for camera test * @@ -41,30 +35,21 @@ import java.io.InputStream; * * adb shell am instrument \ * -e class com.android.camera.stress.ImageCapture \ - * -w com.android.camera.tests/com.android.camera.CameraStressTestRunner + * -w com.google.android.camera.tests/android.test.InstrumentationTestRunner * */ public class ImageCapture extends ActivityInstrumentationTestCase2 <Camera> { private String TAG = "ImageCapture"; private static final int TOTAL_NUMBER_OF_IMAGECAPTURE = 100; - private static final int TOTAL_NUMBER_OF_VIDEOCAPTURE = 100; private static final long WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN = 1500; //1.5 sedconds - private static final long WAIT_FOR_VIDEO_CAPTURE_TO_BE_TAKEN = 20000; //20seconds - private static final long WAIT_FOR_PREVIEW = 1500; //1.5 seconds - private static final long WAIT_FOR_STABLE_STATE = 2000; //2 seconds - private static final int NO_OF_LOOPS_TAKE_MEMORY_SNAPSHOT = 10; + private static final long WAIT_FOR_SWITCH_CAMERA = 3000; //3 seconds - //the tolerant memory leak - private static final int MAX_ACCEPTED_MEMORY_LEAK_KB = 150; + private TestUtil testUtil = new TestUtil(); - private static int mStartMemory = 0; - private static int mEndMemory = 0; - private static int mStartPid = 0; - private static int mEndPid = 0; - - private BufferedWriter mOut; - private FileWriter mfstream; + // Private intent extras. + private final static String EXTRAS_CAMERA_FACING = + "android.intent.extras.CAMERA_FACING"; public ImageCapture() { super(Camera.class); @@ -72,210 +57,67 @@ public class ImageCapture extends ActivityInstrumentationTestCase2 <Camera> { @Override protected void setUp() throws Exception { - getActivity(); - prepareOutputFile(); + testUtil.prepareOutputFile(); super.setUp(); } @Override protected void tearDown() throws Exception { - closeOutputFile(); + testUtil.closeOutputFile(); super.tearDown(); } - private void prepareOutputFile(){ - String camera_test_output_file = - Environment.getExternalStorageDirectory().toString() + "/mediaStressOut.txt"; - try{ - mfstream = new FileWriter(camera_test_output_file, true); - mOut = new BufferedWriter(mfstream); - } catch (Exception e){ - assertTrue("ImageCapture open output",false); - } - } - - private void closeOutputFile() { - try { - mOut.write("\n"); - mOut.close(); - mfstream.close(); - } catch (Exception e) { - assertTrue("ImageCapture close output", false); - } - } - - //Write the ps output to the file - public void getMemoryWriteToLog(Writer output) { - String memusage = null; - memusage = captureMediaserverInfo(); - Log.v(TAG, memusage); - try { - //Write to file output - output.write(memusage); - } catch (Exception e) { - Log.v(TAG, "Got exception", e); - } - } - - public String captureMediaserverInfo() { - String cm = "ps mediaserver"; - String memoryUsage = null; - - int ch; - try { - Process p = Runtime.getRuntime().exec(cm); - InputStream in = p.getInputStream(); - StringBuffer sb = new StringBuffer(512); - while ((ch = in.read()) != -1) { - sb.append((char) ch); - } - memoryUsage = sb.toString(); - } catch (IOException e) { - Log.v(TAG, "Got exception", e); - } - String[] poList = memoryUsage.split("\r|\n|\r\n"); - String memusage = poList[1].concat("\n"); - return memusage; - } - - public int getMediaserverPid(){ - String memoryUsage = null; - int pidvalue = 0; - memoryUsage = captureMediaserverInfo(); - String[] poList2 = memoryUsage.split("\t|\\s+"); - String pid = poList2[1]; - pidvalue = Integer.parseInt(pid); - Log.v(TAG, "PID = " + pidvalue); - return pidvalue; - } - - public int getMediaserverVsize(){ - String memoryUsage = captureMediaserverInfo(); - String[] poList2 = memoryUsage.split("\t|\\s+"); - String vsize = poList2[3]; - int vsizevalue = Integer.parseInt(vsize); - Log.v(TAG, "VSIZE = " + vsizevalue); - return vsizevalue; - } - - public boolean validateMemoryResult (int startPid, int startMemory, Writer output) throws Exception { - Thread.sleep(20000); - mEndPid = getMediaserverPid(); - mEndMemory = getMediaserverVsize(); - output.write("Start Memory = " + startMemory + "\n"); - output.write("End Memory = " + mEndMemory + "\n"); - Log.v(TAG, "End memory :" + mEndMemory); - //Write the total memory different into the output file - output.write("The total diff = " + (mEndMemory - startMemory)); - output.write("\n\n"); - //mediaserver crash - if (startPid != mEndPid){ - output.write("mediaserver died. Test failed\n"); - return false; - } - //memory leak greter than the tolerant - if ((mEndMemory - startMemory) > MAX_ACCEPTED_MEMORY_LEAK_KB ) - return false; - return true; - } - - @LargeTest - public void testImageCapture() { + public void captureImages(String reportTag, Instrumentation inst) { int total_num_of_images = CameraStressTestRunner.mImageIterations; + Log.v(TAG, "no of images = " + total_num_of_images); //TODO(yslau): Need to integrate the outoput with the central dashboard, //write to a txt file as a temp solution - String camera_mem_out = - Environment.getExternalStorageDirectory().toString() + "/ImageCaptureMemOut.txt"; boolean memoryResult = false; - Instrumentation inst = getInstrumentation(); - File imageCaptureMemFile = new File(camera_mem_out); - - mStartPid = getMediaserverPid(); - mStartMemory = getMediaserverVsize(); - Log.v(TAG, "start memory : " + mStartMemory); + KeyEvent focusEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_FOCUS); try { - Writer output = new BufferedWriter(new FileWriter(imageCaptureMemFile, true)); - output.write("Camera Image capture\n"); - output.write("No of loops : " + total_num_of_images + "\n"); - getMemoryWriteToLog(output); - - mOut.write("Camera Image Capture\n"); - mOut.write("No of loops :" + total_num_of_images + "\n"); - mOut.write("loop: "); - //Move the foucs to the image capture button - inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN); + testUtil.writeReportHeader(reportTag, total_num_of_images); for (int i = 0; i < total_num_of_images; i++) { Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN); - inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER); + inst.sendKeySync(focusEvent); + inst.sendCharacterSync(KeyEvent.KEYCODE_CAMERA); Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN); - if (( i % NO_OF_LOOPS_TAKE_MEMORY_SNAPSHOT) == 0){ - Log.v(TAG, "value of i :" + i); - getMemoryWriteToLog(output); - } - mOut.write(" ," + i); - mOut.flush(); + testUtil.writeResult(i); } - Thread.sleep(WAIT_FOR_STABLE_STATE); - memoryResult = validateMemoryResult(mStartPid, mStartMemory, output); - Log.v(TAG, "End memory : " + getMediaserverVsize()); - output.close(); - assertTrue("Camera image capture memory test", memoryResult); } catch (Exception e) { - Log.v(TAG, "Got exception", e); + Log.v(TAG, "Got exception: " + e.toString()); assertTrue("testImageCapture", false); } } @LargeTest - public void testVideoCapture() { - //TODO(yslau): Need to integrate the output with the central dashboard, - //write to a txt file as a temp solution - String camera_mem_out = - Environment.getExternalStorageDirectory().toString() + "/ImageCaptureMemOut.txt"; - boolean memoryResult = false; - int total_num_of_videos = CameraStressTestRunner.mVideoIterations; - int video_duration = CameraStressTestRunner.mVideoDuration; - + public void testBackImageCapture() throws Exception { Instrumentation inst = getInstrumentation(); - File imageCaptureMemFile = new File(camera_mem_out); - mStartPid = getMediaserverPid(); - mStartMemory = getMediaserverVsize(); - Log.v(TAG, "start memory : " + mStartMemory); - - try { - Writer output = new BufferedWriter(new FileWriter(imageCaptureMemFile, true)); - output.write("Camera Video capture\n"); - output.write("No of loops : " + total_num_of_videos + "\n"); - getMemoryWriteToLog(output); - mOut.write("Camera Video Capture\n"); - mOut.write("No of loops :" + total_num_of_videos + "\n"); - mOut.write("loop: "); - // Switch to the video mode - Intent intent = new Intent(); - intent.setClass(getInstrumentation().getTargetContext(), - VideoCamera.class); - getActivity().startActivity(intent); - for (int i = 0; i < total_num_of_videos; i++) { - Thread.sleep(WAIT_FOR_PREVIEW); - // record a video - inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER); - Thread.sleep(video_duration); - inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER); - Thread.sleep(WAIT_FOR_PREVIEW); - mOut.write(" ," + i); - mOut.flush(); - } - Thread.sleep(WAIT_FOR_STABLE_STATE); - memoryResult = validateMemoryResult(mStartPid, mStartMemory, output); - Log.v(TAG, "End memory : " + getMediaserverVsize()); - output.close(); - assertTrue("Camera video capture memory test", memoryResult); - } catch (Exception e) { - Log.v(TAG, "Got exception", e); - fail("Fails to capture video"); - } + Intent intent = new Intent(); + + intent.setClass(getInstrumentation().getTargetContext(), Camera.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(EXTRAS_CAMERA_FACING, + android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK); + Activity act = inst.startActivitySync(intent); + Thread.sleep(WAIT_FOR_SWITCH_CAMERA); + captureImages("Back Camera Image Capture\n", inst); + act.finish(); } + @LargeTest + public void testFrontImageCapture() throws Exception { + Instrumentation inst = getInstrumentation(); + Intent intent = new Intent(); + + intent.setClass(getInstrumentation().getTargetContext(), Camera.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(EXTRAS_CAMERA_FACING, + android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT); + Activity act = inst.startActivitySync(intent); + Thread.sleep(WAIT_FOR_SWITCH_CAMERA); + captureImages("Front Camera Image Capture\n", inst); + act.finish(); + } } diff --git a/tests/src/com/android/camera/stress/TestUtil.java b/tests/src/com/android/camera/stress/TestUtil.java new file mode 100644 index 0000000..64e2039 --- /dev/null +++ b/tests/src/com/android/camera/stress/TestUtil.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2011 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 android.os.Environment; +import java.io.FileWriter; +import java.io.BufferedWriter; + + +/** + * Collection of utility functions used for the test. + */ +public class TestUtil { + public BufferedWriter mOut; + public FileWriter mfstream; + + public TestUtil() { + } + + public void prepareOutputFile() throws Exception { + String camera_test_output_file = + Environment.getExternalStorageDirectory().toString() + "/mediaStressOut.txt"; + mfstream = new FileWriter(camera_test_output_file, true); + mOut = new BufferedWriter(mfstream); + } + + public void closeOutputFile() throws Exception { + mOut.write("\n"); + mOut.close(); + mfstream.close(); + } + + public void writeReportHeader(String reportTag, int iteration) throws Exception { + mOut.write(reportTag); + mOut.write("No of loops :" + iteration + "\n"); + mOut.write("loop: "); + } + + public void writeResult(int iteration) throws Exception { + mOut.write(" ," + iteration); + mOut.flush(); + } +} diff --git a/tests/src/com/android/camera/stress/VideoCapture.java b/tests/src/com/android/camera/stress/VideoCapture.java new file mode 100755 index 0000000..d0c4a10 --- /dev/null +++ b/tests/src/com/android/camera/stress/VideoCapture.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2010 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.Camera; +import com.android.camera.VideoCamera; +import com.android.camera.stress.TestUtil; + +import android.app.Activity; +import android.app.Instrumentation; +import android.content.Intent; +import android.test.ActivityInstrumentationTestCase2; +import android.test.suitebuilder.annotation.LargeTest; +import android.util.Log; +import android.view.KeyEvent; + +import com.android.camera.stress.ImageCapture; +import com.android.camera.stress.CameraStressTestRunner; +/** + * Junit / Instrumentation test case for camera test + * + * Running the test suite: + * + * adb shell am instrument \ + * -e class com.android.camera.stress.VideoCapture \ + * -w com.google.android.camera.tests/android.test.InstrumentationTestRunner + * + */ + +public class VideoCapture extends ActivityInstrumentationTestCase2 <VideoCamera> { + private String TAG = "VideoCapture"; + private static final long WAIT_FOR_PREVIEW = 1500; //1.5 seconds + private static final long WAIT_FOR_SWITCH_CAMERA = 3000; //2 seconds + + // Private intent extras which control the camera facing. + private final static String EXTRAS_CAMERA_FACING = + "android.intent.extras.CAMERA_FACING"; + + private TestUtil testUtil = new TestUtil(); + + public VideoCapture() { + super(VideoCamera.class); + } + + @Override + protected void setUp() throws Exception { + testUtil.prepareOutputFile(); + super.setUp(); + } + + @Override + protected void tearDown() throws Exception { + testUtil.closeOutputFile(); + super.tearDown(); + } + + @LargeTest + public void captureVideos(String reportTag, Instrumentation inst) throws Exception{ + boolean memoryResult = false; + int total_num_of_videos = CameraStressTestRunner.mVideoIterations; + int video_duration = CameraStressTestRunner.mVideoDuration; + testUtil.writeReportHeader(reportTag, total_num_of_videos); + + for (int i = 0; i < total_num_of_videos; i++) { + Thread.sleep(WAIT_FOR_PREVIEW); + // record a video + inst.sendCharacterSync(KeyEvent.KEYCODE_CAMERA); + Thread.sleep(video_duration); + inst.sendCharacterSync(KeyEvent.KEYCODE_CAMERA); + testUtil.writeResult(i); + } + } + + @LargeTest + public void testBackVideoCapture() throws Exception { + Instrumentation inst = getInstrumentation(); + Intent intent = new Intent(); + + intent.setClass(getInstrumentation().getTargetContext(), VideoCamera.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(EXTRAS_CAMERA_FACING, + android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK); + Activity act = inst.startActivitySync(intent); + Thread.sleep(WAIT_FOR_SWITCH_CAMERA); + captureVideos("Back Camera Video Capture\n", inst); + act.finish(); + } + + @LargeTest + public void testFrontVideoCapture() throws Exception { + Instrumentation inst = getInstrumentation(); + Intent intent = new Intent(); + + intent.setClass(getInstrumentation().getTargetContext(), VideoCamera.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(EXTRAS_CAMERA_FACING, + android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT); + Activity act = inst.startActivitySync(intent); + Thread.sleep(WAIT_FOR_SWITCH_CAMERA); + captureVideos("Front Camera Video Capture\n", inst); + act.finish(); + } +} |