private ProcStatsPackageEntry createOsEntry( ProcessDataCollection bgTotals, ProcessDataCollection runTotals, TotalMemoryUseCollection totalMem, long baseCacheRam) { // Add in fake entry representing the OS itself. ProcStatsPackageEntry osPkg = new ProcStatsPackageEntry("os", memTotalTime); ProcStatsEntry osEntry; if (totalMem.sysMemNativeWeight > 0) { osEntry = new ProcStatsEntry( Utils.OS_PKG, 0, mContext.getString(R.string.process_stats_os_native), memTotalTime, (long) (totalMem.sysMemNativeWeight / memTotalTime)); osEntry.evaluateTargetPackage(mPm, mStats, bgTotals, runTotals, sEntryCompare, mUseUss); osPkg.addEntry(osEntry); } if (totalMem.sysMemKernelWeight > 0) { osEntry = new ProcStatsEntry( Utils.OS_PKG, 0, mContext.getString(R.string.process_stats_os_kernel), memTotalTime, (long) (totalMem.sysMemKernelWeight / memTotalTime)); osEntry.evaluateTargetPackage(mPm, mStats, bgTotals, runTotals, sEntryCompare, mUseUss); osPkg.addEntry(osEntry); } if (totalMem.sysMemZRamWeight > 0) { osEntry = new ProcStatsEntry( Utils.OS_PKG, 0, mContext.getString(R.string.process_stats_os_zram), memTotalTime, (long) (totalMem.sysMemZRamWeight / memTotalTime)); osEntry.evaluateTargetPackage(mPm, mStats, bgTotals, runTotals, sEntryCompare, mUseUss); osPkg.addEntry(osEntry); } if (baseCacheRam > 0) { osEntry = new ProcStatsEntry( Utils.OS_PKG, 0, mContext.getString(R.string.process_stats_os_cache), memTotalTime, baseCacheRam / 1024); osEntry.evaluateTargetPackage(mPm, mStats, bgTotals, runTotals, sEntryCompare, mUseUss); osPkg.addEntry(osEntry); } return osPkg; }
private void createPkgMap( ArrayList<ProcStatsEntry> procEntries, ProcessDataCollection bgTotals, ProcessDataCollection runTotals) { // Combine processes into packages. ArrayMap<String, ProcStatsPackageEntry> pkgMap = new ArrayMap<>(); for (int i = procEntries.size() - 1; i >= 0; i--) { ProcStatsEntry proc = procEntries.get(i); proc.evaluateTargetPackage(mPm, mStats, bgTotals, runTotals, sEntryCompare, mUseUss); ProcStatsPackageEntry pkg = pkgMap.get(proc.mBestTargetPackage); if (pkg == null) { pkg = new ProcStatsPackageEntry(proc.mBestTargetPackage, memTotalTime); pkgMap.put(proc.mBestTargetPackage, pkg); pkgEntries.add(pkg); } pkg.addEntry(proc); } }
private ArrayList<ProcStatsEntry> getProcs( ProcessDataCollection bgTotals, ProcessDataCollection runTotals) { final ArrayList<ProcStatsEntry> procEntries = new ArrayList<>(); if (DEBUG) Log.d(TAG, "-------------------- PULLING PROCESSES"); final ProcessMap<ProcStatsEntry> entriesMap = new ProcessMap<ProcStatsEntry>(); for (int ipkg = 0, N = mStats.mPackages.getMap().size(); ipkg < N; ipkg++) { final SparseArray<SparseArray<ProcessStats.PackageState>> pkgUids = mStats.mPackages.getMap().valueAt(ipkg); for (int iu = 0; iu < pkgUids.size(); iu++) { final SparseArray<ProcessStats.PackageState> vpkgs = pkgUids.valueAt(iu); for (int iv = 0; iv < vpkgs.size(); iv++) { final ProcessStats.PackageState st = vpkgs.valueAt(iv); for (int iproc = 0; iproc < st.mProcesses.size(); iproc++) { final ProcessStats.ProcessState pkgProc = st.mProcesses.valueAt(iproc); final ProcessStats.ProcessState proc = mStats.mProcesses.get(pkgProc.mName, pkgProc.mUid); if (proc == null) { Log.w( TAG, "No process found for pkg " + st.mPackageName + "/" + st.mUid + " proc name " + pkgProc.mName); continue; } ProcStatsEntry ent = entriesMap.get(proc.mName, proc.mUid); if (ent == null) { ent = new ProcStatsEntry(proc, st.mPackageName, bgTotals, runTotals, mUseUss); if (ent.mRunWeight > 0) { if (DEBUG) Log.d( TAG, "Adding proc " + proc.mName + "/" + proc.mUid + ": time=" + ProcessStatsUi.makeDuration(ent.mRunDuration) + " (" + ((((double) ent.mRunDuration) / memTotalTime) * 100) + "%)" + " pss=" + ent.mAvgRunMem); entriesMap.put(proc.mName, proc.mUid, ent); procEntries.add(ent); } } else { ent.addPackage(st.mPackageName); } } } } } if (DEBUG) Log.d(TAG, "-------------------- MAPPING SERVICES"); // Add in service info. for (int ip = 0, N = mStats.mPackages.getMap().size(); ip < N; ip++) { SparseArray<SparseArray<ProcessStats.PackageState>> uids = mStats.mPackages.getMap().valueAt(ip); for (int iu = 0; iu < uids.size(); iu++) { SparseArray<ProcessStats.PackageState> vpkgs = uids.valueAt(iu); for (int iv = 0; iv < vpkgs.size(); iv++) { ProcessStats.PackageState ps = vpkgs.valueAt(iv); for (int is = 0, NS = ps.mServices.size(); is < NS; is++) { ProcessStats.ServiceState ss = ps.mServices.valueAt(is); if (ss.mProcessName != null) { ProcStatsEntry ent = entriesMap.get(ss.mProcessName, uids.keyAt(iu)); if (ent != null) { if (DEBUG) Log.d( TAG, "Adding service " + ps.mPackageName + "/" + ss.mName + "/" + uids.keyAt(iu) + " to proc " + ss.mProcessName); ent.addService(ss); } else { Log.w( TAG, "No process " + ss.mProcessName + "/" + uids.keyAt(iu) + " for service " + ss.mName); } } } } } } return procEntries; }