MediaPlayerStressTest.java revision 796c93b11096002db8ee8fff670ba2a1980877d9
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; 20796c93b11096002db8ee8fff670ba2a1980877d9Xia Wangimport com.android.mediaframeworktest.MediaPlayerStressTestRunner; 21f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 22796c93b11096002db8ee8fff670ba2a1980877d9Xia Wangimport android.os.Bundle; 23e60393ae7168e97922dd7d4821a69d5546a6a522Yu Shan Emily Lauimport android.os.Environment; 24f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport android.test.ActivityInstrumentationTestCase2; 25f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport android.test.suitebuilder.annotation.LargeTest; 26f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport android.util.Log; 27f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 28f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lauimport com.android.mediaframeworktest.MediaNames; 29a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport com.android.mediaframeworktest.functional.CodecTest; 30f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 31a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport java.io.BufferedWriter; 32a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport java.io.File; 33a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport java.io.FileWriter; 34a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lauimport java.io.Writer; 35a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau 36f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau/** 37f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau * Junit / Instrumentation test case for the media player 38f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau */ 39003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Laupublic class MediaPlayerStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { 40f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau private String TAG = "MediaPlayerStressTest"; 41796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang private String mMediaSrc; 42f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 43f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau public MediaPlayerStressTest() { 44003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau super("com.android.mediaframeworktest", MediaFrameworkTest.class); 45f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau } 46f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 47f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau protected void setUp() throws Exception { 48003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau //Insert a 2 second before launching the test activity. This is 49003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau //the workaround for the race condition of requesting the updated surface. 50003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau Thread.sleep(2000); 51003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau getActivity(); 52796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang MediaPlayerStressTestRunner mRunner = (MediaPlayerStressTestRunner)getInstrumentation(); 53796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang Bundle arguments = mRunner.getArguments(); 54796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang mMediaSrc = arguments.getString("media-source"); 55796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang if (mMediaSrc == null) { 56796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang mMediaSrc = MediaNames.MEDIA_SAMPLE_POOL; 57796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang } 58f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau super.setUp(); 59f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau } 60f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 61a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalPlaybackError = 0; 62a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalComplete = 0; 63a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalInfoUnknown = 0; 64a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalVideoTrackLagging = 0; 65a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalBadInterleaving = 0; 66a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalNotSeekable = 0; 67a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private int mTotalMetaDataUpdate = 0; 68a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau 69e60393ae7168e97922dd7d4821a69d5546a6a522Yu Shan Emily Lau //Test result output file 70e60393ae7168e97922dd7d4821a69d5546a6a522Yu Shan Emily Lau private static final String PLAYBACK_RESULT = "PlaybackTestResult.txt"; 71e60393ae7168e97922dd7d4821a69d5546a6a522Yu Shan Emily Lau 72a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private void writeTestOutput(String filename, Writer output) throws Exception{ 73a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.write("File Name: " + filename); 74a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.write(" Complete: " + CodecTest.onCompleteSuccess); 75a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.write(" Error: " + CodecTest.mPlaybackError); 7685305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau output.write(" Unknown Info: " + CodecTest.mMediaInfoUnknownCount); 7785305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau output.write(" Track Lagging: " + CodecTest.mMediaInfoVideoTrackLaggingCount); 78414e15309cfcfd792cb63b53ea6b2b4f426ae7d4Yu Shan Emily Lau output.write(" Bad Interleaving: " + CodecTest.mMediaInfoBadInterleavingCount); 7985305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau output.write(" Not Seekable: " + CodecTest.mMediaInfoNotSeekableCount); 8085305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau output.write(" Info Meta data update: " + CodecTest.mMediaInfoMetdataUpdateCount); 81a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.write("\n"); 82a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 83a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau 84a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private void writeTestSummary(Writer output) throws Exception{ 85a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.write("Total Result:\n"); 86ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau output.write("Total Complete: " + mTotalComplete + "\n"); 87ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau output.write("Total Error: " + mTotalPlaybackError + "\n"); 88414e15309cfcfd792cb63b53ea6b2b4f426ae7d4Yu Shan Emily Lau output.write("Total Unknown Info: " + mTotalInfoUnknown + "\n"); 89ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau output.write("Total Track Lagging: " + mTotalVideoTrackLagging + "\n" ); 90414e15309cfcfd792cb63b53ea6b2b4f426ae7d4Yu Shan Emily Lau output.write("Total Bad Interleaving: " + mTotalBadInterleaving + "\n"); 91ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau output.write("Total Not Seekable: " + mTotalNotSeekable + "\n"); 92ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau output.write("Total Info Meta data update: " + mTotalMetaDataUpdate + "\n"); 93a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.write("\n"); 94a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 95f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 96a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private void updateTestResult(){ 97a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau if (CodecTest.onCompleteSuccess){ 98a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau mTotalComplete++; 99a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 100a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau else if (CodecTest.mPlaybackError){ 101a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau mTotalPlaybackError++; 102a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 10385305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mTotalInfoUnknown += CodecTest.mMediaInfoUnknownCount; 10485305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mTotalVideoTrackLagging += CodecTest.mMediaInfoVideoTrackLaggingCount; 10585305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mTotalBadInterleaving += CodecTest.mMediaInfoBadInterleavingCount; 10685305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mTotalNotSeekable += CodecTest.mMediaInfoNotSeekableCount; 10785305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mTotalMetaDataUpdate += CodecTest.mMediaInfoMetdataUpdateCount; 108f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau } 109f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau 110a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau //Test that will start the playback for all the videos 111a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau //under the samples folder 112f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau @LargeTest 113a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau public void testVideoPlayback() throws Exception { 114a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau String fileWithError = "Filename:\n"; 115e60393ae7168e97922dd7d4821a69d5546a6a522Yu Shan Emily Lau File playbackOutput = new File(Environment.getExternalStorageDirectory(), PLAYBACK_RESULT); 116a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau Writer output = new BufferedWriter(new FileWriter(playbackOutput, true)); 117a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau 118a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau boolean testResult = true; 119a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau // load directory files 120a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau boolean onCompleteSuccess = false; 121796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang String[] children = MediaNames.NETWORK_VIDEO_FILES; 122796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang if (MediaNames.MEDIA_SAMPLE_POOL.equals(mMediaSrc)) { 123796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang File dir = new File(mMediaSrc); 124796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang children = dir.list(); 125796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang } 126a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau if (children == null) { 127a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau Log.v("MediaPlayerApiTest:testMediaSamples", "dir is empty"); 128a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau return; 129a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } else { 130a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau for (int i = 0; i < children.length; i++) { 131796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang //Get filename 132a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau String filename = children[i]; 133a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau onCompleteSuccess = 134796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang CodecTest.playMediaSamples(mMediaSrc + filename); 135a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau if (!onCompleteSuccess){ 136a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau //Don't fail the test right away, print out the failure file. 137a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau fileWithError += filename + '\n'; 138a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau Log.v(TAG, "Failure File : " + fileWithError); 139a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau testResult = false; 140f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau } 141a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau Thread.sleep(3000); 142a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau //Write test result to an output file 143a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau writeTestOutput(filename,output); 144a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau //Get the summary 145a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau updateTestResult(); 146f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau } 147a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau writeTestSummary(output); 148a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau output.close(); 149a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau assertTrue("testMediaSamples", testResult); 150a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 151f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau } 152a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau}