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