Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b2794e3d authored by Jing Ji's avatar Jing Ji Committed by Android (Google) Code Review
Browse files

Merge "Lock ProcessRecord.baseProcessTracker with proper locks"

parents a980aec7 09ef2727
Loading
Loading
Loading
Loading
+33 −18
Original line number Diff line number Diff line
@@ -4609,10 +4609,12 @@ public class ActivityManagerService extends IActivityManager.Stub
                    proc.lastMemInfoTime = SystemClock.uptimeMillis();
                    if (proc.thread != null && proc.setAdj == oomAdj) {
                        // Record this for posterity if the process has been stable.
                        synchronized (mProcessStats.mLock) {
                            proc.baseProcessTracker.addPss(infos[i].getTotalPss(),
                                    infos[i].getTotalUss(), infos[i].getTotalRss(), false,
                                    ProcessStats.ADD_PSS_EXTERNAL_SLOW, endTime - startTime,
                                    proc.pkgList.mPkgList);
                        }
                        for (int ipkg = proc.pkgList.size() - 1; ipkg >= 0; ipkg--) {
                            ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg);
                            FrameworkStatsLog.write(FrameworkStatsLog.PROCESS_MEMORY_STAT_REPORTED,
@@ -4669,8 +4671,11 @@ public class ActivityManagerService extends IActivityManager.Stub
                synchronized (this) {
                    if (proc.thread != null && proc.setAdj == oomAdj) {
                        // Record this for posterity if the process has been stable.
                        synchronized (mProcessStats.mLock) {
                            proc.baseProcessTracker.addPss(pss[i], tmpUss[0], tmpUss[2], false,
                                ProcessStats.ADD_PSS_EXTERNAL, endTime-startTime, proc.pkgList.mPkgList);
                                    ProcessStats.ADD_PSS_EXTERNAL, endTime - startTime,
                                    proc.pkgList.mPkgList);
                        }
                        for (int ipkg = proc.pkgList.size() - 1; ipkg >= 0; ipkg--) {
                            ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg);
                            FrameworkStatsLog.write(FrameworkStatsLog.PROCESS_MEMORY_STAT_REPORTED,
@@ -12107,8 +12112,10 @@ public class ActivityManagerService extends IActivityManager.Stub
                synchronized (this) {
                    if (r.thread != null && oomAdj == r.getSetAdjWithServices()) {
                        // Record this for posterity if the process has been stable.
                        synchronized (mProcessStats.mLock) {
                            r.baseProcessTracker.addPss(myTotalPss, myTotalUss, myTotalRss, true,
                                    reportType, endTime - startTime, r.pkgList.mPkgList);
                        }
                        for (int ipkg = r.pkgList.size() - 1; ipkg >= 0; ipkg--) {
                            ProcessStats.ProcessStateHolder holder = r.pkgList.valueAt(ipkg);
                            FrameworkStatsLog.write(FrameworkStatsLog.PROCESS_MEMORY_STAT_REPORTED,
@@ -12713,8 +12720,10 @@ public class ActivityManagerService extends IActivityManager.Stub
            synchronized (this) {
                if (r.thread != null && oomAdj == r.getSetAdjWithServices()) {
                    // Record this for posterity if the process has been stable.
                    synchronized (mProcessStats.mLock) {
                        r.baseProcessTracker.addPss(myTotalPss, myTotalUss, myTotalRss, true,
                                reportType, endTime - startTime, r.pkgList.mPkgList);
                    }
                    for (int ipkg = r.pkgList.size() - 1; ipkg >= 0; ipkg--) {
                        ProcessStats.ProcessStateHolder holder = r.pkgList.valueAt(ipkg);
                        FrameworkStatsLog.write(FrameworkStatsLog.PROCESS_MEMORY_STAT_REPORTED,
@@ -15927,8 +15936,10 @@ public class ActivityManagerService extends IActivityManager.Stub
        EventLogTags.writeAmPss(proc.pid, proc.uid, proc.processName, pss * 1024, uss * 1024,
                swapPss * 1024, rss * 1024, statType, procState, pssDuration);
        proc.lastPssTime = now;
        synchronized (mProcessStats.mLock) {
            proc.baseProcessTracker.addPss(
                    pss, uss, rss, true, statType, pssDuration, proc.pkgList.mPkgList);
        }
        for (int ipkg = proc.pkgList.mPkgList.size() - 1; ipkg >= 0; ipkg--) {
            ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg);
            FrameworkStatsLog.write(FrameworkStatsLog.PROCESS_MEMORY_STAT_REPORTED,
@@ -16289,7 +16300,9 @@ public class ActivityManagerService extends IActivityManager.Stub
                                ApplicationExitInfo.REASON_EXCESSIVE_RESOURCE_USAGE,
                                ApplicationExitInfo.SUBREASON_EXCESSIVE_CPU,
                                true);
                        synchronized (mProcessStats.mLock) {
                            app.baseProcessTracker.reportExcessiveCpu(app.pkgList.mPkgList);
                        }
                        for (int ipkg = app.pkgList.size() - 1; ipkg >= 0; ipkg--) {
                            ProcessStats.ProcessStateHolder holder = app.pkgList.valueAt(ipkg);
                            FrameworkStatsLog.write(FrameworkStatsLog.EXCESSIVE_CPU_USAGE_REPORTED,
@@ -16401,6 +16414,7 @@ public class ActivityManagerService extends IActivityManager.Stub
    }
    final void setProcessTrackerStateLocked(ProcessRecord proc, int memFactor, long now) {
        synchronized (mProcessStats.mLock) {
            if (proc.thread != null && proc.baseProcessTracker != null) {
                final int procState = proc.getReportedProcState();
                if (procState != PROCESS_STATE_NONEXISTENT) {
@@ -16409,6 +16423,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                }
            }
        }
    }
    @GuardedBy("this")
    final void updateProcessForegroundLocked(ProcessRecord proc, boolean isForeground,
+6 −5
Original line number Diff line number Diff line
@@ -1079,8 +1079,8 @@ class ProcessRecord implements WindowProcessListener {
     */
    public void resetPackageList(ProcessStatsService tracker) {
        final int N = pkgList.size();
        if (baseProcessTracker != null) {
        synchronized (tracker.mLock) {
            if (baseProcessTracker != null) {
                long now = SystemClock.uptimeMillis();
                baseProcessTracker.setState(ProcessStats.STATE_NOTHING,
                        tracker.getMemFactorLocked(), now, pkgList.mPkgList);
@@ -1108,10 +1108,11 @@ class ProcessRecord implements WindowProcessListener {
                        holder.state.makeActive();
                    }
                }
            }
            } else if (N != 1) {
                pkgList.clear();
            pkgList.put(info.packageName, new ProcessStats.ProcessStateHolder(info.longVersionCode));
                pkgList.put(info.packageName,
                        new ProcessStats.ProcessStateHolder(info.longVersionCode));
            }
        }
    }