Merge "Track MemFree from cat proc/meminfo"
diff --git a/libraries/collectors-helper/memory/src/com/android/helpers/FreeMemHelper.java b/libraries/collectors-helper/memory/src/com/android/helpers/FreeMemHelper.java
index 5992dad..b2f1f8c 100644
--- a/libraries/collectors-helper/memory/src/com/android/helpers/FreeMemHelper.java
+++ b/libraries/collectors-helper/memory/src/com/android/helpers/FreeMemHelper.java
@@ -50,6 +50,7 @@
private static final String PROC_MEMINFO = "cat /proc/meminfo";
private static final String LINE_SEPARATOR = "\\n";
private static final String MEM_AVAILABLE_PATTERN = "^MemAvailable.*";
+ private static final String MEM_FREE_PATTERN = "^MemFree.*";
private static final Pattern CACHE_PROC_START_PATTERN = Pattern.compile(".*: Cached$");
private static final Pattern PID_PATTERN = Pattern.compile("^.*pid(?<processid> [0-9]*).*$");
private static final String DUMPSYS_PROCESS = "dumpsys meminfo %s";
@@ -57,6 +58,7 @@
private static final String PROCESS_ID = "processid";
public static final String MEM_AVAILABLE_CACHE_PROC_DIRTY = "MemAvailable_CacheProcDirty_bytes";
public static final String PROC_MEMINFO_MEM_AVAILABLE= "proc_meminfo_memavailable_bytes";
+ public static final String PROC_MEMINFO_MEM_FREE= "proc_meminfo_memfree_bytes";
public static final String DUMPSYS_CACHED_PROC_MEMORY= "dumpsys_cached_procs_memory_bytes";
private UiDevice mUiDevice;
@@ -77,27 +79,35 @@
String memInfo;
try {
memInfo = mUiDevice.executeShellCommand(PROC_MEMINFO);
+ Log.i(TAG, "cat proc/meminfo :" + memInfo);
} catch (IOException ioe) {
Log.e(TAG, "Failed to read " + PROC_MEMINFO + ".", ioe);
return null;
}
Pattern memAvailablePattern = Pattern.compile(MEM_AVAILABLE_PATTERN, Pattern.MULTILINE);
+ Pattern memFreePattern = Pattern.compile(MEM_FREE_PATTERN, Pattern.MULTILINE);
Matcher memAvailableMatcher = memAvailablePattern.matcher(memInfo);
+ Matcher memFreeMatcher = memFreePattern.matcher(memInfo);
String[] memAvailable = null;
- if (memAvailableMatcher.find()) {
+ String[] memFree = null;
+ if (memAvailableMatcher.find() && memFreeMatcher.find()) {
memAvailable = memAvailableMatcher.group(0).split(SEPARATOR);
+ memFree = memFreeMatcher.group(0).split(SEPARATOR);
}
- if (memAvailable == null) {
- Log.e(TAG, "MemAvailable is null.");
+ if (memAvailable == null || memFree == null) {
+ Log.e(TAG, "MemAvailable or MemFree is null.");
return null;
}
Map<String, Long> results = new HashMap<>();
long memAvailableProc = Long.parseLong(memAvailable[1]);
results.put(PROC_MEMINFO_MEM_AVAILABLE, (memAvailableProc * 1024));
+ long memFreeProc = Long.parseLong(memFree[1]);
+ results.put(PROC_MEMINFO_MEM_FREE, (memFreeProc * 1024));
+
long cacheProcDirty = memAvailableProc;
byte[] dumpsysMemInfoBytes = MetricUtility.executeCommandBlocking(DUMPSYS_MEMIFNO,
InstrumentationRegistry.getInstrumentation());
diff --git a/libraries/collectors-helper/memory/test/src/com/android/helpers/tests/FreeMemHelperTest.java b/libraries/collectors-helper/memory/test/src/com/android/helpers/tests/FreeMemHelperTest.java
index 283ab36..9770908 100644
--- a/libraries/collectors-helper/memory/test/src/com/android/helpers/tests/FreeMemHelperTest.java
+++ b/libraries/collectors-helper/memory/test/src/com/android/helpers/tests/FreeMemHelperTest.java
@@ -54,6 +54,7 @@
assertTrue(freeMemMetrics.containsKey(FreeMemHelper.DUMPSYS_CACHED_PROC_MEMORY));
assertTrue(freeMemMetrics.get(FreeMemHelper.MEM_AVAILABLE_CACHE_PROC_DIRTY) > 0);
assertTrue(freeMemMetrics.get(FreeMemHelper.PROC_MEMINFO_MEM_AVAILABLE) > 0);
+ assertTrue(freeMemMetrics.get(FreeMemHelper.PROC_MEMINFO_MEM_FREE) > 0);
assertTrue(freeMemMetrics.get(FreeMemHelper.DUMPSYS_CACHED_PROC_MEMORY) > 0);
}
}