93 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| This directory contains android activities and host-side tests relating to libcore memory metrics.
 | |
| 
 | |
| Directory structure
 | |
| ===================
 | |
| 
 | |
| apps
 | |
|   - Android activities. See instructions below for use.
 | |
| 
 | |
| host
 | |
|   - Host-side test code (which installs & runs activites). See instructions below for use.
 | |
| 
 | |
| Running LibcoreHeapMetricsTest
 | |
| ==============================
 | |
| 
 | |
| You can manually run this as follows:
 | |
| 
 | |
|   make tradefed-all libcore-memory-metrics-tests LibcoreHeapDumper ahat
 | |
|   tradefed.sh run commandAndExit template/local_min --template:map test=libcore-memory-metrics-tests
 | |
| 
 | |
| This installs and runs the LibcoreHeapDumpActivity on the device, pulls the heaps back to the host,
 | |
| analyses them, and derives metrics. You can see the metrics in the tradefed output.
 | |
| 
 | |
| Manually running HeapDumpInstrumentation
 | |
| ========================================
 | |
| 
 | |
| This instrumentation dumps a heap, performs some configurable action (see the code for details), and
 | |
| then dumps another heap. You can run it manually as follows:
 | |
| 
 | |
|   make LibcoreHeapDumper
 | |
|   adb install -g -r ${ANDROID_PRODUCT_OUT}/testcases/LibcoreHeapDumper/arm64/LibcoreHeapDumper.apk
 | |
| 
 | |
|   DEVICE_EXTERNAL_STORAGE=$(adb shell 'echo -n ${EXTERNAL_STORAGE}')
 | |
|   # Pick a suitable name here:
 | |
|   RELATIVE_DIR=dumps
 | |
|   adb shell mkdir ${DEVICE_EXTERNAL_STORAGE}/${RELATIVE_DIR}
 | |
|   # It's okay if this does nothing:
 | |
|   adb shell rm -r ${DEVICE_EXTERNAL_STORAGE}/${RELATIVE_DIR}/*
 | |
|   # Pick the action you want here:
 | |
|   DUMPER_ACTION=NOOP
 | |
|   adb shell am instrument -w -e dumpdir ${RELATIVE_DIR} -e action ${DUMPER_ACTION} libcore.heapdumper/.HeapDumpInstrumentation
 | |
|   adb shell ls ${DEVICE_EXTERNAL_STORAGE}/${RELATIVE_DIR}
 | |
|   # That normally shows before.hprof and after.hprof files. If it shows an error file, adb shell cat
 | |
|   # it to see what happened. If it doesn't show anything, adb logcat to see what happened.
 | |
| 
 | |
|   LOCAL_DIR=/tmp
 | |
|   mkdir -p ${LOCAL_DIR}/${RELATIVE_DIR}
 | |
|   # It's okay if this does nothing:
 | |
|   rm -r ${LOCAL_DIR}/${RELATIVE_DIR}/*
 | |
|   adb pull ${DEVICE_EXTERNAL_STORAGE}/${RELATIVE_DIR} ${LOCAL_DIR}
 | |
|   ls ${LOCAL_DIR}/${RELATIVE_DIR}
 | |
| 
 | |
|   make ahat
 | |
|   # To examine the first heap dump:
 | |
|   ahat ${LOCAL_DIR}/${RELATIVE_DIR}/before.hprof
 | |
|   # Visit the localhost URL shown; ctrl-C to exit
 | |
|   # To diff the second heap dump against the first:
 | |
|   ahat ${LOCAL_DIR}/${RELATIVE_DIR}/after.hprof --baseline ${LOCAL_DIR}/${RELATIVE_DIR}/before.hprof
 | |
| 
 | |
|   # To clean up:
 | |
|   rm -r ${LOCAL_DIR}/${RELATIVE_DIR}
 | |
|   adb shell rm -r ${DEVICE_EXTERNAL_STORAGE}/${RELATIVE_DIR}
 | |
|   adb uninstall libcore.heapdumper
 | |
| 
 | |
| Manually running PssInstrumentation
 | |
| ===================================
 | |
| 
 | |
| This instrumentation measures the PSS in kB, performs some configurable action (see the code for
 | |
| details), and then measures the PSS again. You can run it manually as follows:
 | |
| 
 | |
|   make LibcoreHeapDumper
 | |
|   adb install -g -r ${ANDROID_PRODUCT_OUT}/data/app/LibcoreHeapDumper/LibcoreHeapDumper.apk
 | |
| 
 | |
|   DEVICE_EXTERNAL_STORAGE=$(adb shell 'echo -n ${EXTERNAL_STORAGE}')
 | |
|   # Pick a suitable name here:
 | |
|   RELATIVE_DIR=pss
 | |
|   adb shell mkdir ${DEVICE_EXTERNAL_STORAGE}/${RELATIVE_DIR}
 | |
|   # It's okay if this does nothing:
 | |
|   adb shell rm -r ${DEVICE_EXTERNAL_STORAGE}/${RELATIVE_DIR}/*
 | |
|   # Pick the action you want here:
 | |
|   DUMPER_ACTION=NOOP
 | |
|   adb shell am instrument -w -e dumpdir ${RELATIVE_DIR} -e action ${DUMPER_ACTION} libcore.heapdumper/.PssInstrumentation
 | |
|   adb shell ls ${DEVICE_EXTERNAL_STORAGE}/${RELATIVE_DIR}
 | |
|   # That normally shows before.pss.txt and after.pss.txt files. If it shows an error file, adb shell
 | |
|   # cat it to see what happened. If it doesn't show anything, adb logcat to see what happened.
 | |
| 
 | |
|   # To see the PSS measurements in kB:
 | |
|   adb shell cat ${DEVICE_EXTERNAL_STORAGE}/${RELATIVE_DIR}/before.pss.txt
 | |
|   adb shell cat ${DEVICE_EXTERNAL_STORAGE}/${RELATIVE_DIR}/after.pss.txt
 | |
| 
 | |
|   # To clean up:
 | |
|   adb shell rm -r ${DEVICE_EXTERNAL_STORAGE}/${RELATIVE_DIR}
 | |
|   adb uninstall libcore.heapdumper
 |