Skip to content

Commit 99b4523

Browse files
author
Yu Shan Emily Lau
committed
Add the min fps option to set
the min fps in the media recorder test. Add the procmem log to the media memory stress test. Change-Id: Icf82f12adeca7072a171991d1d6a994e4bb7764a
1 parent 37ac88f commit 99b4523

File tree

3 files changed

+104
-65
lines changed

3 files changed

+104
-65
lines changed

media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import com.android.mediaframeworktest.functional.videoeditor.VideoEditorPreviewTest;
4040
import junit.framework.TestSuite;
4141

42+
import android.os.Bundle;
4243
import android.test.InstrumentationTestRunner;
4344
import android.test.InstrumentationTestSuite;
4445

@@ -54,6 +55,7 @@
5455

5556
public class MediaFrameworkTestRunner extends InstrumentationTestRunner {
5657

58+
public static int mMinCameraFps = 0;
5759

5860
@Override
5961
public TestSuite getAllTests() {
@@ -87,4 +89,16 @@ public TestSuite getAllTests() {
8789
public ClassLoader getLoader() {
8890
return MediaFrameworkTestRunner.class.getClassLoader();
8991
}
92+
93+
@Override
94+
public void onCreate(Bundle icicle) {
95+
super.onCreate(icicle);
96+
97+
String minCameraFps = (String) icicle.get("min_camera_fps");
98+
System.out.print("min_camera_" + minCameraFps);
99+
100+
if (minCameraFps != null ) {
101+
mMinCameraFps = Integer.parseInt(minCameraFps);
102+
}
103+
}
90104
}

media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediarecorder/MediaRecorderTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import android.view.SurfaceHolder;
3434
import android.view.SurfaceView;
3535
import com.android.mediaframeworktest.MediaProfileReader;
36+
import com.android.mediaframeworktest.MediaFrameworkTestRunner;
3637

3738
import android.test.suitebuilder.annotation.LargeTest;
3839
import android.test.suitebuilder.annotation.Suppress;
@@ -115,9 +116,16 @@ private boolean recordVideoWithPara(VideoEncoderCap videoCap, AudioEncoderCap au
115116
int audioChannels = highQuality? audioCap.mMaxChannels: audioCap.mMinChannels ;
116117
int audioSamplingRate = highQuality? audioCap.mMaxSampleRate: audioCap.mMinSampleRate;
117118

119+
//Overide the fps if the min_camera_fps is set
120+
if (MediaFrameworkTestRunner.mMinCameraFps != 0 &&
121+
MediaFrameworkTestRunner.mMinCameraFps > videoFps){
122+
videoFps = MediaFrameworkTestRunner.mMinCameraFps;
123+
}
124+
118125
if (videoFps < MIN_VIDEO_FPS) {
119126
videoFps = MIN_VIDEO_FPS;
120127
}
128+
121129
mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
122130
String filename = ("/sdcard/" + videoEncoder + "_" + audioEncoder + "_" + highQuality + ".3gp");
123131
try {

media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java

Lines changed: 82 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,13 @@
3737
import android.view.SurfaceHolder;
3838

3939
import java.util.List;
40+
import java.io.BufferedReader;
4041
import java.io.FileDescriptor;
4142
import java.io.FileInputStream;
4243
import java.io.FileOutputStream;
4344
import java.io.IOException;
4445
import java.io.InputStream;
46+
import java.io.InputStreamReader;
4547
import java.io.Writer;
4648
import java.io.File;
4749
import 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

Comments
 (0)