MediaPlayerPerformance.java revision f013e1afd1e68af5e3b868c26a653bbfb39538f8
1/*
2 * Copyright (C) 2008 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
17package com.android.mediaframeworktest.performance;
18
19import com.android.mediaframeworktest.MediaFrameworkTest;
20import com.android.mediaframeworktest.MediaNames;
21
22import android.content.Context;
23import android.database.sqlite.SQLiteDatabase;
24import android.media.MediaPlayer;
25import android.os.SystemClock;
26import android.test.ActivityInstrumentationTestCase;
27import android.test.suitebuilder.annotation.LargeTest;
28import android.test.suitebuilder.annotation.Suppress;
29import android.util.Log;
30
31import java.io.FileDescriptor;
32import java.io.FileInputStream;
33import android.media.MediaMetadataRetriever;
34
35/**
36 * Junit / Instrumentation test case for the media player api
37
38 */
39public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
40
41
42   private boolean mIsPlaying = true;
43   private String TAG = "MediaPlayerApiTest";
44   Context mContext;
45   private SQLiteDatabase mDB;
46
47
48   public MediaPlayerPerformance() {
49     super("com.android.mediaframeworktest", MediaFrameworkTest.class);
50   }
51
52    protected void setUp() throws Exception {
53
54      super.setUp();
55    }
56
57    public void createDB(){
58      mDB = SQLiteDatabase.openOrCreateDatabase("/sdcard/perf.db",null);
59      mDB.execSQL("CREATE TABLE perfdata (_id INTEGER PRIMARY KEY,"
60          + "file TEXT," + "setdatatime LONG," +"preparetime LONG," +"playtime LONG" + ");");
61    }
62
63    public void audioPlaybackStartupTime(String[] testFile){
64      long t1 = 0;
65      long t2 = 0;
66      long t3 = 0;
67      long t4 =0;
68
69      long setDataSourceDuration = 0;
70      long prepareDuration = 0;
71      long startDuration=0;
72
73      long totalSetDataTime=0;
74      long totalPrepareTime=0;
75      long totalStartDuration=0;
76
77      int numberOfFiles = testFile.length;
78      Log.v(TAG, "File lenght " + numberOfFiles);
79      for (int k=0; k<numberOfFiles; k++){
80        MediaPlayer mp = new MediaPlayer();
81        try{
82          t1 = SystemClock.uptimeMillis();
83          FileInputStream  fis = new FileInputStream(testFile[k]);
84          FileDescriptor fd = fis.getFD();
85          mp.setDataSource(fd);
86          fis.close();
87          t2 = SystemClock.uptimeMillis();
88          mp.prepare();
89          t3 = SystemClock.uptimeMillis();
90          mp.start();
91          t4 = SystemClock.uptimeMillis();
92          Thread.sleep(10000);
93          mp.pause();
94        }catch (Exception e){}
95        setDataSourceDuration = t2 -t1;
96        prepareDuration = t3 - t2;
97        startDuration = t4 - t3;
98        totalSetDataTime = totalSetDataTime + setDataSourceDuration;
99        totalPrepareTime = totalPrepareTime + prepareDuration;
100        totalStartDuration = totalStartDuration + startDuration;
101        mDB.execSQL("INSERT INTO perfdata (file, setdatatime, preparetime, playtime) VALUES (" + '"' + testFile[k] + '"' +','
102          +setDataSourceDuration+ ',' + prepareDuration + ',' + startDuration +");");
103        Log.v(TAG,"File name " + testFile[k]);
104        mp.stop();
105        mp.release();
106      }
107      Log.v (TAG, "setDataSource average " + totalSetDataTime/numberOfFiles);
108      Log.v (TAG, "prepare average " + totalPrepareTime/numberOfFiles);
109      Log.v (TAG, "start average " + totalStartDuration/numberOfFiles);
110
111    }
112
113    //Test cases for GetCurrentPosition
114    @LargeTest
115    public void testStartUpTime() throws Exception {
116      createDB();
117      audioPlaybackStartupTime(MediaNames.MP3FILES);
118      audioPlaybackStartupTime(MediaNames.AACFILES);
119
120    }
121
122    public void wmametadatautility(String[] testFile){
123      long t1 = 0;
124      long t2 = 0;
125      long sum = 0;
126      long duration = 0;
127      MediaMetadataRetriever retriever = new MediaMetadataRetriever();
128      String value;
129      for(int i = 0, n = testFile.length; i < n; ++i) {
130          try {
131              t1 = SystemClock.uptimeMillis();
132              retriever.setDataSource(testFile[i]);
133              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
134              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
135              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER);
136              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
137              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
138              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
139              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
140              t2 = SystemClock.uptimeMillis();
141              duration = t2 - t1;
142              Log.v(TAG, "Time taken = " + duration);
143              sum=sum+duration;
144          }
145          catch (Exception e){Log.v(TAG, e.getMessage());}
146
147      }
148      Log.v(TAG, "Average duration = " + sum/testFile.length);
149    }
150
151    @Suppress
152    public void testWmaParseTime() throws Exception {
153     // createDB();
154      wmametadatautility(MediaNames.WMASUPPORTED);
155    }
156
157
158}
159
160