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