Search in sources :

Example 11 with ProcessState

use of com.android.internal.app.procstats.ProcessState in project android_frameworks_base by DirtyUnicorns.

the class ProcessStats method collectProcessesLocked.

public ArrayList<ProcessState> collectProcessesLocked(int[] screenStates, int[] memStates, int[] procStates, int[] sortProcStates, long now, String reqPackage, boolean activeOnly) {
    final ArraySet<ProcessState> foundProcs = new ArraySet<ProcessState>();
    final ArrayMap<String, SparseArray<SparseArray<PackageState>>> pkgMap = mPackages.getMap();
    for (int ip = 0; ip < pkgMap.size(); ip++) {
        final String pkgName = pkgMap.keyAt(ip);
        final SparseArray<SparseArray<PackageState>> procs = pkgMap.valueAt(ip);
        for (int iu = 0; iu < procs.size(); iu++) {
            final SparseArray<PackageState> vpkgs = procs.valueAt(iu);
            final int NVERS = vpkgs.size();
            for (int iv = 0; iv < NVERS; iv++) {
                final PackageState state = vpkgs.valueAt(iv);
                final int NPROCS = state.mProcesses.size();
                final boolean pkgMatch = reqPackage == null || reqPackage.equals(pkgName);
                for (int iproc = 0; iproc < NPROCS; iproc++) {
                    final ProcessState proc = state.mProcesses.valueAt(iproc);
                    if (!pkgMatch && !reqPackage.equals(proc.getName())) {
                        continue;
                    }
                    if (activeOnly && !proc.isInUse()) {
                        continue;
                    }
                    foundProcs.add(proc.getCommonProcess());
                }
            }
        }
    }
    ArrayList<ProcessState> outProcs = new ArrayList<ProcessState>(foundProcs.size());
    for (int i = 0; i < foundProcs.size(); i++) {
        ProcessState proc = foundProcs.valueAt(i);
        if (proc.computeProcessTimeLocked(screenStates, memStates, procStates, now) > 0) {
            outProcs.add(proc);
            if (procStates != sortProcStates) {
                proc.computeProcessTimeLocked(screenStates, memStates, sortProcStates, now);
            }
        }
    }
    Collections.sort(outProcs, ProcessState.COMPARATOR);
    return outProcs;
}
Also used : ArraySet(android.util.ArraySet) ArrayList(java.util.ArrayList) ProcessState(com.android.internal.app.procstats.ProcessState) SparseArray(android.util.SparseArray)

Example 12 with ProcessState

use of com.android.internal.app.procstats.ProcessState in project android_frameworks_base by DirtyUnicorns.

the class ProcessRecord method makeActive.

public void makeActive(IApplicationThread _thread, ProcessStatsService tracker) {
    if (thread == null) {
        final ProcessState origBase = baseProcessTracker;
        if (origBase != null) {
            origBase.setState(ProcessStats.STATE_NOTHING, tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList);
            origBase.makeInactive();
        }
        baseProcessTracker = tracker.getProcessStateLocked(info.packageName, uid, info.versionCode, processName);
        baseProcessTracker.makeActive();
        for (int i = 0; i < pkgList.size(); i++) {
            ProcessStats.ProcessStateHolder holder = pkgList.valueAt(i);
            if (holder.state != null && holder.state != origBase) {
                holder.state.makeInactive();
            }
            holder.state = tracker.getProcessStateLocked(pkgList.keyAt(i), uid, info.versionCode, processName);
            if (holder.state != baseProcessTracker) {
                holder.state.makeActive();
            }
        }
    }
    thread = _thread;
}
Also used : ProcessState(com.android.internal.app.procstats.ProcessState) ProcessStats(com.android.internal.app.procstats.ProcessStats)

Example 13 with ProcessState

use of com.android.internal.app.procstats.ProcessState in project android_frameworks_base by DirtyUnicorns.

the class ProcessRecord method makeInactive.

public void makeInactive(ProcessStatsService tracker) {
    thread = null;
    final ProcessState origBase = baseProcessTracker;
    if (origBase != null) {
        origBase.setState(ProcessStats.STATE_NOTHING, tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList);
        origBase.makeInactive();
    }
    baseProcessTracker = null;
    for (int i = 0; i < pkgList.size(); i++) {
        ProcessStats.ProcessStateHolder holder = pkgList.valueAt(i);
        if (holder.state != null && holder.state != origBase) {
            holder.state.makeInactive();
        }
        holder.state = null;
    }
}
Also used : ProcessState(com.android.internal.app.procstats.ProcessState) ProcessStats(com.android.internal.app.procstats.ProcessStats)

Example 14 with ProcessState

use of com.android.internal.app.procstats.ProcessState in project android_frameworks_base by DirtyUnicorns.

the class ProcessStatsService method readLocked.

