3737import android .view .SurfaceHolder ;
3838
3939import java .util .List ;
40+ import java .io .BufferedReader ;
4041import java .io .FileDescriptor ;
4142import java .io .FileInputStream ;
4243import java .io .FileOutputStream ;
4344import java .io .IOException ;
4445import java .io .InputStream ;
46+ import java .io .InputStreamReader ;
4547import java .io .Writer ;
4648import java .io .File ;
4749import java .io .FileWriter ;
@@ -68,6 +70,8 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<Med
6870 private static final long MEDIA_STRESS_WAIT_TIME = 5000 ; //5 seconds
6971 private static final String MEDIA_MEMORY_OUTPUT =
7072 "/sdcard/mediaMemOutput.txt" ;
73+ private static final String MEDIA_PROCMEM_OUTPUT =
74+ "/sdcard/mediaProcmemOutput.txt" ;
7175
7276 private static int mStartMemory = 0 ;
7377 private static int mEndMemory = 0 ;
@@ -84,6 +88,9 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<Med
8488 private static int DECODER_LIMIT = 150 ;
8589 private static int CAMERA_LIMIT = 80 ;
8690
91+ private Writer mProcMemWriter ;
92+ private Writer mMemWriter ;
93+
8794 private static List <VideoEncoderCap > videoEncoders = MediaProfileReader .getVideoEncoders ();
8895
8996 Camera mCamera ;
@@ -97,12 +104,21 @@ protected void setUp() throws Exception {
97104 getActivity ();
98105 if (MediaFrameworkPerfTestRunner .mGetNativeHeapDump )
99106 MediaTestUtil .getNativeHeapDump (this .getName () + "_before" );
107+
108+ mProcMemWriter = new BufferedWriter (new FileWriter
109+ (new File (MEDIA_PROCMEM_OUTPUT ), true ));
110+ mProcMemWriter .write (this .getName () + "\n " );
111+ mMemWriter = new BufferedWriter (new FileWriter
112+ (new File (MEDIA_MEMORY_OUTPUT ), true ));
113+
100114 }
101115
102116 protected void tearDown () throws Exception {
103- super .tearDown ();
104117 if (MediaFrameworkPerfTestRunner .mGetNativeHeapDump )
105118 MediaTestUtil .getNativeHeapDump (this .getName () + "_after" );
119+ mProcMemWriter .close ();
120+ mMemWriter .close ();
121+ super .tearDown ();
106122 }
107123
108124 private void initializeMessageLooper () {
@@ -247,24 +263,39 @@ public void stressAudioRecord(String filePath) {
247263 }
248264
249265 //Write the ps output to the file
250- public void getMemoryWriteToLog (Writer output , int writeCount ) {
266+ public void getMemoryWriteToLog (int writeCount ) {
251267 String memusage = null ;
252268 try {
253269 if (writeCount == 0 ) {
254270 mStartMemory = getMediaserverVsize ();
255- output .write ("Start memory : " + mStartMemory + "\n " );
271+ mMemWriter .write ("Start memory : " + mStartMemory + "\n " );
256272 }
257273 memusage = captureMediaserverInfo ();
258- output .write (memusage );
274+ mMemWriter .write (memusage );
259275 if (writeCount == NUM_STRESS_LOOP - 1 ) {
260276 mEndMemory = getMediaserverVsize ();
261- output .write ("End Memory :" + mEndMemory + "\n " );
277+ mMemWriter .write ("End Memory :" + mEndMemory + "\n " );
262278 }
263279 } catch (Exception e ) {
264280 e .toString ();
265281 }
266282 }
267283
284+ public void writeProcmemInfo () throws Exception {
285+ String cmd = "procmem " + getMediaserverPid ();
286+ Process p = Runtime .getRuntime ().exec (cmd );
287+
288+ InputStream inStream = p .getInputStream ();
289+ InputStreamReader inReader = new InputStreamReader (inStream );
290+ BufferedReader inBuffer = new BufferedReader (inReader );
291+ String s ;
292+ while ((s = inBuffer .readLine ()) != null ) {
293+ mProcMemWriter .write (s );
294+ mProcMemWriter .write ("\n " );
295+ }
296+ mProcMemWriter .write ("\n \n " );
297+ }
298+
268299 public String captureMediaserverInfo () {
269300 String cm = "ps mediaserver" ;
270301 String memoryUsage = null ;
@@ -306,7 +337,7 @@ public int getMediaserverVsize(){
306337 return vsizevalue ;
307338 }
308339
309- public boolean validateMemoryResult (int startPid , int startMemory , Writer output , int limit )
340+ public boolean validateMemoryResult (int startPid , int startMemory , int limit )
310341 throws Exception {
311342 // Wait for 10 seconds to make sure the memory settle.
312343 Thread .sleep (10000 );
@@ -315,11 +346,11 @@ public boolean validateMemoryResult(int startPid, int startMemory, Writer output
315346 if (memDiff < 0 ) {
316347 memDiff = 0 ;
317348 }
318- output .write ("The total diff = " + memDiff );
319- output .write ("\n \n " );
349+ mMemWriter .write ("The total diff = " + memDiff );
350+ mMemWriter .write ("\n \n " );
320351 // mediaserver crash
321352 if (startPid != mEndPid ) {
322- output .write ("mediaserver died. Test failed\n " );
353+ mMemWriter .write ("mediaserver died. Test failed\n " );
323354 return false ;
324355 }
325356 // memory leak greter than the tolerant
@@ -331,81 +362,73 @@ public boolean validateMemoryResult(int startPid, int startMemory, Writer output
331362 @ LargeTest
332363 public void testH263VideoPlaybackMemoryUsage () throws Exception {
333364 boolean memoryResult = false ;
334- mStartPid = getMediaserverPid ();
335365
336- File h263MemoryOut = new File (MEDIA_MEMORY_OUTPUT );
337- Writer output = new BufferedWriter (new FileWriter (h263MemoryOut , true ));
338- output .write ("H263 Video Playback Only\n " );
366+ mStartPid = getMediaserverPid ();
367+ mMemWriter .write ("H263 Video Playback Only\n " );
339368 for (int i = 0 ; i < NUM_STRESS_LOOP ; i ++) {
340369 mediaStressPlayback (MediaNames .VIDEO_HIGHRES_H263 );
341- getMemoryWriteToLog (output , i );
370+ getMemoryWriteToLog (i );
371+ writeProcmemInfo ();
342372 }
343- output .write ("\n " );
344- memoryResult = validateMemoryResult (mStartPid , mStartMemory , output , DECODER_LIMIT );
345- output .close ();
373+ mMemWriter .write ("\n " );
374+ memoryResult = validateMemoryResult (mStartPid , mStartMemory , DECODER_LIMIT );
346375 assertTrue ("H263 playback memory test" , memoryResult );
347376 }
348377
349378 // Test case 2: Capture the memory usage after every 20 h264 playback
350379 @ LargeTest
351380 public void testH264VideoPlaybackMemoryUsage () throws Exception {
352381 boolean memoryResult = false ;
353- mStartPid = getMediaserverPid ();
354382
355- File h264MemoryOut = new File (MEDIA_MEMORY_OUTPUT );
356- Writer output = new BufferedWriter (new FileWriter (h264MemoryOut , true ));
357- output .write ("H264 Video Playback only\n " );
383+ mStartPid = getMediaserverPid ();
384+ mMemWriter .write ("H264 Video Playback only\n " );
358385 for (int i = 0 ; i < NUM_STRESS_LOOP ; i ++) {
359386 mediaStressPlayback (MediaNames .VIDEO_H264_AMR );
360- getMemoryWriteToLog (output , i );
387+ getMemoryWriteToLog (i );
388+ writeProcmemInfo ();
361389 }
362- output .write ("\n " );
363- memoryResult = validateMemoryResult (mStartPid , mStartMemory , output , DECODER_LIMIT );
364- output .close ();
390+ mMemWriter .write ("\n " );
391+ memoryResult = validateMemoryResult (mStartPid , mStartMemory , DECODER_LIMIT );
365392 assertTrue ("H264 playback memory test" , memoryResult );
366393 }
367394
368395 // Test case 4: Capture the memory usage after every 20 video only recorded
369396 @ LargeTest
370397 public void testH263RecordVideoOnlyMemoryUsage () throws Exception {
371398 boolean memoryResult = false ;
372- mStartPid = getMediaserverPid ();
373399
374- File videoH263RecordOnlyMemoryOut = new File (MEDIA_MEMORY_OUTPUT );
375- Writer output = new BufferedWriter (new FileWriter (videoH263RecordOnlyMemoryOut , true ));
376- output .write ("H263 video record only\n " );
400+ mStartPid = getMediaserverPid ();
401+ mMemWriter .write ("H263 video record only\n " );
377402 int frameRate = MediaProfileReader .getMaxFrameRateForCodec (MediaRecorder .VideoEncoder .H263 );
378403 assertTrue ("H263 video recording frame rate" , frameRate != -1 );
379404 for (int i = 0 ; i < NUM_STRESS_LOOP ; i ++) {
380405 assertTrue (stressVideoRecord (frameRate , 352 , 288 , MediaRecorder .VideoEncoder .H263 ,
381406 MediaRecorder .OutputFormat .MPEG_4 , MediaNames .RECORDED_VIDEO_3GP , true ));
382- getMemoryWriteToLog (output , i );
407+ getMemoryWriteToLog (i );
408+ writeProcmemInfo ();
383409 }
384- output .write ("\n " );
385- memoryResult = validateMemoryResult (mStartPid , mStartMemory , output , ENCODER_LIMIT );
386- output .close ();
410+ mMemWriter .write ("\n " );
411+ memoryResult = validateMemoryResult (mStartPid , mStartMemory , ENCODER_LIMIT );
387412 assertTrue ("H263 record only memory test" , memoryResult );
388413 }
389414
390415 // Test case 5: Capture the memory usage after every 20 video only recorded
391416 @ LargeTest
392417 public void testMpeg4RecordVideoOnlyMemoryUsage () throws Exception {
393418 boolean memoryResult = false ;
394- mStartPid = getMediaserverPid ();
395419
396- File videoMp4RecordOnlyMemoryOut = new File (MEDIA_MEMORY_OUTPUT );
397- Writer output = new BufferedWriter (new FileWriter (videoMp4RecordOnlyMemoryOut , true ));
398- output .write ("MPEG4 video record only\n " );
420+ mStartPid = getMediaserverPid ();
421+ mMemWriter .write ("MPEG4 video record only\n " );
399422 int frameRate = MediaProfileReader .getMaxFrameRateForCodec (MediaRecorder .VideoEncoder .MPEG_4_SP );
400423 assertTrue ("MPEG4 video recording frame rate" , frameRate != -1 );
401424 for (int i = 0 ; i < NUM_STRESS_LOOP ; i ++) {
402425 assertTrue (stressVideoRecord (frameRate , 352 , 288 , MediaRecorder .VideoEncoder .MPEG_4_SP ,
403426 MediaRecorder .OutputFormat .MPEG_4 , MediaNames .RECORDED_VIDEO_3GP , true ));
404- getMemoryWriteToLog (output , i );
427+ getMemoryWriteToLog (i );
428+ writeProcmemInfo ();
405429 }
406- output .write ("\n " );
407- memoryResult = validateMemoryResult (mStartPid , mStartMemory , output , ENCODER_LIMIT );
408- output .close ();
430+ mMemWriter .write ("\n " );
431+ memoryResult = validateMemoryResult (mStartPid , mStartMemory , ENCODER_LIMIT );
409432 assertTrue ("mpeg4 record only memory test" , memoryResult );
410433 }
411434
@@ -414,59 +437,53 @@ public void testMpeg4RecordVideoOnlyMemoryUsage() throws Exception {
414437 @ LargeTest
415438 public void testRecordVideoAudioMemoryUsage () throws Exception {
416439 boolean memoryResult = false ;
417- mStartPid = getMediaserverPid ();
418440
419- File videoRecordAudioMemoryOut = new File (MEDIA_MEMORY_OUTPUT );
420- Writer output = new BufferedWriter (new FileWriter (videoRecordAudioMemoryOut , true ));
441+ mStartPid = getMediaserverPid ();
421442 int frameRate = MediaProfileReader .getMaxFrameRateForCodec (MediaRecorder .VideoEncoder .H263 );
422443 assertTrue ("H263 video recording frame rate" , frameRate != -1 );
423- output .write ("Audio and h263 video record\n " );
444+ mMemWriter .write ("Audio and h263 video record\n " );
424445 for (int i = 0 ; i < NUM_STRESS_LOOP ; i ++) {
425446 assertTrue (stressVideoRecord (frameRate , 352 , 288 , MediaRecorder .VideoEncoder .H263 ,
426447 MediaRecorder .OutputFormat .MPEG_4 , MediaNames .RECORDED_VIDEO_3GP , false ));
427- getMemoryWriteToLog (output , i );
448+ getMemoryWriteToLog (i );
449+ writeProcmemInfo ();
428450 }
429- output .write ("\n " );
430- memoryResult = validateMemoryResult (mStartPid , mStartMemory , output , ENCODER_LIMIT );
431- output .close ();
451+ mMemWriter .write ("\n " );
452+ memoryResult = validateMemoryResult (mStartPid , mStartMemory , ENCODER_LIMIT );
432453 assertTrue ("H263 audio video record memory test" , memoryResult );
433454 }
434455
435456 // Test case 7: Capture the memory usage after every 20 audio only recorded
436457 @ LargeTest
437458 public void testRecordAudioOnlyMemoryUsage () throws Exception {
438459 boolean memoryResult = false ;
439- mStartPid = getMediaserverPid ();
440460
441- File audioOnlyMemoryOut = new File (MEDIA_MEMORY_OUTPUT );
442- Writer output = new BufferedWriter (new FileWriter (audioOnlyMemoryOut , true ));
443- output .write ("Audio record only\n " );
461+ mStartPid = getMediaserverPid ();
462+ mMemWriter .write ("Audio record only\n " );
444463 for (int i = 0 ; i < NUM_STRESS_LOOP ; i ++) {
445464 stressAudioRecord (MediaNames .RECORDER_OUTPUT );
446- getMemoryWriteToLog (output , i );
465+ getMemoryWriteToLog (i );
466+ writeProcmemInfo ();
447467 }
448- output .write ("\n " );
449- memoryResult = validateMemoryResult (mStartPid , mStartMemory , output , ENCODER_LIMIT );
450- output .close ();
468+ mMemWriter .write ("\n " );
469+ memoryResult = validateMemoryResult (mStartPid , mStartMemory , ENCODER_LIMIT );
451470 assertTrue ("audio record only memory test" , memoryResult );
452471 }
453472
454473 // Test case 8: Capture the memory usage after every 20 camera preview
455474 @ LargeTest
456475 public void testCameraPreviewMemoryUsage () throws Exception {
457476 boolean memoryResult = false ;
458- mStartPid = getMediaserverPid ();
459477
460- File cameraPreviewMemoryOut = new File (MEDIA_MEMORY_OUTPUT );
461- Writer output = new BufferedWriter (new FileWriter (cameraPreviewMemoryOut , true ));
462- output .write ("Camera Preview Only\n " );
478+ mStartPid = getMediaserverPid ();
479+ mMemWriter .write ("Camera Preview Only\n " );
463480 for (int i = 0 ; i < NUM_STRESS_LOOP ; i ++) {
464481 stressCameraPreview ();
465- getMemoryWriteToLog (output , i );
482+ getMemoryWriteToLog (i );
483+ writeProcmemInfo ();
466484 }
467- output .write ("\n " );
468- memoryResult = validateMemoryResult (mStartPid , mStartMemory , output , CAMERA_LIMIT );
469- output .close ();
485+ mMemWriter .write ("\n " );
486+ memoryResult = validateMemoryResult (mStartPid , mStartMemory , CAMERA_LIMIT );
470487 assertTrue ("camera preview memory test" , memoryResult );
471488 }
472489}
0 commit comments