Merge "Suppress the 1 hour video editor export test case which exceed the 5 mins large test limit. Add the media test util for capturing the memory usage. Bug# 4108259 Change-Id: I751a622ff5dfbb1d563f63a2cbc9db71d194a0f6" into honeycomb-mr1
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaTestUtil.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaTestUtil.java
index 0183b5d..beb2927 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaTestUtil.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaTestUtil.java
@@ -17,9 +17,13 @@
 package com.android.mediaframeworktest;
 
 import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Writer;
 
 import android.os.Debug;
 import android.os.Environment;
+import android.util.Log;
 
 /**
  *
@@ -30,10 +34,13 @@
     private MediaTestUtil(){
     }
 
+    private static String TAG = "MediaTestUtil";
     private static final String STORAGE_PATH =
         Environment.getExternalStorageDirectory().toString();
+    private static int mMediaStartMemory = 0;
+    private static int mDrmStartMemory = 0;
 
-    //Catpure the heapdump for memory leaksage analysis\
+    //Catpure the heapdump for memory leaksage analysis
     public static void getNativeHeapDump (String name) throws Exception {
         System.gc();
         System.runFinalization();
@@ -42,4 +49,103 @@
         Debug.dumpNativeHeap(o.getFD());
         o.close();
     }
-}
\ No newline at end of file
+
+    public static String captureMemInfo(String type) {
+        String cm = "ps ";
+        cm += type;
+        String memoryUsage = null;
+
+        int ch;
+        try {
+            Process p = Runtime.getRuntime().exec(cm);
+            InputStream in = p.getInputStream();
+            StringBuffer sb = new StringBuffer(512);
+            while ((ch = in.read()) != -1) {
+                sb.append((char) ch);
+            }
+            memoryUsage = sb.toString();
+        } catch (IOException e) {
+            Log.v(TAG, e.toString());
+        }
+        String[] poList = memoryUsage.split("\r|\n|\r\n");
+        String memusage = poList[1].concat("\n");
+        return memusage;
+    }
+
+    public static int getMediaServerVsize() {
+        String memoryUsage = captureMemInfo("mediaserver");
+        String[] poList2 = memoryUsage.split("\t|\\s+");
+        String vsize = poList2[3];
+        int vsizevalue = Integer.parseInt(vsize);
+        Log.v(TAG, "VSIZE = " + vsizevalue);
+        return vsizevalue;
+    }
+
+    public static int getDrmServerVsize() {
+        String memoryUsage = captureMemInfo("drmserver");
+        String[] poList2 = memoryUsage.split("\t|\\s+");
+        String vsize = poList2[3];
+        int vsizevalue = Integer.parseInt(vsize);
+        Log.v(TAG, "VSIZE = " + vsizevalue);
+        return vsizevalue;
+    }
+
+    // Write the ps mediaserver output to the file
+    public static void getMediaServerMemoryLog(Writer output, int writeCount, int totalCount)
+            throws Exception {
+        String memusage = null;
+
+        if (writeCount == 0) {
+            mMediaStartMemory = getMediaServerVsize();
+            output.write("Start memory : " + mMediaStartMemory + "\n");
+        }
+        memusage = captureMemInfo("mediaserver");
+        output.write(memusage);
+    }
+
+    // Write the ps drmserver output to the file
+    public static void getDrmServerMemoryLog(Writer output, int writeCount, int totalCount)
+            throws Exception {
+        String memusage = null;
+
+        if (writeCount == 0) {
+            mDrmStartMemory = getDrmServerVsize();
+            output.write("Start memory : " + mDrmStartMemory + "\n");
+        }
+        memusage = captureMemInfo("drmserver");
+        output.write(memusage);
+    }
+
+    // Write the ps drmserver output to the file
+    public static void getDrmServerMemorySummary(Writer output, String tag) throws Exception {
+
+        getTestMemorySummary(output, tag, "drmMem");
+    }
+
+    // Write the ps drmserver output to the file
+    public static void getMediaServerMemorySummary(Writer output, String tag) throws Exception {
+
+        getTestMemorySummary(output, tag, "mediaMem");
+    }
+
+    public static void getTestMemorySummary(Writer output, String tag, String type)
+            throws Exception {
+
+        int endMemory = 0;
+        int memDiff = 0;
+
+        if (type == "mediaMem") {
+            endMemory = getMediaServerVsize();
+            memDiff = endMemory - mMediaStartMemory;
+        } else if (type == "drmMem") {
+            endMemory = getDrmServerVsize();
+            memDiff = endMemory - mDrmStartMemory;
+        }
+        output.write("End Memory :" + endMemory + "\n");
+        if (memDiff < 0) {
+            memDiff = 0;
+        }
+        output.write(tag + " total diff = " + memDiff);
+        output.write("\n\n");
+    }
+}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorExportTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorExportTest.java
index 37b1f54..74d4766 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorExportTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorExportTest.java
@@ -44,6 +44,7 @@
 
 import com.android.mediaframeworktest.MediaFrameworkTest;
 import android.test.suitebuilder.annotation.LargeTest;
+import android.test.suitebuilder.annotation.Suppress;
 import com.android.mediaframeworktest.VideoEditorHelper;
 
 public class VideoEditorExportTest extends
@@ -701,6 +702,7 @@
      *
      * @throws Exception
      */
+    @Suppress
     @LargeTest
     public void testExportDuration1Hour() throws Exception {
         final String videoItemFilename1 = INPUT_FILE_PATH +