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

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

Merge "Use a different lock for the ProcessStatsService"

parents 8bb5d401 bee7f641
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -1962,7 +1962,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                        nativeTotalPss += Debug.getPss(stats.get(j).pid, null, null);
                    }
                    memInfo.readMemInfo();
                    synchronized (ActivityManagerService.this) {
                    synchronized (mProcessStats.mLock) {
                        if (DEBUG_PSS) Slog.d(TAG_PSS, "Collected native and kernel memory in "
                                + (SystemClock.uptimeMillis()-start) + "ms");
                        final long cachedKb = memInfo.getCachedSizeKb();
@@ -7054,9 +7054,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            mUsageStatsService.prepareShutdown();
        }
        mBatteryStatsService.shutdown();
        synchronized (this) {
            mProcessStats.shutdownLocked();
        }
        mProcessStats.shutdown();
        return timedout;
    }
@@ -12358,7 +12356,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            MemInfoReader memInfo = new MemInfoReader();
            memInfo.readMemInfo();
            if (nativeProcTotalPss > 0) {
                synchronized (this) {
                synchronized (mProcessStats.mLock) {
                    final long cachedKb = memInfo.getCachedSizeKb();
                    final long freeKb = memInfo.getFreeSizeKb();
                    final long zramKb = memInfo.getZramTotalSizeKb();
@@ -12940,7 +12938,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            MemInfoReader memInfo = new MemInfoReader();
            memInfo.readMemInfo();
            if (nativeProcTotalPss > 0) {
                synchronized (this) {
                synchronized (mProcessStats.mLock) {
                    final long cachedKb = memInfo.getCachedSizeKb();
                    final long freeKb = memInfo.getFreeSizeKb();
                    final long zramKb = memInfo.getZramTotalSizeKb();
@@ -16511,9 +16509,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        }
        @Override public void run() {
            synchronized (mService) {
                mProcessStats.writeStateAsyncLocked();
            }
            mProcessStats.writeStateAsync();
        }
    }
@@ -16563,9 +16559,13 @@ public class ActivityManagerService extends IActivityManager.Stub
        }
        mLastMemoryLevel = memFactor;
        mLastNumProcesses = mProcessList.getLruSizeLocked();
        boolean allChanged = mProcessStats.setMemFactorLocked(
        boolean allChanged;
        int trackerMemFactor;
        synchronized (mProcessStats.mLock) {
            allChanged = mProcessStats.setMemFactorLocked(
                    memFactor, mAtmInternal != null ? !mAtmInternal.isSleeping() : true, now);
        final int trackerMemFactor = mProcessStats.getMemFactorLocked();
            trackerMemFactor = mProcessStats.getMemFactorLocked();
        }
        if (memFactor != ProcessStats.ADJ_MEM_FACTOR_NORMAL) {
            if (mLowRamStartTime == 0) {
                mLowRamStartTime = now;
+8 −6
Original line number Diff line number Diff line
@@ -659,6 +659,7 @@ public final class OomAdjuster {

        updateUidsLocked(activeUids, nowElapsed);

        synchronized (mService.mProcessStats.mLock) {
            if (mService.mProcessStats.shouldWriteNowLocked(now)) {
                mService.mHandler.post(new ActivityManagerService.ProcStatsRunnable(mService,
                        mService.mProcessStats));
@@ -666,6 +667,7 @@ public final class OomAdjuster {

            // Run this after making sure all procstates are updated.
            mService.mProcessStats.updateTrackingAssociationsLocked(mAdjSeq, now);
        }

        if (DEBUG_OOM_ADJ) {
            final long duration = SystemClock.uptimeMillis() - now;
+84 −74
Original line number Diff line number Diff line
@@ -673,10 +673,12 @@ class ProcessRecord implements WindowProcessListener {

    public void makeActive(IApplicationThread _thread, ProcessStatsService tracker) {
        if (thread == null) {
            synchronized (tracker.mLock) {
                final ProcessState origBase = baseProcessTracker;
                if (origBase != null) {
                    origBase.setState(ProcessStats.STATE_NOTHING,
                        tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList.mPkgList);
                            tracker.getMemFactorLocked(), SystemClock.uptimeMillis(),
                            pkgList.mPkgList);
                    for (int ipkg = pkgList.size() - 1; ipkg >= 0; ipkg--) {
                        FrameworkStatsLog.write(FrameworkStatsLog.PROCESS_STATE_CHANGED,
                                uid, processName, pkgList.keyAt(ipkg),
@@ -688,7 +690,7 @@ class ProcessRecord implements WindowProcessListener {
                baseProcessTracker = tracker.getProcessStateLocked(info.packageName, info.uid,
                        info.longVersionCode, processName);
                baseProcessTracker.makeActive();
            for (int i=0; i<pkgList.size(); i++) {
                for (int i = 0, ipkg = pkgList.size(); i < ipkg; i++) {
                    ProcessStats.ProcessStateHolder holder = pkgList.valueAt(i);
                    if (holder.state != null && holder.state != origBase) {
                        holder.state.makeInactive();
@@ -700,6 +702,7 @@ class ProcessRecord implements WindowProcessListener {
                    }
                }
            }
        }
        thread = _thread;
        mWindowProcessController.setThread(thread);
    }
@@ -707,11 +710,13 @@ class ProcessRecord implements WindowProcessListener {
    public void makeInactive(ProcessStatsService tracker) {
        thread = null;
        mWindowProcessController.setThread(null);
        synchronized (tracker.mLock) {
            final ProcessState origBase = baseProcessTracker;
            if (origBase != null) {
                if (origBase != null) {
                    origBase.setState(ProcessStats.STATE_NOTHING,
                        tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList.mPkgList);
                            tracker.getMemFactorLocked(), SystemClock.uptimeMillis(),
                            pkgList.mPkgList);
                    for (int ipkg = pkgList.size() - 1; ipkg >= 0; ipkg--) {
                        FrameworkStatsLog.write(FrameworkStatsLog.PROCESS_STATE_CHANGED,
                                uid, processName, pkgList.keyAt(ipkg),
@@ -721,7 +726,7 @@ class ProcessRecord implements WindowProcessListener {
                    origBase.makeInactive();
                }
                baseProcessTracker = null;
            for (int i=0; i<pkgList.size(); i++) {
                for (int i = 0, ipkg = pkgList.size(); i < ipkg; i++) {
                    ProcessStats.ProcessStateHolder holder = pkgList.valueAt(i);
                    if (holder.state != null && holder.state != origBase) {
                        holder.state.makeInactive();
@@ -731,6 +736,7 @@ class ProcessRecord implements WindowProcessListener {
                }
            }
        }
    }

    /**
     * Records a service as running in the process. Note that this method does not actually start
@@ -1026,6 +1032,7 @@ class ProcessRecord implements WindowProcessListener {
     */
    public boolean addPackage(String pkg, long versionCode, ProcessStatsService tracker) {
        if (!pkgList.containsKey(pkg)) {
            synchronized (tracker.mLock) {
                ProcessStats.ProcessStateHolder holder = new ProcessStats.ProcessStateHolder(
                        versionCode);
                if (baseProcessTracker != null) {
@@ -1038,6 +1045,7 @@ class ProcessRecord implements WindowProcessListener {
                } else {
                    pkgList.put(pkg, holder);
                }
            }
            return true;
        }
        return false;
@@ -1072,6 +1080,7 @@ class ProcessRecord implements WindowProcessListener {
    public void resetPackageList(ProcessStatsService tracker) {
        final int N = pkgList.size();
        if (baseProcessTracker != null) {
            synchronized (tracker.mLock) {
                long now = SystemClock.uptimeMillis();
                baseProcessTracker.setState(ProcessStats.STATE_NOTHING,
                        tracker.getMemFactorLocked(), now, pkgList.mPkgList);
@@ -1099,6 +1108,7 @@ class ProcessRecord implements WindowProcessListener {
                        holder.state.makeActive();
                    }
                }
            }
        } else if (N != 1) {
            pkgList.clear();
            pkgList.put(info.packageName, new ProcessStats.ProcessStateHolder(info.longVersionCode));
+184 −103

File changed.

Preview size limit exceeded, changes collapsed.

+5 −3
Original line number Diff line number Diff line
@@ -528,8 +528,9 @@ final class ServiceRecord extends Binder implements ComponentName.WithComponentN
            return tracker;
        }
        if ((serviceInfo.applicationInfo.flags&ApplicationInfo.FLAG_PERSISTENT) == 0) {
            tracker = ams.mProcessStats.getServiceStateLocked(serviceInfo.packageName,
                    serviceInfo.applicationInfo.uid, serviceInfo.applicationInfo.longVersionCode,
            tracker = ams.mProcessStats.getServiceState(serviceInfo.packageName,
                    serviceInfo.applicationInfo.uid,
                    serviceInfo.applicationInfo.longVersionCode,
                    serviceInfo.processName, serviceInfo.name);
            tracker.applyNewOwner(this);
        }
@@ -546,7 +547,8 @@ final class ServiceRecord extends Binder implements ComponentName.WithComponentN
    public void makeRestarting(int memFactor, long now) {
        if (restartTracker == null) {
            if ((serviceInfo.applicationInfo.flags&ApplicationInfo.FLAG_PERSISTENT) == 0) {
                restartTracker = ams.mProcessStats.getServiceStateLocked(serviceInfo.packageName,
                restartTracker = ams.mProcessStats.getServiceState(
                        serviceInfo.packageName,
                        serviceInfo.applicationInfo.uid,
                        serviceInfo.applicationInfo.longVersionCode,
                        serviceInfo.processName, serviceInfo.name);
Loading