diff options
author | Rajneesh Chowdury <rajneeshc@google.com> | 2011-02-28 09:26:54 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-02-28 09:26:54 -0800 |
commit | 051d4430715ea257f0afd124b919a14ced6385b8 (patch) | |
tree | 8e792a59afb5c13fc8622ab3d7cafa12bb7ae3a4 /media | |
parent | 15f5eeef0e75ca269711325fbbbe67f5ea4de59f (diff) | |
parent | f67441eb370f764710b5697885d1a1549d41e819 (diff) | |
download | frameworks_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-x | media/java/android/media/videoeditor/VideoEditorImpl.java | 51 |
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(); + } + } } |