boolean readLocked(ProcessStats stats, AtomicFile file) {
    try {
        FileInputStream stream = file.openRead();
        stats.read(stream);
        stream.close();
        if (stats.mReadError != null) {
            Slog.w(TAG, "Ignoring existing stats; " + stats.mReadError);
            if (DEBUG) {
                ArrayMap<String, SparseArray<ProcessState>> procMap = stats.mProcesses.getMap();
                final int NPROC = procMap.size();
                for (int ip = 0; ip < NPROC; ip++) {
                    Slog.w(TAG, "Process: " + procMap.keyAt(ip));
                    SparseArray<ProcessState> uids = procMap.valueAt(ip);
                    final int NUID = uids.size();
                    for (int iu = 0; iu < NUID; iu++) {
                        Slog.w(TAG, "  Uid " + uids.keyAt(iu) + ": " + uids.valueAt(iu));
                    }
                }
                ArrayMap<String, SparseArray<SparseArray<ProcessStats.PackageState>>> pkgMap = stats.mPackages.getMap();
                final int NPKG = pkgMap.size();
                for (int ip = 0; ip < NPKG; ip++) {
                    Slog.w(TAG, "Package: " + pkgMap.keyAt(ip));
                    SparseArray<SparseArray<ProcessStats.PackageState>> uids = pkgMap.valueAt(ip);
                    final int NUID = uids.size();
                    for (int iu = 0; iu < NUID; iu++) {
                        Slog.w(TAG, "  Uid: " + uids.keyAt(iu));
                        SparseArray<ProcessStats.PackageState> vers = uids.valueAt(iu);
                        final int NVERS = vers.size();
                        for (int iv = 0; iv < NVERS; iv++) {
                            Slog.w(TAG, "    Vers: " + vers.keyAt(iv));
                            ProcessStats.PackageState pkgState = vers.valueAt(iv);
                            final int NPROCS = pkgState.mProcesses.size();
                            for (int iproc = 0; iproc < NPROCS; iproc++) {
                                Slog.w(TAG, "      Process " + pkgState.mProcesses.keyAt(iproc) + ": " + pkgState.mProcesses.valueAt(iproc));
                            }
                            final int NSRVS = pkgState.mServices.size();
                            for (int isvc = 0; isvc < NSRVS; isvc++) {
                                Slog.w(TAG, "      Service " + pkgState.mServices.keyAt(isvc) + ": " + pkgState.mServices.valueAt(isvc));
                            }
                        }
                    }
                }
            }
            return false;
        }
    } catch (Throwable e) {
        stats.mReadError = "caught exception: " + e;
        Slog.e(TAG, "Error reading process statistics", e);
        return false;
    }
    return true;
}
Also used : IProcessStats(com.android.internal.app.procstats.IProcessStats) ProcessStats(com.android.internal.app.procstats.ProcessStats) FileInputStream(java.io.FileInputStream) ProcessState(com.android.internal.app.procstats.ProcessState) SparseArray(android.util.SparseArray)

Example 15 with ProcessState

use of com.android.internal.app.procstats.ProcessState in project android_frameworks_base by AOSPA.

the class ProcessStats method writeToParcel.

