MediaTestUtil.java revision 9dab78470592be7542b9c0f9090603ed0dc80949
162f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau/* 262f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * Copyright (C) 2011 The Android Open Source Project 362f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * 462f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * Licensed under the Apache License, Version 2.0 (the "License"); 562f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * you may not use this file except in compliance with the License. 662f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * You may obtain a copy of the License at 762f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * 862f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * http://www.apache.org/licenses/LICENSE-2.0 962f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * 1062f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * Unless required by applicable law or agreed to in writing, software 1162f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * distributed under the License is distributed on an "AS IS" BASIS, 1262f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1362f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * See the License for the specific language governing permissions and 1462f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * limitations under the License. 1562f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau */ 1662f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau 1762f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Laupackage com.android.mediaframeworktest; 1862f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau 1962f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lauimport java.io.FileOutputStream; 209dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lauimport java.io.IOException; 219dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lauimport java.io.InputStream; 229dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lauimport java.io.Writer; 2362f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau 2462f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lauimport android.os.Debug; 2562f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lauimport android.os.Environment; 269dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lauimport android.util.Log; 2762f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau 2862f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau/** 2962f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * 3062f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * Utilities for media framework test. 3162f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau * 3262f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau */ 3362f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Laupublic class MediaTestUtil { 3462f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau private MediaTestUtil(){ 3562f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau } 3662f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau 379dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau private static String TAG = "MediaTestUtil"; 3862f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau private static final String STORAGE_PATH = 3962f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau Environment.getExternalStorageDirectory().toString(); 409dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau private static int mMediaStartMemory = 0; 419dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau private static int mDrmStartMemory = 0; 4262f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau 439dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau //Catpure the heapdump for memory leaksage analysis 4462f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau public static void getNativeHeapDump (String name) throws Exception { 4562f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau System.gc(); 4662f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau System.runFinalization(); 4762f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau Thread.sleep(1000); 4862f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau FileOutputStream o = new FileOutputStream(STORAGE_PATH + '/' +name + ".dump"); 4962f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau Debug.dumpNativeHeap(o.getFD()); 5062f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau o.close(); 5162f755ac65cb40f231a7fa0695724ae01975d01cYu Shan Emily Lau } 529dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 539dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau public static String captureMemInfo(String type) { 549dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau String cm = "ps "; 559dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau cm += type; 569dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau String memoryUsage = null; 579dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 589dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau int ch; 599dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau try { 609dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau Process p = Runtime.getRuntime().exec(cm); 619dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau InputStream in = p.getInputStream(); 629dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau StringBuffer sb = new StringBuffer(512); 639dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau while ((ch = in.read()) != -1) { 649dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau sb.append((char) ch); 659dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 669dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau memoryUsage = sb.toString(); 679dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } catch (IOException e) { 689dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau Log.v(TAG, e.toString()); 699dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 709dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau String[] poList = memoryUsage.split("\r|\n|\r\n"); 719dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau String memusage = poList[1].concat("\n"); 729dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau return memusage; 739dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 749dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 759dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau public static int getMediaServerVsize() { 769dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau String memoryUsage = captureMemInfo("mediaserver"); 779dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau String[] poList2 = memoryUsage.split("\t|\\s+"); 789dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau String vsize = poList2[3]; 799dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau int vsizevalue = Integer.parseInt(vsize); 809dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau Log.v(TAG, "VSIZE = " + vsizevalue); 819dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau return vsizevalue; 829dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 839dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 849dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau public static int getDrmServerVsize() { 859dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau String memoryUsage = captureMemInfo("drmserver"); 869dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau String[] poList2 = memoryUsage.split("\t|\\s+"); 879dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau String vsize = poList2[3]; 889dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau int vsizevalue = Integer.parseInt(vsize); 899dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau Log.v(TAG, "VSIZE = " + vsizevalue); 909dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau return vsizevalue; 919dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 929dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 939dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau // Write the ps mediaserver output to the file 949dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau public static void getMediaServerMemoryLog(Writer output, int writeCount, int totalCount) 959dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau throws Exception { 969dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau String memusage = null; 979dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 989dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau if (writeCount == 0) { 999dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau mMediaStartMemory = getMediaServerVsize(); 1009dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau output.write("Start memory : " + mMediaStartMemory + "\n"); 1019dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 1029dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau memusage = captureMemInfo("mediaserver"); 1039dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau output.write(memusage); 1049dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 1059dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 1069dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau // Write the ps drmserver output to the file 1079dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau public static void getDrmServerMemoryLog(Writer output, int writeCount, int totalCount) 1089dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau throws Exception { 1099dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau String memusage = null; 1109dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 1119dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau if (writeCount == 0) { 1129dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau mDrmStartMemory = getDrmServerVsize(); 1139dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau output.write("Start memory : " + mDrmStartMemory + "\n"); 1149dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 1159dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau memusage = captureMemInfo("drmserver"); 1169dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau output.write(memusage); 1179dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 1189dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 1199dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau // Write the ps drmserver output to the file 1209dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau public static void getDrmServerMemorySummary(Writer output, String tag) throws Exception { 1219dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 1229dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau getTestMemorySummary(output, tag, "drmMem"); 1239dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 1249dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 1259dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau // Write the ps drmserver output to the file 1269dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau public static void getMediaServerMemorySummary(Writer output, String tag) throws Exception { 1279dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 1289dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau getTestMemorySummary(output, tag, "mediaMem"); 1299dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 1309dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 1319dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau public static void getTestMemorySummary(Writer output, String tag, String type) 1329dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau throws Exception { 1339dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 1349dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau int endMemory = 0; 1359dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau int memDiff = 0; 1369dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau 1379dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau if (type == "mediaMem") { 1389dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau endMemory = getMediaServerVsize(); 1399dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau memDiff = endMemory - mMediaStartMemory; 1409dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } else if (type == "drmMem") { 1419dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau endMemory = getDrmServerVsize(); 1429dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau memDiff = endMemory - mDrmStartMemory; 1439dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 1449dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau output.write("End Memory :" + endMemory + "\n"); 1459dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau if (memDiff < 0) { 1469dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau memDiff = 0; 1479dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 1489dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau output.write(tag + " total diff = " + memDiff); 1499dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau output.write("\n\n"); 1509dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau } 1519dab78470592be7542b9c0f9090603ed0dc80949Yu Shan Emily Lau} 152