141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi/*
241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * Copyright (C) 2012 The Android Open Source Project
341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi *
441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * Licensed under the Apache License, Version 2.0 (the "License");
541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * you may not use this file except in compliance with the License.
641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * You may obtain a copy of the License at
741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi *
841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi *      http://www.apache.org/licenses/LICENSE-2.0
941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi *
1041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * Unless required by applicable law or agreed to in writing, software
1141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * distributed under the License is distributed on an "AS IS" BASIS,
1241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * See the License for the specific language governing permissions and
1441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * limitations under the License.
1541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi */
1641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
1741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchipackage com.android.mediaframeworktest.stress;
1841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
1941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport com.android.mediaframeworktest.MediaFrameworkTest;
206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport com.android.mediaframeworktest.helpers.CameraTestHelper;
2141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
2241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.BufferedWriter;
2341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.File;
2441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.FileWriter;
2541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.Writer;
2641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.util.concurrent.Semaphore;
2741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.util.concurrent.TimeUnit;
28bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchiimport java.util.List;
2941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
30c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.hardware.Camera.Parameters;
3141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.os.Environment;
3241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.os.Handler;
3341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.os.Looper;
3441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.test.ActivityInstrumentationTestCase2;
3541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.test.suitebuilder.annotation.LargeTest;
3641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.util.Log;
3741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.view.SurfaceHolder;
3841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
3941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi/**
40c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * Junit / Instrumentation test case for the following camera APIs:
41c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi *  - camera zoom
42c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi *  - scene mode
4341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi *
4441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * adb shell am instrument
4541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi *  -e class com.android.mediaframeworktest.stress.CameraStressTest
4641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi *  -w com.android.mediaframeworktest/.CameraStressTestRunner
4741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi */
4841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchipublic class CameraStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
4941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
50bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi    private static final int NUMBER_OF_SCENE_MODE_LOOPS = 10;
51c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private static final int NUMBER_OF_ZOOM_LOOPS = 100;
5241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    private static final long WAIT_TIMEOUT = 10 * 1000; // 10 seconds
53bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi    private static final String CAMERA_STRESS_OUTPUT = "cameraStressOutput.txt";
5441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
55c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private CameraTestHelper mCameraTestHelper;
5641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    private Handler mHandler;
57c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private Thread mLooperThread;
58bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi    private Writer mOutput;
59bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi
60c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private String TAG = "CameraStressTest";
61c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
6241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    public CameraStressTest() {
6341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
6441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    }
6541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
6641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    protected void setUp() throws Exception {
6741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        final Semaphore sem = new Semaphore(0);
6841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        mLooperThread = new Thread() {
6941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            @Override
7041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            public void run() {
7141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                Log.v(TAG, "starting looper");
7241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                Looper.prepare();
7341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                mHandler = new Handler();
7441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                sem.release();
7541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                Looper.loop();
7641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                Log.v(TAG, "quit looper");
7741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            }
7841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        };
7941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        mLooperThread.start();
8041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        if (!sem.tryAcquire(WAIT_TIMEOUT, TimeUnit.MILLISECONDS)) {
8141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            fail("Failed to start the looper.");
8241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        }
8341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        getActivity();
8441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        super.setUp();
85bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi
86c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        mCameraTestHelper = new CameraTestHelper();
87c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        File stressOutFile = new File(String.format("%s/%s",
88c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                Environment.getExternalStorageDirectory(), CAMERA_STRESS_OUTPUT));
89bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi        mOutput = new BufferedWriter(new FileWriter(stressOutFile, true));
90c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        mOutput.write(this.getName() + "\n");
9141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    }
9241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
9341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    @Override
9441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    protected void tearDown() throws Exception {
9541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        if (mHandler != null) {
9641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            mHandler.getLooper().quit();
9741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            mHandler = null;
9841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        }
9941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        if (mLooperThread != null) {
10041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            mLooperThread.join(WAIT_TIMEOUT);
10141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            if (mLooperThread.isAlive()) {
10241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                fail("Failed to stop the looper.");
10341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            }
10441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            mLooperThread = null;
10541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        }
106bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi        mOutput.write("\n\n");
107bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi        mOutput.close();
10841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        super.tearDown();
10941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    }
11041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
11141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    private void runOnLooper(final Runnable command) throws InterruptedException {
11241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        final Semaphore sem = new Semaphore(0);
11341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        mHandler.post(new Runnable() {
11441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            @Override
11541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            public void run() {
11641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                try {
11741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                    command.run();
11841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                } finally {
11941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                    sem.release();
12041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                }
12141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            }
12241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        });
12341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        if (!sem.tryAcquire(WAIT_TIMEOUT, TimeUnit.MILLISECONDS)) {
12441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            fail("Failed to run the command on the looper.");
12541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        }
12641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    }
12741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
128c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
129c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Stress test iterating on the various scene modes (action, night, party, etc.)
130c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
131c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
132c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testStressCameraSceneModes() throws Exception {
133c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        try {
134c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            SurfaceHolder surfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
135c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            Parameters params = mCameraTestHelper.getCameraParameters();
136c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            List<String> supportedSceneModes = params.getSupportedSceneModes();
137c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            assertNotNull("No scene modes supported", supportedSceneModes);
13841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
139c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            mOutput.write("Total number of loops: " +
140c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    (NUMBER_OF_SCENE_MODE_LOOPS * supportedSceneModes.size()) + "\n");
141c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            Log.v(TAG, "Start preview");
142c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            mOutput.write("No of loop: ");
14341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
144c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            for (int i = 0; i < supportedSceneModes.size(); i++) {
145c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                for (int j = 0; j < NUMBER_OF_SCENE_MODE_LOOPS; j++) {
146c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    runOnLooper(new Runnable() {
147c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                        @Override
148c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                        public void run() {
149c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                            mCameraTestHelper.setupCameraTest();
150c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                        }
151c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    });
152c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    Log.v(TAG, "Setting scene mode to " + supportedSceneModes.get(i));
153c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setSceneMode(supportedSceneModes.get(i));
154c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    mCameraTestHelper.setParameters(params);
155c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    mCameraTestHelper.startCameraPreview(surfaceHolder);
156c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    mCameraTestHelper.capturePhoto();
15741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
158c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    if (i == 0 && j == 0) {
159c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                        mOutput.write(Integer.toString(j + i * NUMBER_OF_SCENE_MODE_LOOPS));
160c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    } else {
161c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                        mOutput.write(", " + (j + i * NUMBER_OF_SCENE_MODE_LOOPS));
16241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                    }
16341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                }
16441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            }
165c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            mCameraTestHelper.cleanupTestImages();
166bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi        } catch (Exception e) {
167c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            Log.e(TAG, e.toString());
168c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            fail("Camera scene mode test Exception");
16941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        }
17041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    }
17141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
172c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
173c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Stress test iterating on the range of supported camera zoom levels
174c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
17541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    @LargeTest
17641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi    public void testStressCameraZoom() throws Exception {
17741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        try {
178c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            SurfaceHolder surfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
179c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            Parameters params = mCameraTestHelper.getCameraParameters();
18041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
18141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            if (!params.isSmoothZoomSupported() && !params.isZoomSupported()) {
18241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                Log.v(TAG, "Device camera does not support zoom");
183c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                fail("Camera zoom stress test failed due to unsupported feature");
184bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi            } else {
18541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                Log.v(TAG, "Device camera does support zoom");
186c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                Log.v(TAG, "Start preview");
187c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                mOutput.write("Total number of loops: " + NUMBER_OF_ZOOM_LOOPS + "\n");
188c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                mOutput.write("No of loops: ");
18941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
19041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                int nextZoomLevel = 0;
19141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
19241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                for (int i = 0; i < NUMBER_OF_ZOOM_LOOPS; i++) {
19341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                    runOnLooper(new Runnable() {
19441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                        @Override
19541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                        public void run() {
196c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                            mCameraTestHelper.setupCameraTest();
19741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                        }
19841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                    });
19941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
200c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    mCameraTestHelper.startCameraPreview(surfaceHolder);
201c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params = mCameraTestHelper.mCamera.getParameters();
20241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                    int currentZoomLevel = params.getZoom();
20341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
20441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                    if (nextZoomLevel >= params.getMaxZoom()) {
20541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                        nextZoomLevel = 0;
20641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                    }
20741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                    ++nextZoomLevel;
20841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
20941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                    if (params.isSmoothZoomSupported()) {
210c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                        mCameraTestHelper.mCamera.startSmoothZoom(nextZoomLevel);
211bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi                    } else {
21241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                        params.setZoom(nextZoomLevel);
213c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                        mCameraTestHelper.setParameters(params);
21441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                    }
215c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    mCameraTestHelper.capturePhoto();
21641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi
217bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi                    if (i == 0) {
218bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi                        mOutput.write(Integer.toString(i));
219bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi                    } else {
220bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi                        mOutput.write(", " + i);
221bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi                    }
22241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi                }
22341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi            }
224c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            mCameraTestHelper.cleanupTestImages();
225bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi        } catch (Exception e) {
226bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi            Log.e(TAG, e.toString());
227bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi            fail("Camera zoom stress test Exception");
22841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi        }
229bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi    }
23041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi}
231