MediaPlayerStressTest.java revision 414e15309cfcfd792cb63b53ea6b2b4f426ae7d4
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
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.mediaframeworktest.MediaFrameworkTest;
209b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.Activity;
229b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Liimport android.app.Instrumentation;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.hardware.Camera;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaPlayer;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaRecorder;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.ActivityInstrumentationTestCase2;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.SurfaceHolder;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.mediaframeworktest.MediaNames;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.mediaframeworktest.functional.CodecTest;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.BufferedWriter;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileWriter;
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.Writer;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.InstrumentationTestCase;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li/**
44c62f9bd13327937aa2d2f20b44215397120634c1Dave Sparks * Junit / Instrumentation test case for the media player
45da83f4674a564007baac03db062a289c8158d940Benny Wong */
46da83f4674a564007baac03db062a289c8158d940Benny Wongpublic class MediaPlayerStressTest extends InstrumentationTestCase {
47da83f4674a564007baac03db062a289c8158d940Benny Wong    private String TAG = "MediaPlayerStressTest";
48da83f4674a564007baac03db062a289c8158d940Benny Wong
49da83f4674a564007baac03db062a289c8158d940Benny Wong    public MediaPlayerStressTest() {
50da83f4674a564007baac03db062a289c8158d940Benny Wong    }
51da83f4674a564007baac03db062a289c8158d940Benny Wong
52da83f4674a564007baac03db062a289c8158d940Benny Wong    protected void setUp() throws Exception {
53da83f4674a564007baac03db062a289c8158d940Benny Wong        super.setUp();
54da83f4674a564007baac03db062a289c8158d940Benny Wong    }
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mTotalPlaybackError = 0;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mTotalComplete = 0;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mTotalInfoUnknown = 0;
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mTotalVideoTrackLagging = 0;
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mTotalBadInterleaving = 0;
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mTotalNotSeekable = 0;
62e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks    private int mTotalMetaDataUpdate = 0;
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
64e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks    private void writeTestOutput(String filename, Writer output) throws Exception{
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write("File Name: " + filename);
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write(" Complete: " + CodecTest.onCompleteSuccess);
679b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li        output.write(" Error: " + CodecTest.mPlaybackError);
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write(" Unknown Info: " + CodecTest.mMediaInfoUnknownCount);
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write(" Track Lagging: " +  CodecTest.mMediaInfoVideoTrackLaggingCount);
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write(" Bad Interleaving: " + CodecTest.mMediaInfoBadInterleavingCount);
719b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li        output.write(" Not Seekable: " + CodecTest.mMediaInfoNotSeekableCount);
729b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li        output.write(" Info Meta data update: " + CodecTest.mMediaInfoMetdataUpdateCount);
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write("\n");
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void writeTestSummary(Writer output) throws Exception{
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write("Total Result:\n");
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write("Total Complete: " + mTotalComplete + "\n");
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write("Total Error: " + mTotalPlaybackError + "\n");
80e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks        output.write("Total Unknown Info: " + mTotalInfoUnknown + "\n");
81e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks        output.write("Total Track Lagging: " + mTotalVideoTrackLagging + "\n" );
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write("Total Bad Interleaving: " + mTotalBadInterleaving + "\n");
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write("Total Not Seekable: " + mTotalNotSeekable + "\n");
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write("Total Info Meta data update: " + mTotalMetaDataUpdate + "\n");
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        output.write("\n");
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void updateTestResult(){
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (CodecTest.onCompleteSuccess){
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTotalComplete++;
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else if (CodecTest.mPlaybackError){
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTotalPlaybackError++;
949b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li        }
959b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li        mTotalInfoUnknown += CodecTest.mMediaInfoUnknownCount;
969b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li        mTotalVideoTrackLagging += CodecTest.mMediaInfoVideoTrackLaggingCount;
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTotalBadInterleaving += CodecTest.mMediaInfoBadInterleavingCount;
989b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li        mTotalNotSeekable += CodecTest.mMediaInfoNotSeekableCount;
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTotalMetaDataUpdate += CodecTest.mMediaInfoMetdataUpdateCount;
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1019b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Test that will start the playback for all the videos
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //under the samples folder
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
1059b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li    public void testVideoPlayback() throws Exception {
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String fileWithError = "Filename:\n";
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        File playbackOutput = new File("/sdcard/PlaybackTestResult.txt");
1089b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li        Writer output = new BufferedWriter(new FileWriter(playbackOutput, true));
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean testResult = true;
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // load directory files
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean onCompleteSuccess = false;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        File dir = new File(MediaNames.MEDIA_SAMPLE_POOL);
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1159b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li        Instrumentation inst = getInstrumentation();
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Intent intent = new Intent();
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        intent.setClass(getInstrumentation().getTargetContext(), MediaFrameworkTest.class);
1199b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String[] children = dir.list();
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (children == null) {
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v("MediaPlayerApiTest:testMediaSamples", "dir is empty");
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (int i = 0; i < children.length; i++) {
1279b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li                Activity act = inst.startActivitySync(intent);
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                //Get filename of directory
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                String filename = children[i];
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                onCompleteSuccess =
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    CodecTest.playMediaSamples(dir + "/" + filename);
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (!onCompleteSuccess){
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    //Don't fail the test right away, print out the failure file.
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    fileWithError += filename + '\n';
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Log.v(TAG, "Failure File : " + fileWithError);
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    testResult = false;
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Thread.sleep(3000);
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                //Call onCreat to recreate the surface
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                act.finish();
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                //Write test result to an output file
1429b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li                writeTestOutput(filename,output);
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                //Get the summary
1449b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li                updateTestResult();
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            writeTestSummary(output);
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            output.close();
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            assertTrue("testMediaSamples", testResult);
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project       }
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}