Home | History | Annotate | Download | only in stress
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.mediaframeworktest.stress;
     18 
     19 import com.android.mediaframeworktest.MediaFrameworkTest;
     20 
     21 import android.hardware.Camera;
     22 import android.media.MediaPlayer;
     23 import android.media.MediaRecorder;
     24 import android.test.ActivityInstrumentationTestCase2;
     25 import android.test.suitebuilder.annotation.LargeTest;
     26 import android.util.Log;
     27 import android.view.SurfaceHolder;
     28 
     29 import com.android.mediaframeworktest.MediaNames;
     30 
     31 import java.util.Random;
     32 
     33 /**
     34  * Junit / Instrumentation test case for the media player
     35  */
     36 public class MediaPlayerStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
     37     private String TAG = "MediaPlayerStressTest";
     38     private MediaRecorder mRecorder;
     39     private Camera mCamera;
     40 
     41     private static final int NUMBER_OF_RANDOM_REPOSITION_AND_PLAY = 10;
     42     private static final int NUMBER_OF_RANDOM_REPOSITION_AND_PLAY_SHORT = 5;
     43     private static final int NUMBER_OF_STRESS_LOOPS = 500;
     44     private static final int PLAYBACK_END_TOLERANCE = 30000;
     45     private static final int WAIT_UNTIL_PLAYBACK_FINISH = 515000 ;
     46 
     47     public MediaPlayerStressTest() {
     48         super("com.android.mediaframeworktest", MediaFrameworkTest.class);
     49     }
     50 
     51     protected void setUp() throws Exception {
     52         getActivity();
     53         super.setUp();
     54     }
     55 
     56     @LargeTest
     57     public void testStressHWDecoderRelease() throws Exception {
     58         SurfaceHolder mSurfaceHolder;
     59         long randomseed = System.currentTimeMillis();
     60         Random generator = new Random(randomseed);
     61         Log.v(TAG, "Random seed: " + randomseed);
     62         int video_duration = MediaNames.STREAM_H264_480_360_1411k_DURATION;
     63         int random_play_time;
     64 
     65         mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
     66         try {
     67             assertTrue(MediaFrameworkTest.checkStreamingServer());
     68             for (int i = 0; i < NUMBER_OF_STRESS_LOOPS; i++) {
     69                 MediaPlayer mp = new MediaPlayer();
     70                 mp.setDataSource(MediaNames.STREAM_H264_480_360_1411k);
     71                 mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
     72                 mp.prepare();
     73                 mp.start();
     74                 // seek and play
     75                 for (int j = 0; j < generator.nextInt(10); j++) {
     76                     random_play_time =
     77                         generator.nextInt(MediaNames.STREAM_H264_480_360_1411k_DURATION / 2);
     78                     Log.v(TAG, "Play time = " + random_play_time);
     79                     Thread.sleep(random_play_time);
     80                     int seek_time = MediaNames.STREAM_H264_480_360_1411k_DURATION / 2;
     81                     Log.v(TAG, "Seek time = " + seek_time);
     82                     mp.seekTo(seek_time);
     83                 }
     84                 mp.release();
     85             }
     86 
     87         } catch (Exception e) {
     88             Log.v(TAG, e.toString());
     89             assertTrue("testStressHWDecoderRelease", false);
     90         }
     91     }
     92 
     93     @LargeTest
     94     public void testStressGetCurrentPosition() throws Exception {
     95         SurfaceHolder mSurfaceHolder;
     96         long randomseed = System.currentTimeMillis();
     97         Random generator = new Random(randomseed);
     98         Log.v(TAG, "Random seed: " + randomseed);
     99         int video_duration = MediaNames.VIDEO_H263_AMR_DURATION;
    100         int random_play_time = 0;
    101         int random_seek_time = 0;
    102         int random_no_of_seek = 0;
    103 
    104         mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
    105         try {
    106             for (int i = 0; i < NUMBER_OF_STRESS_LOOPS; i++) {
    107                 MediaPlayer mp = new MediaPlayer();
    108                 mp.setDataSource(MediaNames.VIDEO_H263_AMR);
    109                 mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
    110                 mp.prepare();
    111                 mp.start();
    112                 random_no_of_seek = generator.nextInt(10);
    113                 // make sure the seek at least run once.
    114                 if (random_no_of_seek == 0) {
    115                     random_no_of_seek = 1;
    116                 }
    117                 Log.v(TAG, "random_seek = " + random_no_of_seek);
    118                 // Play for 10 seconds then random seekTo
    119                 for (int j = 0; j < random_no_of_seek; j++) {
    120                     random_play_time =
    121                         generator.nextInt(video_duration / 100);
    122                     Log.v(TAG, "Play time = " + random_play_time);
    123                     Thread.sleep(random_play_time);
    124                     random_seek_time =
    125                         generator.nextInt(video_duration / 2);
    126                     Log.v(TAG, "Seek time = " + random_seek_time);
    127                     mp.seekTo(random_seek_time);
    128                 }
    129                 //Seek to 10s from the end of the video
    130                 mp.seekTo(video_duration - 10000);
    131                 //After reposition, play 30 seconds the video should be finished.
    132                 Thread.sleep(PLAYBACK_END_TOLERANCE);
    133                 Log.v(TAG, "CurrentPosition = " + mp.getCurrentPosition());
    134                 if ( mp.isPlaying() || mp.getCurrentPosition()
    135                         > (video_duration)){
    136                     assertTrue("Current PlayTime greater than duration", false);
    137                 }
    138                 mp.release();
    139             }
    140 
    141         } catch (Exception e) {
    142             Log.v(TAG, e.toString());
    143             assertTrue("testStressGetCurrentPosition", false);
    144         }
    145     }
    146 }
    147 
    148