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}