Add memory tracking for persistent proccesses and launcher

Change-Id: I5228bd67884dc8b77207a597f279fd4032c7f9d9
This commit is contained in:
wsmlby
2014-07-24 14:27:39 -07:00
parent 35efc633d0
commit 6c77e104bc

View File

@@ -34,8 +34,10 @@ import android.util.Log;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* This test is intended to measure the amount of memory applications use when
@@ -57,11 +59,12 @@ public class MemoryUsageTest extends InstrumentationTestCase {
private static final String TAG = "MemoryUsageInstrumentation";
private static final String KEY_APPS = "apps";
private static final String KEY_PROCS = "persistent";
private static final String LAUNCHER_KEY = "launcher";
private Map<String, Intent> mNameToIntent;
private Map<String, String> mNameToProcess;
private Map<String, String> mNameToResultKey;
private Set<String> mPersistentProcesses;
private IActivityManager mAm;
public void testMemory() {
@@ -75,35 +78,61 @@ public class MemoryUsageTest extends InstrumentationTestCase {
Bundle results = new Bundle();
for (String app : mNameToResultKey.keySet()) {
String processName;
try {
processName = startApp(app);
measureMemory(app, processName, results);
closeApp();
} catch (NameNotFoundException e) {
Log.i(TAG, "Application " + app + " not found");
if (!mPersistentProcesses.contains(app)) {
String processName;
try {
processName = startApp(app);
measureMemory(app, processName, results);
closeApp();
} catch (NameNotFoundException e) {
Log.i(TAG, "Application " + app + " not found");
}
} else {
measureMemory(app, app, results);
}
}
instrumentation.sendStatus(0, results);
}
private void parseArgs(Bundle args) {
mNameToResultKey = new HashMap<String, String>();
String appList = args.getString(KEY_APPS);
private String getLauncherPackageName() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
ResolveInfo resolveInfo = getInstrumentation().getContext().
getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
return resolveInfo.activityInfo.packageName;
}
if (appList == null)
return;
String appNames[] = appList.split("\\|");
for (String pair : appNames) {
private Map<String, String> parseListToMap(String list) {
Map<String, String> map = new HashMap<String, String>();
String names[] = list.split("\\|");
for (String pair : names) {
String[] parts = pair.split("\\^");
if (parts.length != 2) {
Log.e(TAG, "The apps key is incorectly formatted");
fail();
}
map.put(parts[0], parts[1]);
}
return map;
}
mNameToResultKey.put(parts[0], parts[1]);
private void parseArgs(Bundle args) {
mNameToResultKey = new HashMap<String, String>();
mPersistentProcesses = new HashSet<String>();
String appList = args.getString(KEY_APPS);
String procList = args.getString(KEY_PROCS);
String mLauncherPackageName = getLauncherPackageName();
mPersistentProcesses.add(mLauncherPackageName);
mNameToResultKey.put(mLauncherPackageName, LAUNCHER_KEY);
if (appList == null && procList == null)
return;
if (appList != null) {
mNameToResultKey.putAll(parseListToMap(appList));
}
if (procList != null) {
Map<String, String> procMap = parseListToMap(procList);
mPersistentProcesses.addAll(procMap.keySet());
mNameToResultKey.putAll(procMap);
}
}