19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.mediaframeworktest.stress;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1920a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.mediaframeworktest.MediaFrameworkTest;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
22f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lauimport java.io.BufferedWriter;
23f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lauimport java.io.File;
24f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lauimport java.io.FileWriter;
25f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lauimport java.io.Writer;
2679a3981e3885b9144bb3d458682141eed7365939Jeff Brownimport java.util.concurrent.Semaphore;
2779a3981e3885b9144bb3d458682141eed7365939Jeff Brownimport java.util.concurrent.TimeUnit;
28f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.hardware.Camera;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaPlayer;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaRecorder;
3279a3981e3885b9144bb3d458682141eed7365939Jeff Brownimport android.os.Handler;
3320a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lauimport android.os.Looper;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.ActivityInstrumentationTestCase2;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.SurfaceHolder;
3848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lauimport com.android.mediaframeworktest.MediaRecorderStressTestRunner;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Junit / Instrumentation test case for the media player api
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class MediaRecorderStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String TAG = "MediaRecorderStressTest";
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private MediaRecorder mRecorder;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Camera mCamera;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final int NUMBER_OF_CAMERA_STRESS_LOOPS = 100;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final int NUMBER_OF_RECORDER_STRESS_LOOPS = 100;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final int NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS = 50;
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final int NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER = 200;
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final long WAIT_TIME_CAMERA_TEST = 3000;  // 3 second
5655a6ac8c542ae831b0d041360cab4bbc7212ade5Yu Shan Emily Lau    private static final long WAIT_TIME_RECORDER_TEST = 6000;  // 6 second
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final String OUTPUT_FILE = "/sdcard/temp";
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final String OUTPUT_FILE_EXT = ".3gp";
59f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau    private static final String MEDIA_STRESS_OUTPUT =
60f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        "/sdcard/mediaStressOutput.txt";
6120a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau    private final CameraErrorCallback mCameraErrorCallback = new CameraErrorCallback();
6220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau    private final RecorderErrorCallback mRecorderErrorCallback = new RecorderErrorCallback();
6320a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau
6479a3981e3885b9144bb3d458682141eed7365939Jeff Brown    private final static int WAIT_TIMEOUT = 10000;
6579a3981e3885b9144bb3d458682141eed7365939Jeff Brown    private Thread mLooperThread;
6679a3981e3885b9144bb3d458682141eed7365939Jeff Brown    private Handler mHandler;
6779a3981e3885b9144bb3d458682141eed7365939Jeff Brown
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public MediaRecorderStressTest() {
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void setUp() throws Exception {
7379a3981e3885b9144bb3d458682141eed7365939Jeff Brown        final Semaphore sem = new Semaphore(0);
7479a3981e3885b9144bb3d458682141eed7365939Jeff Brown        mLooperThread = new Thread() {
7579a3981e3885b9144bb3d458682141eed7365939Jeff Brown            @Override
7679a3981e3885b9144bb3d458682141eed7365939Jeff Brown            public void run() {
7779a3981e3885b9144bb3d458682141eed7365939Jeff Brown                Log.v(TAG, "starting looper");
7879a3981e3885b9144bb3d458682141eed7365939Jeff Brown                Looper.prepare();
7979a3981e3885b9144bb3d458682141eed7365939Jeff Brown                mHandler = new Handler();
8079a3981e3885b9144bb3d458682141eed7365939Jeff Brown                sem.release();
8179a3981e3885b9144bb3d458682141eed7365939Jeff Brown                Looper.loop();
8279a3981e3885b9144bb3d458682141eed7365939Jeff Brown                Log.v(TAG, "quit looper");
8379a3981e3885b9144bb3d458682141eed7365939Jeff Brown            }
8479a3981e3885b9144bb3d458682141eed7365939Jeff Brown        };
8579a3981e3885b9144bb3d458682141eed7365939Jeff Brown        mLooperThread.start();
8679a3981e3885b9144bb3d458682141eed7365939Jeff Brown        if (! sem.tryAcquire(WAIT_TIMEOUT, TimeUnit.MILLISECONDS)) {
8779a3981e3885b9144bb3d458682141eed7365939Jeff Brown            fail("Failed to start the looper.");
8879a3981e3885b9144bb3d458682141eed7365939Jeff Brown        }
8979a3981e3885b9144bb3d458682141eed7365939Jeff Brown
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        getActivity();
9179a3981e3885b9144bb3d458682141eed7365939Jeff Brown        super.setUp();
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9320a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau
9479a3981e3885b9144bb3d458682141eed7365939Jeff Brown    @Override
9579a3981e3885b9144bb3d458682141eed7365939Jeff Brown    protected void tearDown() throws Exception {
9679a3981e3885b9144bb3d458682141eed7365939Jeff Brown        if (mHandler != null) {
9779a3981e3885b9144bb3d458682141eed7365939Jeff Brown            mHandler.getLooper().quit();
9879a3981e3885b9144bb3d458682141eed7365939Jeff Brown            mHandler = null;
9979a3981e3885b9144bb3d458682141eed7365939Jeff Brown        }
10079a3981e3885b9144bb3d458682141eed7365939Jeff Brown        if (mLooperThread != null) {
10179a3981e3885b9144bb3d458682141eed7365939Jeff Brown            mLooperThread.join(WAIT_TIMEOUT);
10279a3981e3885b9144bb3d458682141eed7365939Jeff Brown            if (mLooperThread.isAlive()) {
10379a3981e3885b9144bb3d458682141eed7365939Jeff Brown                fail("Failed to stop the looper.");
10420a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau            }
10579a3981e3885b9144bb3d458682141eed7365939Jeff Brown            mLooperThread = null;
10620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau        }
10720a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau
10879a3981e3885b9144bb3d458682141eed7365939Jeff Brown        super.tearDown();
10920a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau    }
11020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau
11179a3981e3885b9144bb3d458682141eed7365939Jeff Brown    private void runOnLooper(final Runnable command) throws InterruptedException {
11279a3981e3885b9144bb3d458682141eed7365939Jeff Brown        final Semaphore sem = new Semaphore(0);
11379a3981e3885b9144bb3d458682141eed7365939Jeff Brown        mHandler.post(new Runnable() {
11420a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau            @Override
11520a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau            public void run() {
11679a3981e3885b9144bb3d458682141eed7365939Jeff Brown                try {
11779a3981e3885b9144bb3d458682141eed7365939Jeff Brown                    command.run();
11879a3981e3885b9144bb3d458682141eed7365939Jeff Brown                } finally {
11979a3981e3885b9144bb3d458682141eed7365939Jeff Brown                    sem.release();
12020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                }
12120a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau            }
12279a3981e3885b9144bb3d458682141eed7365939Jeff Brown        });
12379a3981e3885b9144bb3d458682141eed7365939Jeff Brown        if (! sem.tryAcquire(WAIT_TIMEOUT, TimeUnit.MILLISECONDS)) {
12479a3981e3885b9144bb3d458682141eed7365939Jeff Brown            fail("Failed to run the command on the looper.");
12579a3981e3885b9144bb3d458682141eed7365939Jeff Brown        }
12620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau    }
12720a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau
12879a3981e3885b9144bb3d458682141eed7365939Jeff Brown    private final class CameraErrorCallback implements android.hardware.Camera.ErrorCallback {
12979a3981e3885b9144bb3d458682141eed7365939Jeff Brown        public void onError(int error, android.hardware.Camera camera) {
13079a3981e3885b9144bb3d458682141eed7365939Jeff Brown            if (error == android.hardware.Camera.CAMERA_ERROR_SERVER_DIED) {
13179a3981e3885b9144bb3d458682141eed7365939Jeff Brown                assertTrue("Camera test mediaserver died", false);
13220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau            }
13320a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau        }
13420a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau    }
13520a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau
13679a3981e3885b9144bb3d458682141eed7365939Jeff Brown    private final class RecorderErrorCallback implements MediaRecorder.OnErrorListener {
13779a3981e3885b9144bb3d458682141eed7365939Jeff Brown        public void onError(MediaRecorder mr, int what, int extra) {
13879a3981e3885b9144bb3d458682141eed7365939Jeff Brown            // fail the test case no matter what error come up
13979a3981e3885b9144bb3d458682141eed7365939Jeff Brown            assertTrue("mediaRecorder error", false);
14020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau        }
14120a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau    }
14220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Test case for stressing the camera preview.
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testStressCamera() throws Exception {
14620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau        SurfaceHolder mSurfaceHolder;
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
148f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
149f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
150f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.write("Camera start preview stress:\n");
15120a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau        output.write("Total number of loops:" +
152f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau                NUMBER_OF_CAMERA_STRESS_LOOPS + "\n");
15320a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau        try {
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "Start preview");
155f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau            output.write("No of loop: ");
15620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau
15779a3981e3885b9144bb3d458682141eed7365939Jeff Brown            for (int i = 0; i< NUMBER_OF_CAMERA_STRESS_LOOPS; i++) {
15879a3981e3885b9144bb3d458682141eed7365939Jeff Brown                runOnLooper(new Runnable() {
15979a3981e3885b9144bb3d458682141eed7365939Jeff Brown                    @Override
16079a3981e3885b9144bb3d458682141eed7365939Jeff Brown                    public void run() {
16179a3981e3885b9144bb3d458682141eed7365939Jeff Brown                        mCamera = Camera.open();
16220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                    }
16379a3981e3885b9144bb3d458682141eed7365939Jeff Brown                });
16420a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                mCamera.setErrorCallback(mCameraErrorCallback);
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mCamera.setPreviewDisplay(mSurfaceHolder);
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mCamera.startPreview();
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Thread.sleep(WAIT_TIME_CAMERA_TEST);
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mCamera.stopPreview();
16979a3981e3885b9144bb3d458682141eed7365939Jeff Brown                mCamera.release();
170f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau                output.write(" ," + i);
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (Exception e) {
17320a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau            assertTrue("CameraStressTest", false);
17420a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau            Log.v(TAG, e.toString());
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
176f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.write("\n\n");
177f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.close();
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17920a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Test case for stressing the camera preview.
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testStressRecorder() throws Exception {
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String filename;
18420a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau        SurfaceHolder mSurfaceHolder;
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
186f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
187f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
188f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.write("H263 video record- reset after prepare Stress test\n");
189f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.write("Total number of loops:" +
190f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau                NUMBER_OF_RECORDER_STRESS_LOOPS + "\n");
191f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        try {
192f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau            output.write("No of loop: ");
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "Start preview");
19479a3981e3885b9144bb3d458682141eed7365939Jeff Brown            for (int i = 0; i < NUMBER_OF_RECORDER_STRESS_LOOPS; i++) {
19579a3981e3885b9144bb3d458682141eed7365939Jeff Brown                runOnLooper(new Runnable() {
19679a3981e3885b9144bb3d458682141eed7365939Jeff Brown                    @Override
19779a3981e3885b9144bb3d458682141eed7365939Jeff Brown                    public void run() {
19879a3981e3885b9144bb3d458682141eed7365939Jeff Brown                        mRecorder = new MediaRecorder();
19920a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                    }
20079a3981e3885b9144bb3d458682141eed7365939Jeff Brown                });
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "counter = " + i);
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, filename);
20420a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                mRecorder.setOnErrorListener(mRecorderErrorCallback);
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
20620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setOutputFile(filename);
208d8f7c2c2dcc9548bc8808e648904c918ecd1d1baDevaraj Rangasamy                mRecorder.setVideoFrameRate(MediaRecorderStressTestRunner.mFrameRate);
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setVideoSize(176,144);
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "setEncoder");
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "setPreview");
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "prepare");
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.prepare();
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "before release");
21820a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                Thread.sleep(WAIT_TIME_RECORDER_TEST);
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.reset();
22079a3981e3885b9144bb3d458682141eed7365939Jeff Brown                mRecorder.release();
221f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau                output.write(", " + i);
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (Exception e) {
22420a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau            assertTrue("Recorder Stress test", false);
22520a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau            Log.v(TAG, e.toString());
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
227f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.write("\n\n");
228f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.close();
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
23020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Stress test case for switching camera and video recorder preview.
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testStressCameraSwitchRecorder() throws Exception {
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String filename;
23520a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau        SurfaceHolder mSurfaceHolder;
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
237f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
238f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
239f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.write("Camera and video recorder preview switching\n");
240f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.write("Total number of loops:"
241f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau                + NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER + "\n");
24220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau        try {
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "Start preview");
244f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau            output.write("No of loop: ");
24579a3981e3885b9144bb3d458682141eed7365939Jeff Brown            for (int i = 0; i < NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER; i++) {
24679a3981e3885b9144bb3d458682141eed7365939Jeff Brown                runOnLooper(new Runnable() {
24779a3981e3885b9144bb3d458682141eed7365939Jeff Brown                    @Override
24879a3981e3885b9144bb3d458682141eed7365939Jeff Brown                    public void run() {
24979a3981e3885b9144bb3d458682141eed7365939Jeff Brown                        mCamera = Camera.open();
25020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                    }
25179a3981e3885b9144bb3d458682141eed7365939Jeff Brown                });
25220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                mCamera.setErrorCallback(mCameraErrorCallback);
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mCamera.setPreviewDisplay(mSurfaceHolder);
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mCamera.startPreview();
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Thread.sleep(WAIT_TIME_CAMERA_TEST);
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mCamera.stopPreview();
25779a3981e3885b9144bb3d458682141eed7365939Jeff Brown                mCamera.release();
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mCamera = null;
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "release camera");
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, filename);
26279a3981e3885b9144bb3d458682141eed7365939Jeff Brown                runOnLooper(new Runnable() {
26379a3981e3885b9144bb3d458682141eed7365939Jeff Brown                    @Override
26479a3981e3885b9144bb3d458682141eed7365939Jeff Brown                    public void run() {
26579a3981e3885b9144bb3d458682141eed7365939Jeff Brown                        mRecorder = new MediaRecorder();
26620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                    }
26779a3981e3885b9144bb3d458682141eed7365939Jeff Brown                });
26820a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                mRecorder.setOnErrorListener(mRecorderErrorCallback);
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
27020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setOutputFile(filename);
272d8f7c2c2dcc9548bc8808e648904c918ecd1d1baDevaraj Rangasamy                mRecorder.setVideoFrameRate(MediaRecorderStressTestRunner.mFrameRate);
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setVideoSize(176,144);
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "Media recorder setEncoder");
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "mediaRecorder setPreview");
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "prepare");
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.prepare();
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "before release");
28120a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                Thread.sleep(WAIT_TIME_CAMERA_TEST);
28279a3981e3885b9144bb3d458682141eed7365939Jeff Brown                mRecorder.release();
283f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau                Log.v(TAG, "release video recorder");
284f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau                output.write(", " + i);
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (Exception e) {
28720a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau            assertTrue("Camer and recorder switch mode", false);
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, e.toString());
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
290f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.write("\n\n");
291f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.close();
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
29320a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau
29448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau    public void validateRecordedVideo(String recorded_file) {
29548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        try {
29648584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau            MediaPlayer mp = new MediaPlayer();
29748584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau            mp.setDataSource(recorded_file);
29848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau            mp.prepare();
29948584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau            int duration = mp.getDuration();
30048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau            if (duration <= 0){
30148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                assertTrue("stressRecordAndPlayback", false);
30248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau            }
30393aa00c664ae59c2224853f14d30a6671c467ef0Yu Shan Emily Lau            mp.release();
30448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        } catch (Exception e) {
30548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau            assertTrue("stressRecordAndPlayback", false);
30648584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        }
30748584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau    }
30848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau
30948584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau    public void removeRecodedVideo(String filename){
31048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        File video = new File(filename);
31148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        Log.v(TAG, "remove recorded video " + filename);
31248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        video.delete();
31348584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau    }
31448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Stress test case for record a video and play right away.
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testStressRecordVideoAndPlayback() throws Exception {
31848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        int iterations = MediaRecorderStressTestRunner.mIterations;
31948584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        int video_encoder = MediaRecorderStressTestRunner.mVideoEncoder;
32048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        int audio_encoder = MediaRecorderStressTestRunner.mAudioEncdoer;
32148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        int frame_rate = MediaRecorderStressTestRunner.mFrameRate;
32248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        int video_width = MediaRecorderStressTestRunner.mVideoWidth;
32348584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        int video_height = MediaRecorderStressTestRunner.mVideoHeight;
32448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        int bit_rate = MediaRecorderStressTestRunner.mBitRate;
32548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        boolean remove_video = MediaRecorderStressTestRunner.mRemoveVideo;
32648584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        int record_duration = MediaRecorderStressTestRunner.mDuration;
32748584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String filename;
32920a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau        SurfaceHolder mSurfaceHolder;
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
331f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
33248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        Writer output = new BufferedWriter(
33348584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                new FileWriter(stressOutFile, true));
334f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.write("Video record and play back stress test:\n");
335f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.write("Total number of loops:"
336f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau                + NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS + "\n");
337f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        try {
338f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau            output.write("No of loop: ");
33948584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau            for (int i = 0; i < iterations; i++){
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, filename);
34279a3981e3885b9144bb3d458682141eed7365939Jeff Brown                runOnLooper(new Runnable() {
34379a3981e3885b9144bb3d458682141eed7365939Jeff Brown                    @Override
34479a3981e3885b9144bb3d458682141eed7365939Jeff Brown                    public void run() {
34579a3981e3885b9144bb3d458682141eed7365939Jeff Brown                        mRecorder = new MediaRecorder();
34620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                    }
34779a3981e3885b9144bb3d458682141eed7365939Jeff Brown                });
34848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                Log.v(TAG, "iterations : " + iterations);
34948584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                Log.v(TAG, "video_encoder : " + video_encoder);
35048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                Log.v(TAG, "audio_encoder : " + audio_encoder);
35148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                Log.v(TAG, "frame_rate : " + frame_rate);
35248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                Log.v(TAG, "video_width : " + video_width);
35348584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                Log.v(TAG, "video_height : " + video_height);
35448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                Log.v(TAG, "bit rate : " + bit_rate);
35548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                Log.v(TAG, "record_duration : " + record_duration);
35648584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau
35720a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                mRecorder.setOnErrorListener(mRecorderErrorCallback);
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
36020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setOutputFile(filename);
36248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                mRecorder.setVideoFrameRate(frame_rate);
36348584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                mRecorder.setVideoSize(video_width, video_height);
36448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                mRecorder.setVideoEncoder(video_encoder);
36548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                mRecorder.setAudioEncoder(audio_encoder);
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "mediaRecorder setPreview");
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.prepare();
36920a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau                mRecorder.start();
37048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                Thread.sleep(record_duration);
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "Before stop");
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.stop();
37379a3981e3885b9144bb3d458682141eed7365939Jeff Brown                mRecorder.release();
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                //start the playback
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                MediaPlayer mp = new MediaPlayer();
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mp.setDataSource(filename);
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mp.prepare();
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mp.start();
38048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                Thread.sleep(record_duration);
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mp.release();
38248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                validateRecordedVideo(filename);
38348584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                if (remove_video) {
38448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                    removeRecodedVideo(filename);
38548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                }
386f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau                output.write(", " + i);
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (Exception e) {
38925d7094279d2eeda0b18a2ca0104d672c4b3c8e5James Dong            Log.v(TAG, e.toString());
39020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau            assertTrue("record and playback", false);
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
392f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.write("\n\n");
393f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau        output.close();
39420a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau    }
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
396