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}