diff --git a/src/com/android/loganalysis/item/CompactMemInfoItem.java b/src/com/android/loganalysis/item/CompactMemInfoItem.java index fff79b95aff7bf0eb1bd78619b6b0f879b155b3d..9c52b881f7785e53391371d513bc1223a20dd131 100644 --- a/src/com/android/loganalysis/item/CompactMemInfoItem.java +++ b/src/com/android/loganalysis/item/CompactMemInfoItem.java @@ -32,6 +32,7 @@ public class CompactMemInfoItem implements IItem { public static final String PID_JSON_KEY = "pid"; public static final String NAME_JSON_KEY = "name"; public static final String PSS_JSON_KEY = "pss"; + public static final String SWAP_JSON_KEY = "swap"; public static final String TYPE_JSON_KEY = "type"; public static final String ACTIVITIES_JSON_KEY = "activities"; public static final String PROCESSES_JSON_KEY = "processes"; @@ -39,6 +40,7 @@ public class CompactMemInfoItem implements IItem { /** Constants for attributes HashMap */ private static final String NAME_ATTR_KEY = "name"; private static final String PSS_ATTR_KEY = "pss"; + private static final String SWAP_ATTR_KEY = "swap"; private static final String TYPE_ATTR_KEY = "type"; private static final String ACTIVITIES_ATTR_KEY = "activities"; @@ -66,6 +68,7 @@ public class CompactMemInfoItem implements IItem { proc.put(PID_JSON_KEY, pid); proc.put(NAME_JSON_KEY, getName(pid)); proc.put(PSS_JSON_KEY, getPss(pid)); + proc.put(SWAP_JSON_KEY, getSwap(pid)); proc.put(TYPE_JSON_KEY, getType(pid)); proc.put(ACTIVITIES_JSON_KEY, hasActivities(pid)); processes.put(proc); @@ -99,11 +102,12 @@ public class CompactMemInfoItem implements IItem { /** * Adds a process to the list stored in this item. */ - public void addPid(int pid, String name, String type, long pss, boolean activities) { + public void addPid(int pid, String name, String type, long pss, long swap, boolean activities) { Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(NAME_ATTR_KEY, name); attributes.put(TYPE_ATTR_KEY, type); attributes.put(PSS_ATTR_KEY, pss); + attributes.put(SWAP_ATTR_KEY, swap); attributes.put(ACTIVITIES_ATTR_KEY, activities); mPids.put(pid, attributes); } @@ -122,6 +126,13 @@ public class CompactMemInfoItem implements IItem { return (Long)get(pid).get(PSS_ATTR_KEY); } + /** + * Return swap memory of the process with a given name. + */ + public long getSwap(int pid) { + return (Long)get(pid).get(SWAP_ATTR_KEY); + } + /** * Returns the type of the process with a given pid. Some possible types are native, cached, * foreground and etc. diff --git a/src/com/android/loganalysis/parser/CompactMemInfoParser.java b/src/com/android/loganalysis/parser/CompactMemInfoParser.java index c3f29d0465b3f504b2b5738c0c0b7fe837d601c6..a4223d27678ba7c96f6af20b876c28e478ed9c1d 100644 --- a/src/com/android/loganalysis/parser/CompactMemInfoParser.java +++ b/src/com/android/loganalysis/parser/CompactMemInfoParser.java @@ -38,7 +38,7 @@ import java.util.regex.Pattern; */ public class CompactMemInfoParser implements IParser { private static final Pattern PROC_PREFIX = Pattern.compile( - "proc,(.+),(.+),(\\d+),(\\d+),(.?)"); + "proc,(\\w+),([a-zA-Z_0-9\\.]+),(\\d+),(\\d+),((\\S+),)?(.*)"); private static final Pattern LOST_RAM_PREFIX = Pattern.compile( "lostram,(.+)"); @@ -57,8 +57,12 @@ public class CompactMemInfoParser implements IParser { try { int pid = Integer.parseInt(m.group(3)); long pss = Long.parseLong(m.group(4)); - boolean activities = "a".equals(m.group(5)); - item.addPid(pid, name, type, pss, activities); + long swap = 0; + if (m.group(6) != null && !"N/A".equals(m.group(6))) { + swap = Long.parseLong(m.group(6)); + } + boolean activities = "a".equals(m.group(6)); + item.addPid(pid, name, type, pss, swap, activities); continue; } catch (NumberFormatException nfe) { // ignore exception diff --git a/tests/src/com/android/loganalysis/parser/CompactMemInfoParserTest.java b/tests/src/com/android/loganalysis/parser/CompactMemInfoParserTest.java index 6400aca64d2c1fdd8bd6fc4ddb8214a58ab498da..009af1de52427a2a451cfa951e9768d9ed250a58 100644 --- a/tests/src/com/android/loganalysis/parser/CompactMemInfoParserTest.java +++ b/tests/src/com/android/loganalysis/parser/CompactMemInfoParserTest.java @@ -28,7 +28,20 @@ import java.util.List; public class CompactMemInfoParserTest extends TestCase { - public void testSingleProcLine() { + public void testSingleProcLineWithSwap() { + List<String> input = Arrays.asList("proc,cached,com.google.android.youtube1,2964,19345,1005,e"); + + CompactMemInfoItem item = new CompactMemInfoParser().parse(input); + + assertEquals(1, item.getPids().size()); + assertEquals("com.google.android.youtube1", item.getName(2964)); + assertEquals(19345, item.getPss(2964)); + assertEquals(1005, item.getSwap(2964)); + assertEquals("cached", item.getType(2964)); + assertEquals(false, item.hasActivities(2964)); + } + + public void testSingleProcLineWithoutSwap() { List<String> input = Arrays.asList("proc,cached,com.google.android.youtube,2964,19345,e"); CompactMemInfoItem item = new CompactMemInfoParser().parse(input); @@ -36,6 +49,7 @@ public class CompactMemInfoParserTest extends TestCase { assertEquals(1, item.getPids().size()); assertEquals("com.google.android.youtube", item.getName(2964)); assertEquals(19345, item.getPss(2964)); + assertEquals(0, item.getSwap(2964)); assertEquals("cached", item.getType(2964)); assertEquals(false, item.hasActivities(2964)); } @@ -49,6 +63,9 @@ public class CompactMemInfoParserTest extends TestCase { public void testSomeMalformedLines() { List<String> input = Arrays.asList( "proc,cached,com.google.android.youtube,a,b,e", + "proc,cached,com.google.android.youtube,2964,c,e", + "proc,cached,com.google.android.youtube,2964,e", + "proc,cached,com.google.android.youtube,2964,19345,a,e", "lostram,a,1000", "lostram,1000,a"); @@ -59,11 +76,11 @@ public class CompactMemInfoParserTest extends TestCase { public void testMultipleLines() { List<String> input = Arrays.asList( - "proc,cached,com.google.android.youtube,2964,19345,e", - "proc,cached,com.google.android.apps.plus,2877,9604,e", - "proc,cached,com.google.android.apps.magazines,2009,20111,e", - "proc,cached,com.google.android.apps.walletnfcrel,10790,11164,e", - "proc,cached,com.google.android.incallui,3410,9491,e", + "proc,cached,com.google.android.youtube,2964,19345,123,e", + "proc,cached,com.google.android.apps.plus,2877,9604,N/A,e", + "proc,cached,com.google.android.apps.magazines,2009,20111,N/A,e", + "proc,cached,com.google.android.apps.walletnfcrel,10790,11164,100,e", + "proc,cached,com.google.android.incallui,3410,9491,N/A,e", "lostram,1005"); CompactMemInfoItem item = new CompactMemInfoParser().parse(input); @@ -71,6 +88,7 @@ public class CompactMemInfoParserTest extends TestCase { assertEquals(5, item.getPids().size()); assertEquals("com.google.android.youtube", item.getName(2964)); assertEquals(19345, item.getPss(2964)); + assertEquals(123, item.getSwap(2964)); assertEquals("cached", item.getType(2964)); assertEquals(false, item.hasActivities(2964)); @@ -82,11 +100,11 @@ public class CompactMemInfoParserTest extends TestCase { List<String> input = Arrays.asList( "oom,cached,141357", - "proc,cached,com.google.android.youtube,2964,19345,e", - "proc,cached,com.google.android.apps.plus,2877,9604,e", - "proc,cached,com.google.android.apps.magazines,2009,20111,e", - "proc,cached,com.google.android.apps.walletnfcrel,10790,11164,e", - "proc,cached,com.google.android.incallui,3410,9491,e", + "proc,cached,com.google.android.youtube,2964,19345,54321,e", + "proc,cached,com.google.android.apps.plus,2877,9604,4321,e", + "proc,cached,com.google.android.apps.magazines,2009,20111,321,e", + "proc,cached,com.google.android.apps.walletnfcrel,10790,11164,21,e", + "proc,cached,com.google.android.incallui,3410,9491,1,e", "cat,Native,63169"); CompactMemInfoItem item = new CompactMemInfoParser().parse(input); @@ -94,6 +112,7 @@ public class CompactMemInfoParserTest extends TestCase { assertEquals(5, item.getPids().size()); assertEquals("com.google.android.youtube", item.getName(2964)); assertEquals(19345, item.getPss(2964)); + assertEquals(54321, item.getSwap(2964)); assertEquals("cached", item.getType(2964)); assertEquals(false, item.hasActivities(2964)); } @@ -101,11 +120,11 @@ public class CompactMemInfoParserTest extends TestCase { public void testJson() throws JSONException { List<String> input = Arrays.asList( "oom,cached,141357", - "proc,cached,com.google.android.youtube,2964,19345,e", - "proc,cached,com.google.android.apps.plus,2877,9604,e", - "proc,cached,com.google.android.apps.magazines,2009,20111,e", - "proc,cached,com.google.android.apps.walletnfcrel,10790,11164,e", - "proc,cached,com.google.android.incallui,3410,9491,e", + "proc,cached,com.google.android.youtube,2964,19345,N/A,e", + "proc,cached,com.google.android.apps.plus,2877,9604,50,e", + "proc,cached,com.google.android.apps.magazines,2009,20111,100,e", + "proc,cached,com.google.android.apps.walletnfcrel,10790,11164,0,e", + "proc,cached,com.google.android.incallui,3410,9491,500,e", "lostram,1005", "cat,Native,63169");