MediaPlayerStressTest.java revision e60393ae7168e97922dd7d4821a69d5546a6a522
1f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau/* 2f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * Copyright (C) 2009 The Android Open Source Project 3f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * 4f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * Licensed under the Apache License, Version 2.0 (the "License"); 5f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * you may not use this file except in compliance with the License. 6f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * You may obtain a copy of the License at 7f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * 8f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * http://www.apache.org/licenses/LICENSE-2.0 9f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * 10f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * Unless required by applicable law or agreed to in writing, software 11f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * distributed under the License is distributed on an "AS IS" BASIS, 12f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * See the License for the specific language governing permissions and 14f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * limitations under the License. 15f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau */ 16f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 17f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Laupackage com.android.mediaframeworktest.stress; 18f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 19f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport com.android.mediaframeworktest.MediaFrameworkTest; 20f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 21a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport android.app.Activity; 22a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport android.app.Instrumentation; 23a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport android.content.Intent; 24f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport android.hardware.Camera; 25f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport android.media.MediaPlayer; 26f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport android.media.MediaRecorder; 27e60393ae7168e97922dd7d4821a69d5546a6a522Yu Shan Emily Lauimport android.os.Environment; 28f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport android.test.ActivityInstrumentationTestCase2; 29f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport android.test.suitebuilder.annotation.LargeTest; 30f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport android.util.Log; 31f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport android.view.SurfaceHolder; 32f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 33f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport com.android.mediaframeworktest.MediaNames; 34a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport com.android.mediaframeworktest.functional.CodecTest; 35f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 36a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport java.io.BufferedWriter; 37a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport java.io.File; 38a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport java.io.FileWriter; 39a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport java.io.Writer; 40a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau 41a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport android.test.AndroidTestCase; 42a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport android.test.InstrumentationTestCase; 43f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 44f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau/** 45f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * Junit / Instrumentation test case for the media player 46f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau */ 47003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Laupublic class MediaPlayerStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { 48f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau private String TAG = "MediaPlayerStressTest"; 49f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 50f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau public MediaPlayerStressTest() { 51003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau super("com.android.mediaframeworktest", MediaFrameworkTest.class); 52f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau } 53f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 54f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau protected void setUp() throws Exception { 55003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau //Insert a 2 second before launching the test activity. This is 56003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau //the workaround for the race condition of requesting the updated surface. 57003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau Thread.sleep(2000); 58003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau getActivity(); 59f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau super.setUp(); 60f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau } 61f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 62a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalPlaybackError = 0; 63a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalComplete = 0; 64a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalInfoUnknown = 0; 65a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalVideoTrackLagging = 0; 66a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalBadInterleaving = 0; 67a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalNotSeekable = 0; 68a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalMetaDataUpdate = 0; 69a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau 70e60393ae7168e97922dd7d4821a69d5546a6a522Yu Shan Emily Lau //Test result output file 71e60393ae7168e97922dd7d4821a69d5546a6a522Yu Shan Emily Lau private static final String PLAYBACK_RESULT = "PlaybackTestResult.txt"; 72e60393ae7168e97922dd7d4821a69d5546a6a522Yu Shan Emily Lau 73a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private void writeTestOutput(String filename, Writer output) throws Exception{ 74a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.write("File Name: " + filename); 75a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.write(" Complete: " + CodecTest.onCompleteSuccess); 76a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.write(" Error: " + CodecTest.mPlaybackError); 7785305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau output.write(" Unknown Info: " + CodecTest.mMediaInfoUnknownCount); 7885305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau output.write(" Track Lagging: " + CodecTest.mMediaInfoVideoTrackLaggingCount); 79414e15309cfcfd792cb63b53ea6b2b4f426ae7d4Yu Shan Emily Lau output.write(" Bad Interleaving: " + CodecTest.mMediaInfoBadInterleavingCount); 8085305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau output.write(" Not Seekable: " + CodecTest.mMediaInfoNotSeekableCount); 8185305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau output.write(" Info Meta data update: " + CodecTest.mMediaInfoMetdataUpdateCount); 82a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.write("\n"); 83a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 84a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau 85a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private void writeTestSummary(Writer output) throws Exception{ 86a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.write("Total Result:\n"); 87ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau output.write("Total Complete: " + mTotalComplete + "\n"); 88ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau output.write("Total Error: " + mTotalPlaybackError + "\n"); 89414e15309cfcfd792cb63b53ea6b2b4f426ae7d4Yu Shan Emily Lau output.write("Total Unknown Info: " + mTotalInfoUnknown + "\n"); 90ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau output.write("Total Track Lagging: " + mTotalVideoTrackLagging + "\n" ); 91414e15309cfcfd792cb63b53ea6b2b4f426ae7d4Yu Shan Emily Lau output.write("Total Bad Interleaving: " + mTotalBadInterleaving + "\n"); 92ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau output.write("Total Not Seekable: " + mTotalNotSeekable + "\n"); 93ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau output.write("Total Info Meta data update: " + mTotalMetaDataUpdate + "\n"); 94a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.write("\n"); 95a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 96f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 97a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private void updateTestResult(){ 98a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau if (CodecTest.onCompleteSuccess){ 99a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau mTotalComplete++; 100a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 101a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau else if (CodecTest.mPlaybackError){ 102a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau mTotalPlaybackError++; 103a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 10485305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mTotalInfoUnknown += CodecTest.mMediaInfoUnknownCount; 10585305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mTotalVideoTrackLagging += CodecTest.mMediaInfoVideoTrackLaggingCount; 10685305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mTotalBadInterleaving += CodecTest.mMediaInfoBadInterleavingCount; 10785305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mTotalNotSeekable += CodecTest.mMediaInfoNotSeekableCount; 10885305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mTotalMetaDataUpdate += CodecTest.mMediaInfoMetdataUpdateCount; 109f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau } 110f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 111a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau //Test that will start the playback for all the videos 112a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau //under the samples folder 113f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau @LargeTest 114a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau public void testVideoPlayback() throws Exception { 115a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau String fileWithError = "Filename:\n"; 116e60393ae7168e97922dd7d4821a69d5546a6a522Yu Shan Emily Lau File playbackOutput = new File(Environment.getExternalStorageDirectory(), PLAYBACK_RESULT); 117a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau Writer output = new BufferedWriter(new FileWriter(playbackOutput, true)); 118a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau 119a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau boolean testResult = true; 120a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau // load directory files 121a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau boolean onCompleteSuccess = false; 122a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau File dir = new File(MediaNames.MEDIA_SAMPLE_POOL); 123a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau String[] children = dir.list(); 124a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau if (children == null) { 125a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau Log.v("MediaPlayerApiTest:testMediaSamples", "dir is empty"); 126a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau return; 127a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } else { 128a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau for (int i = 0; i < children.length; i++) { 129a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau //Get filename of directory 130a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau String filename = children[i]; 131a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau onCompleteSuccess = 132a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau CodecTest.playMediaSamples(dir + "/" + filename); 133a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau if (!onCompleteSuccess){ 134a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau //Don't fail the test right away, print out the failure file. 135a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau fileWithError += filename + '\n'; 136a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau Log.v(TAG, "Failure File : " + fileWithError); 137a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau testResult = false; 138f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau } 139a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau Thread.sleep(3000); 140a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau //Write test result to an output file 141a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau writeTestOutput(filename,output); 142a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau //Get the summary 143a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau updateTestResult(); 144f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau } 145a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau writeTestSummary(output); 146a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.close(); 147a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau assertTrue("testMediaSamples", testResult); 148a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 149f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau } 150a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau}