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;
68333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim    private int mTotalFailedToCompleteWithNoError = 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);
82333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim        output.write(" Failed To Complete With No Error: " +
83333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim                CodecTest.mFailedToCompleteWithNoError);
84a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau        output.write("\n");
85a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau    }
86a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau
87a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau    private void writeTestSummary(Writer output) throws Exception{
88a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau        output.write("Total Result:\n");
89ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau        output.write("Total Complete: " + mTotalComplete + "\n");
90ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau        output.write("Total Error: " + mTotalPlaybackError + "\n");
91414e15309cfcfd792cb63b53ea6b2b4f426ae7d4Yu Shan Emily Lau        output.write("Total Unknown Info: " + mTotalInfoUnknown + "\n");
92ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau        output.write("Total Track Lagging: " + mTotalVideoTrackLagging + "\n" );
93414e15309cfcfd792cb63b53ea6b2b4f426ae7d4Yu Shan Emily Lau        output.write("Total Bad Interleaving: " + mTotalBadInterleaving + "\n");
94ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau        output.write("Total Not Seekable: " + mTotalNotSeekable + "\n");
95ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau        output.write("Total Info Meta data update: " + mTotalMetaDataUpdate + "\n");
96333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim        output.write("Total Failed To Complete With No Error: " +
97333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim                mTotalFailedToCompleteWithNoError);
98a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau        output.write("\n");
99a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau    }
100f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau
101a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau    private void updateTestResult(){
102333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim        if (CodecTest.onCompleteSuccess) {
103a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau            mTotalComplete++;
104a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau        }
105333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim        else if (CodecTest.mPlaybackError) {
106a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau            mTotalPlaybackError++;
107a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau        }
108333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim        else if (CodecTest.mFailedToCompleteWithNoError) {
109333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim            mTotalFailedToCompleteWithNoError++;
110333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim        }
11185305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau        mTotalInfoUnknown += CodecTest.mMediaInfoUnknownCount;
11285305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau        mTotalVideoTrackLagging += CodecTest.mMediaInfoVideoTrackLaggingCount;
11385305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau        mTotalBadInterleaving += CodecTest.mMediaInfoBadInterleavingCount;
11485305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau        mTotalNotSeekable += CodecTest.mMediaInfoNotSeekableCount;
11585305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau        mTotalMetaDataUpdate += CodecTest.mMediaInfoMetdataUpdateCount;
116f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau    }
117f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau
118a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau    //Test that will start the playback for all the videos
119a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau    //under the samples folder
120f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau    @LargeTest
121a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau    public void testVideoPlayback() throws Exception {
122a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau        String fileWithError = "Filename:\n";
123e60393ae7168e97922dd7d4821a69d5546a6a522Yu Shan Emily Lau        File playbackOutput = new File(Environment.getExternalStorageDirectory(), PLAYBACK_RESULT);
124a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau        Writer output = new BufferedWriter(new FileWriter(playbackOutput, true));
125a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau
126a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau        boolean testResult = true;
127a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau        // load directory files
128a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau        boolean onCompleteSuccess = false;
129796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang        String[] children = MediaNames.NETWORK_VIDEO_FILES;
130796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang        if (MediaNames.MEDIA_SAMPLE_POOL.equals(mMediaSrc)) {
131796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang            File dir = new File(mMediaSrc);
132796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang            children = dir.list();
133796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang        }
134a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau        if (children == null) {
135a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau            Log.v("MediaPlayerApiTest:testMediaSamples", "dir is empty");
136a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau            return;
137a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau        } else {
138a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau            for (int i = 0; i < children.length; i++) {
139796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang                //Get filename
140a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau                String filename = children[i];
141a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau                onCompleteSuccess =
142796c93b11096002db8ee8fff670ba2a1980877d9Xia Wang                    CodecTest.playMediaSamples(mMediaSrc + filename);
143a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau                if (!onCompleteSuccess){
144a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau                    //Don't fail the test right away, print out the failure file.
145a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau                    fileWithError += filename + '\n';
146a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau                    Log.v(TAG, "Failure File : " + fileWithError);
147a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau                    testResult = false;
148f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau                }
149a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau                Thread.sleep(3000);
150a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau                //Write test result to an output file
151a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau                writeTestOutput(filename,output);
152a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau                //Get the summary
153a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau                updateTestResult();
154f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau            }
155a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau            writeTestSummary(output);
156a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau            output.close();
157a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau            assertTrue("testMediaSamples", testResult);
158a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau       }
159f47b8e991f60aac8a8f4e6e710cf5eb7cfb3a05aYu Shan Emily Lau    }
160333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim}
161