/** @hide */
public void writeToParcel(Parcel out, long now, int flags) {
    out.writeInt(MAGIC);
    out.writeInt(PARCEL_VERSION);
    out.writeInt(STATE_COUNT);
    out.writeInt(ADJ_COUNT);
    out.writeInt(PSS_COUNT);
    out.writeInt(SYS_MEM_USAGE_COUNT);
    out.writeInt(SparseMappingTable.ARRAY_SIZE);
    mCommonStringToIndex = new ArrayMap<String, Integer>(mProcesses.size());
    // First commit all running times.
    ArrayMap<String, SparseArray<ProcessState>> procMap = mProcesses.getMap();
    final int NPROC = procMap.size();
    for (int ip = 0; ip < NPROC; ip++) {
        SparseArray<ProcessState> uids = procMap.valueAt(ip);
        final int NUID = uids.size();
        for (int iu = 0; iu < NUID; iu++) {
            uids.valueAt(iu).commitStateTime(now);
        }
    }
    final ArrayMap<String, SparseArray<SparseArray<PackageState>>> pkgMap = mPackages.getMap();
    final int NPKG = pkgMap.size();
    for (int ip = 0; ip < NPKG; ip++) {
        final SparseArray<SparseArray<PackageState>> uids = pkgMap.valueAt(ip);
        final int NUID = uids.size();
        for (int iu = 0; iu < NUID; iu++) {
            final SparseArray<PackageState> vpkgs = uids.valueAt(iu);
            final int NVERS = vpkgs.size();
            for (int iv = 0; iv < NVERS; iv++) {
                PackageState pkgState = vpkgs.valueAt(iv);
                final int NPROCS = pkgState.mProcesses.size();
                for (int iproc = 0; iproc < NPROCS; iproc++) {
                    ProcessState proc = pkgState.mProcesses.valueAt(iproc);
                    if (proc.getCommonProcess() != proc) {
                        proc.commitStateTime(now);
                    }
                }
                final int NSRVS = pkgState.mServices.size();
                for (int isvc = 0; isvc < NSRVS; isvc++) {
                    pkgState.mServices.valueAt(isvc).commitStateTime(now);
                }
            }
        }
    }
    out.writeLong(mTimePeriodStartClock);
    out.writeLong(mTimePeriodStartRealtime);
    out.writeLong(mTimePeriodEndRealtime);
    out.writeLong(mTimePeriodStartUptime);
    out.writeLong(mTimePeriodEndUptime);
    out.writeString(mRuntime);
    out.writeInt(mHasSwappedOutPss ? 1 : 0);
    out.writeInt(mFlags);
    mTableData.writeToParcel(out);
    if (mMemFactor != STATE_NOTHING) {
        mMemFactorDurations[mMemFactor] += now - mStartTime;
        mStartTime = now;
    }
    writeCompactedLongArray(out, mMemFactorDurations, mMemFactorDurations.length);
    mSysMemUsage.writeToParcel(out);
    out.writeInt(NPROC);
    for (int ip = 0; ip < NPROC; ip++) {
        writeCommonString(out, procMap.keyAt(ip));
        final SparseArray<ProcessState> uids = procMap.valueAt(ip);
        final int NUID = uids.size();
        out.writeInt(NUID);
        for (int iu = 0; iu < NUID; iu++) {
            out.writeInt(uids.keyAt(iu));
            final ProcessState proc = uids.valueAt(iu);
            writeCommonString(out, proc.getPackage());
            out.writeInt(proc.getVersion());
            proc.writeToParcel(out, now);
        }
    }
    out.writeInt(NPKG);
    for (int ip = 0; ip < NPKG; ip++) {
        writeCommonString(out, pkgMap.keyAt(ip));
        final SparseArray<SparseArray<PackageState>> uids = pkgMap.valueAt(ip);
        final int NUID = uids.size();
        out.writeInt(NUID);
        for (int iu = 0; iu < NUID; iu++) {
            out.writeInt(uids.keyAt(iu));
            final SparseArray<PackageState> vpkgs = uids.valueAt(iu);
            final int NVERS = vpkgs.size();
            out.writeInt(NVERS);
            for (int iv = 0; iv < NVERS; iv++) {
                out.writeInt(vpkgs.keyAt(iv));
                final PackageState pkgState = vpkgs.valueAt(iv);
                final int NPROCS = pkgState.mProcesses.size();
                out.writeInt(NPROCS);
                for (int iproc = 0; iproc < NPROCS; iproc++) {
                    writeCommonString(out, pkgState.mProcesses.keyAt(iproc));
                    final ProcessState proc = pkgState.mProcesses.valueAt(iproc);
                    if (proc.getCommonProcess() == proc) {
                        // This is the same as the common process we wrote above.
                        out.writeInt(0);
                    } else {
                        // There is separate data for this package's process.
                        out.writeInt(1);
                        proc.writeToParcel(out, now);
                    }
                }
                final int NSRVS = pkgState.mServices.size();
                out.writeInt(NSRVS);
                for (int isvc = 0; isvc < NSRVS; isvc++) {
                    out.writeString(pkgState.mServices.keyAt(isvc));
                    final ServiceState svc = pkgState.mServices.valueAt(isvc);
                    writeCommonString(out, svc.getProcessName());
                    svc.writeToParcel(out, now);
                }
            }
        }
    }
    // Fragmentation info (/proc/pagetypeinfo)
    final int NPAGETYPES = mPageTypeLabels.size();
    out.writeInt(NPAGETYPES);
    for (int i = 0; i < NPAGETYPES; i++) {
        out.writeInt(mPageTypeZones.get(i));
        out.writeString(mPageTypeLabels.get(i));
        out.writeIntArray(mPageTypeSizes.get(i));
    }
    mCommonStringToIndex = null;
}
Also used : ServiceState(com.android.internal.app.procstats.ServiceState) ProcessState(com.android.internal.app.procstats.ProcessState) SparseArray(android.util.SparseArray)

Aggregations

ProcessState (com.android.internal.app.procstats.ProcessState)72 SparseArray (android.util.SparseArray)41 ServiceState (com.android.internal.app.procstats.ServiceState)41 ProcessStats (com.android.internal.app.procstats.ProcessStats)22 ArrayList (java.util.ArrayList)12 IProcessStats (com.android.internal.app.procstats.IProcessStats)6 ArraySet (android.util.ArraySet)5 FileInputStream (java.io.FileInputStream)5 ApplicationInfo (android.content.pm.ApplicationInfo)1 PackageManager (android.content.pm.PackageManager)1 ProcessMap (com.android.internal.app.ProcessMap)1