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}