am b2a4a735: am d90ff677: Merge "Follow-on for #10671878: Proc stats needs to remove old data structures" into klp-dev

* commit 'b2a4a735e20a8f4c02a7205cb5da23ef0021fcef':
  Follow-on for #10671878: Proc stats needs to remove old data structures
This commit is contained in:
Dianne Hackborn
2013-09-09 14:29:10 -07:00
committed by Android Git Automerger
2 changed files with 29 additions and 28 deletions

View File

@@ -78,7 +78,6 @@ public final class ProcStatsEntry implements Parcelable {
mBestTargetPackage = null; mBestTargetPackage = null;
if (mUnique) { if (mUnique) {
mBestTargetPackage = mPackage; mBestTargetPackage = mPackage;
addServices(stats.getPackageStateLocked(mPackage, mUid));
} else { } else {
// See if there is one significant package that was running here. // See if there is one significant package that was running here.
ArrayList<ProcStatsEntry> subProcs = new ArrayList<ProcStatsEntry>(); ArrayList<ProcStatsEntry> subProcs = new ArrayList<ProcStatsEntry>();
@@ -90,18 +89,13 @@ public final class ProcStatsEntry implements Parcelable {
continue; continue;
} }
ProcessStats.PackageState pkgState = uids.valueAt(iu); ProcessStats.PackageState pkgState = uids.valueAt(iu);
boolean match = false;
for (int iproc=0, NPROC=pkgState.mProcesses.size(); iproc<NPROC; iproc++) { for (int iproc=0, NPROC=pkgState.mProcesses.size(); iproc<NPROC; iproc++) {
ProcessStats.ProcessState subProc = ProcessStats.ProcessState subProc =
pkgState.mProcesses.valueAt(iproc); pkgState.mProcesses.valueAt(iproc);
if (subProc.mName.equals(mName)) { if (subProc.mName.equals(mName)) {
match = true;
subProcs.add(new ProcStatsEntry(subProc, totals)); subProcs.add(new ProcStatsEntry(subProc, totals));
} }
} }
if (match) {
addServices(stats.getPackageStateLocked(mPackage, mUid));
}
} }
} }
if (subProcs.size() > 1) { if (subProcs.size() > 1) {
@@ -173,12 +167,8 @@ public final class ProcStatsEntry implements Parcelable {
} }
} }
public void addServices(ProcessStats.PackageState pkgState) { public void addService(ProcessStats.ServiceState svc) {
for (int isvc=0, NSVC=pkgState.mServices.size(); isvc<NSVC; isvc++) { mServices.add(new Service(svc));
ProcessStats.ServiceState svc = pkgState.mServices.valueAt(isvc);
// XXX can't tell what process it is in!
mServices.add(new Service(svc));
}
} }
@Override @Override
@@ -213,32 +203,22 @@ public final class ProcStatsEntry implements Parcelable {
public static final class Service implements Parcelable { public static final class Service implements Parcelable {
final String mPackage; final String mPackage;
final String mName; final String mName;
final String mProcess;
final long mDuration; final long mDuration;
public Service(ProcessStats.ServiceState service) { public Service(ProcessStats.ServiceState service) {
mPackage = service.mPackage; mPackage = service.mPackage;
mName = service.mName; mName = service.mName;
long startDuration = ProcessStats.dumpSingleServiceTime(null, null, service, mProcess = service.mProcessName;
ProcessStats.ServiceState.SERVICE_STARTED, mDuration = ProcessStats.dumpSingleServiceTime(null, null, service,
ProcessStats.ServiceState.SERVICE_RUN,
ProcessStats.STATE_NOTHING, 0, 0); ProcessStats.STATE_NOTHING, 0, 0);
long bindDuration = ProcessStats.dumpSingleServiceTime(null, null, service,
ProcessStats.ServiceState.SERVICE_BOUND,
ProcessStats.STATE_NOTHING, 0, 0);
long execDuration = ProcessStats.dumpSingleServiceTime(null, null, service,
ProcessStats.ServiceState.SERVICE_EXEC,
ProcessStats.STATE_NOTHING, 0, 0);
if (bindDuration > startDuration) {
startDuration = bindDuration;
}
if (execDuration > startDuration) {
startDuration = execDuration;
}
mDuration = startDuration;
} }
public Service(Parcel in) { public Service(Parcel in) {
mPackage = in.readString(); mPackage = in.readString();
mName = in.readString(); mName = in.readString();
mProcess = in.readString();
mDuration = in.readLong(); mDuration = in.readLong();
} }
@@ -251,6 +231,7 @@ public final class ProcStatsEntry implements Parcelable {
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mPackage); dest.writeString(mPackage);
dest.writeString(mName); dest.writeString(mName);
dest.writeString(mProcess);
dest.writeLong(mDuration); dest.writeLong(mDuration);
} }

View File

@@ -30,6 +30,7 @@ import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment; import android.preference.PreferenceFragment;
import android.preference.PreferenceGroup; import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
import android.util.ArrayMap;
import android.util.Log; import android.util.Log;
import android.util.SparseArray; import android.util.SparseArray;
import android.util.TimeUtils; import android.util.TimeUtils;
@@ -245,10 +246,14 @@ public class ProcessStatsUi extends PreferenceFragment {
} }
*/ */
ArrayMap<String, ProcStatsEntry> processes = new ArrayMap<String, ProcStatsEntry>(
mStats.mProcesses.getMap().size());
for (int ip=0, N=mStats.mProcesses.getMap().size(); ip<N; ip++) { for (int ip=0, N=mStats.mProcesses.getMap().size(); ip<N; ip++) {
SparseArray<ProcessStats.ProcessState> uids = mStats.mProcesses.getMap().valueAt(ip); SparseArray<ProcessStats.ProcessState> uids = mStats.mProcesses.getMap().valueAt(ip);
for (int iu=0; iu<uids.size(); iu++) { for (int iu=0; iu<uids.size(); iu++) {
procs.add(new ProcStatsEntry(uids.valueAt(iu), totals)); ProcStatsEntry ent = new ProcStatsEntry(uids.valueAt(iu), totals);
procs.add(ent);
processes.put(ent.mName, ent);
} }
} }
@@ -283,6 +288,21 @@ public class ProcessStatsUi extends PreferenceFragment {
mAppListGroup.addPreference(pref); mAppListGroup.addPreference(pref);
if (mAppListGroup.getPreferenceCount() > (MAX_ITEMS_TO_LIST+1)) break; if (mAppListGroup.getPreferenceCount() > (MAX_ITEMS_TO_LIST+1)) break;
} }
// Add in service info.
for (int ip=0, N=mStats.mPackages.getMap().size(); ip<N; ip++) {
SparseArray<ProcessStats.PackageState> uids = mStats.mPackages.getMap().valueAt(ip);
for (int iu=0; iu<uids.size(); iu++) {
ProcessStats.PackageState ps = uids.valueAt(iu);
for (int is=0, NS=ps.mServices.size(); is<NS; is++) {
ProcessStats.ServiceState ss = ps.mServices.valueAt(is);
if (ss.mProcessName != null) {
ProcStatsEntry ent = processes.get(ss.mProcessName);
ent.addService(ss);
}
}
}
}
} }
private void load() { private void load() {