summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorRajneesh Chowdury <rajneeshc@google.com>2011-02-28 09:26:54 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-02-28 09:26:54 -0800
commit051d4430715ea257f0afd124b919a14ced6385b8 (patch)
tree8e792a59afb5c13fc8622ab3d7cafa12bb7ae3a4 /media
parent15f5eeef0e75ca269711325fbbbe67f5ea4de59f (diff)
parentf67441eb370f764710b5697885d1a1549d41e819 (diff)
downloadframeworks_base-051d4430715ea257f0afd124b919a14ced6385b8.zip
frameworks_base-051d4430715ea257f0afd124b919a14ced6385b8.tar.gz
frameworks_base-051d4430715ea257f0afd124b919a14ced6385b8.tar.bz2
Merge "Instrumentation code to enable/disable memory leak check using setprop"
Diffstat (limited to 'media')
-rwxr-xr-xmedia/java/android/media/videoeditor/VideoEditorImpl.java51
1 files changed, 51 insertions, 0 deletions
diff --git a/media/java/android/media/videoeditor/VideoEditorImpl.java b/media/java/android/media/videoeditor/VideoEditorImpl.java
index a6b4544..1fb8c61 100755
--- a/media/java/android/media/videoeditor/VideoEditorImpl.java
+++ b/media/java/android/media/videoeditor/VideoEditorImpl.java
@@ -42,6 +42,9 @@ import android.util.Log;
import android.util.Xml;
import android.view.Surface;
import android.view.SurfaceHolder;
+import android.os.Debug;
+import android.os.SystemProperties;
+import android.os.Environment;
/**
* The VideoEditor implementation {@hide}
@@ -134,6 +137,7 @@ public class VideoEditorImpl implements VideoEditor {
*/
private MediaArtistNativeHelper mMANativeHelper;
private boolean mPreviewInProgress = false;
+ private final boolean mMallocDebug;
/**
* Constructor
@@ -142,6 +146,18 @@ public class VideoEditorImpl implements VideoEditor {
* related to the project
*/
public VideoEditorImpl(String projectPath) throws IOException {
+ String s;
+ s = SystemProperties.get("libc.debug.malloc");
+ if (s.equals("1")) {
+ mMallocDebug = true;
+ try {
+ dumpHeap("HeapAtStart");
+ } catch (Exception ex) {
+ Log.e(TAG, "dumpHeap returned error in constructor");
+ }
+ } else {
+ mMallocDebug = false;
+ }
mLock = new Semaphore(1, true);
mMANativeHelper = new MediaArtistNativeHelper(projectPath, mLock, this);
mProjectPath = projectPath;
@@ -709,6 +725,13 @@ public class VideoEditorImpl implements VideoEditor {
unlock();
}
}
+ if (mMallocDebug) {
+ try {
+ dumpHeap("HeapAtEnd");
+ } catch (Exception ex) {
+ Log.e(TAG, "dumpHeap returned error in release");
+ }
+ }
}
/*
@@ -1885,4 +1908,32 @@ public class VideoEditorImpl implements VideoEditor {
}
mLock.release();
}
+
+ /**
+ * Dumps the heap memory usage information to file
+ */
+ private static void dumpHeap (String filename) throws Exception {
+ /* Cleanup as much as possible before dump
+ */
+ System.gc();
+ System.runFinalization();
+ Thread.sleep(1000);
+ String state = Environment.getExternalStorageState();
+ if (Environment.MEDIA_MOUNTED.equals(state)) {
+ String extDir =
+ Environment.getExternalStorageDirectory().toString();
+
+ /* If dump file already exists, then delete it first
+ */
+ if ((new File(extDir + "/" + filename + ".dump")).exists()) {
+ (new File(extDir + "/" + filename + ".dump")).delete();
+ }
+ /* Dump native heap
+ */
+ FileOutputStream ost =
+ new FileOutputStream(extDir + "/" + filename + ".dump");
+ Debug.dumpNativeHeap(ost.getFD());
+ ost.close();
+ }
+ }
}