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

Commit 207a3108 authored by Michael Wachenschwanz's avatar Michael Wachenschwanz Committed by Android (Google) Code Review
Browse files

Merge "Remove BatteryStatsService.mStats lock dependancy from ActiveService"

parents 3104109f 65c5e70d
Loading
Loading
Loading
Loading
+32 −27
Original line number Diff line number Diff line
@@ -112,7 +112,6 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.procstats.ServiceState;
import com.android.internal.messages.nano.SystemMessageProto;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.os.BatteryStatsImpl;
import com.android.internal.os.TransferPipe;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FastPrintWriter;
@@ -1069,10 +1068,13 @@ public final class ActiveServices {
            stracker.setStarted(true, mAm.mProcessStats.getMemFactorLocked(), r.lastActivity);
        }
        r.callStart = false;
        FrameworkStatsLog.write(FrameworkStatsLog.SERVICE_STATE_CHANGED, r.appInfo.uid,
                r.name.getPackageName(), r.name.getClassName(),
                FrameworkStatsLog.SERVICE_STATE_CHANGED__STATE__START);
        mAm.mBatteryStatsService.noteServiceStartRunning(r.stats);

        final int uid = r.appInfo.uid;
        final String packageName = r.name.getPackageName();
        final String serviceName = r.name.getClassName();
        FrameworkStatsLog.write(FrameworkStatsLog.SERVICE_STATE_CHANGED, uid, packageName,
                serviceName, FrameworkStatsLog.SERVICE_STATE_CHANGED__STATE__START);
        mAm.mBatteryStatsService.noteServiceStartRunning(uid, packageName, serviceName);
        String error = bringUpServiceLocked(r, service.getFlags(), callerFg, false, false, false);
        if (error != null) {
            return new ComponentName("!!", error);
@@ -1108,10 +1110,13 @@ public final class ActiveServices {
            service.delayedStop = true;
            return;
        }
        FrameworkStatsLog.write(FrameworkStatsLog.SERVICE_STATE_CHANGED, service.appInfo.uid,
                service.name.getPackageName(), service.name.getClassName(),
                FrameworkStatsLog.SERVICE_STATE_CHANGED__STATE__STOP);
        mAm.mBatteryStatsService.noteServiceStopRunning(service.stats);

        final int uid = service.appInfo.uid;
        final String packageName = service.name.getPackageName();
        final String serviceName = service.name.getClassName();
        FrameworkStatsLog.write(FrameworkStatsLog.SERVICE_STATE_CHANGED, uid, packageName,
                serviceName, FrameworkStatsLog.SERVICE_STATE_CHANGED__STATE__STOP);
        mAm.mBatteryStatsService.noteServiceStopRunning(uid, packageName, serviceName);
        service.startRequested = false;
        if (service.tracker != null) {
            service.tracker.setStarted(false, mAm.mProcessStats.getMemFactorLocked(),
@@ -1267,10 +1272,12 @@ public final class ActiveServices {
                }
            }

            FrameworkStatsLog.write(FrameworkStatsLog.SERVICE_STATE_CHANGED, r.appInfo.uid,
                    r.name.getPackageName(), r.name.getClassName(),
                    FrameworkStatsLog.SERVICE_STATE_CHANGED__STATE__STOP);
            mAm.mBatteryStatsService.noteServiceStopRunning(r.stats);
            final int uid = r.appInfo.uid;
            final String packageName = r.name.getPackageName();
            final String serviceName = r.name.getClassName();
            FrameworkStatsLog.write(FrameworkStatsLog.SERVICE_STATE_CHANGED, uid, packageName,
                    serviceName, FrameworkStatsLog.SERVICE_STATE_CHANGED__STATE__STOP);
            mAm.mBatteryStatsService.noteServiceStopRunning(uid, packageName, serviceName);
            r.startRequested = false;
            if (r.tracker != null) {
                r.tracker.setStarted(false, mAm.mProcessStats.getMemFactorLocked(),
@@ -2876,15 +2883,7 @@ public final class ActiveServices {
                    final Intent.FilterComparison filter
                            = new Intent.FilterComparison(service.cloneFilter());
                    final ServiceRestarter res = new ServiceRestarter();
                    final BatteryStatsImpl.Uid.Pkg.Serv ss;
                    final BatteryStatsImpl stats = mAm.mBatteryStatsService.getActiveStatistics();
                    synchronized (stats) {
                        ss = stats.getServiceStatsLocked(
                                sInfo.applicationInfo.uid, name.getPackageName(),
                                name.getClassName(), SystemClock.elapsedRealtime(),
                                SystemClock.uptimeMillis());
                    }
                    r = new ServiceRecord(mAm, ss, className, name, definingPackageName,
                    r = new ServiceRecord(mAm, className, name, definingPackageName,
                            definingUid, filter, sInfo, callingFromFg, res);
                    r.mRecentCallingPackage = callingPackage;
                    res.setService(r);
@@ -3428,9 +3427,13 @@ public final class ActiveServices {
                EventLogTags.writeAmCreateService(
                        r.userId, System.identityHashCode(r), nameTerm, r.app.uid, r.app.pid);
            }
            FrameworkStatsLog.write(FrameworkStatsLog.SERVICE_LAUNCH_REPORTED, r.appInfo.uid,
                    r.name.getPackageName(), r.name.getClassName());
            mAm.mBatteryStatsService.noteServiceStartLaunch(r.stats);

            final int uid = r.appInfo.uid;
            final String packageName = r.name.getPackageName();
            final String serviceName = r.name.getClassName();
            FrameworkStatsLog.write(FrameworkStatsLog.SERVICE_LAUNCH_REPORTED, uid, packageName,
                    serviceName);
            mAm.mBatteryStatsService.noteServiceStartLaunch(uid, packageName, serviceName);
            mAm.notifyPackageUse(r.serviceInfo.packageName,
                                 PackageManager.NOTIFY_PACKAGE_USE_SERVICE);
            app.forceProcessStateUpTo(ActivityManager.PROCESS_STATE_SERVICE);
@@ -3777,7 +3780,8 @@ public final class ActiveServices {
        smap.mDelayedStartList.remove(r);

        if (r.app != null) {
            mAm.mBatteryStatsService.noteServiceStopLaunch(r.stats);
            mAm.mBatteryStatsService.noteServiceStopLaunch(r.appInfo.uid, r.name.getPackageName(),
                    r.name.getClassName());
            r.app.stopService(r);
            r.app.updateBoundClientUids();
            if (r.whitelistManager) {
@@ -4323,7 +4327,8 @@ public final class ActiveServices {
        // Clear app state from services.
        for (int i = app.numberOfRunningServices() - 1; i >= 0; i--) {
            ServiceRecord sr = app.getRunningServiceAt(i);
            mAm.mBatteryStatsService.noteServiceStopLaunch(sr.stats);
            mAm.mBatteryStatsService.noteServiceStopLaunch(sr.appInfo.uid, sr.name.getPackageName(),
                    sr.name.getClassName());
            if (sr.app != app && sr.app != null && !sr.app.isPersistent()) {
                sr.app.stopService(sr);
                sr.app.updateBoundClientUids();
+16 −4
Original line number Diff line number Diff line
@@ -2498,44 +2498,56 @@ public final class BatteryStatsService extends IBatteryStats.Stub
        }
    }

    void noteServiceStartRunning(final BatteryStatsImpl.Uid.Pkg.Serv stats) {
    void noteServiceStartRunning(int uid, String pkg, String name) {
        synchronized (mLock) {
            final long elapsedRealtime = SystemClock.elapsedRealtime();
            final long uptime = SystemClock.uptimeMillis();
            mHandler.post(() -> {
                synchronized (mStats) {
                    final BatteryStatsImpl.Uid.Pkg.Serv stats = mStats.getServiceStatsLocked(uid,
                            pkg, name, elapsedRealtime, uptime);
                    stats.startRunningLocked(uptime);
                }
            });
        }
    }

    void noteServiceStopRunning(final BatteryStatsImpl.Uid.Pkg.Serv stats) {
    void noteServiceStopRunning(int uid, String pkg, String name) {
        synchronized (mLock) {
            final long elapsedRealtime = SystemClock.elapsedRealtime();
            final long uptime = SystemClock.uptimeMillis();
            mHandler.post(() -> {
                synchronized (mStats) {
                    final BatteryStatsImpl.Uid.Pkg.Serv stats = mStats.getServiceStatsLocked(uid,
                            pkg, name, elapsedRealtime, uptime);
                    stats.stopRunningLocked(uptime);
                }
            });
        }
    }

    void noteServiceStartLaunch(final BatteryStatsImpl.Uid.Pkg.Serv stats) {
    void noteServiceStartLaunch(int uid, String pkg, String name) {
        synchronized (mLock) {
            final long elapsedRealtime = SystemClock.elapsedRealtime();
            final long uptime = SystemClock.uptimeMillis();
            mHandler.post(() -> {
                synchronized (mStats) {
                    final BatteryStatsImpl.Uid.Pkg.Serv stats = mStats.getServiceStatsLocked(uid,
                            pkg, name, elapsedRealtime, uptime);
                    stats.startLaunchedLocked(uptime);
                }
            });
        }
    }

    void noteServiceStopLaunch(final BatteryStatsImpl.Uid.Pkg.Serv stats) {
    void noteServiceStopLaunch(int uid, String pkg, String name) {
        synchronized (mLock) {
            final long elapsedRealtime = SystemClock.elapsedRealtime();
            final long uptime = SystemClock.uptimeMillis();
            mHandler.post(() -> {
                synchronized (mStats) {
                    final BatteryStatsImpl.Uid.Pkg.Serv stats = mStats.getServiceStatsLocked(uid,
                            pkg, name, elapsedRealtime, uptime);
                    stats.stopLaunchedLocked(uptime);
                }
            });
+1 −5
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ import android.util.proto.ProtoUtils;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.app.procstats.ServiceState;
import com.android.internal.os.BatteryStatsImpl;
import com.android.server.LocalServices;
import com.android.server.notification.NotificationManagerInternal;
import com.android.server.uri.NeededUriGrants;
@@ -70,7 +69,6 @@ final class ServiceRecord extends Binder implements ComponentName.WithComponentN
    static final int MAX_DONE_EXECUTING_COUNT = 6;

    final ActivityManagerService ams;
    final BatteryStatsImpl.Uid.Pkg.Serv stats;
    final ComponentName name; // service component.
    final ComponentName instanceName; // service component's per-instance name.
    final String shortInstanceName; // instanceName.flattenToShortString().
@@ -518,13 +516,11 @@ final class ServiceRecord extends Binder implements ComponentName.WithComponentN
        }
    }

    ServiceRecord(ActivityManagerService ams,
            BatteryStatsImpl.Uid.Pkg.Serv servStats, ComponentName name,
    ServiceRecord(ActivityManagerService ams, ComponentName name,
            ComponentName instanceName, String definingPackageName, int definingUid,
            Intent.FilterComparison intent, ServiceInfo sInfo, boolean callerIsFg,
            Runnable restarter) {
        this.ams = ams;
        this.stats = servStats;
        this.name = name;
        this.instanceName = instanceName;
        shortInstanceName = instanceName.flattenToShortString();
+3 −3
Original line number Diff line number Diff line
@@ -1655,7 +1655,7 @@ public class MockingOomAdjusterTests {
        sService.mConstants.KEEP_WARMING_SERVICES.clear();
        final ServiceInfo si = mock(ServiceInfo.class);
        si.applicationInfo = mock(ApplicationInfo.class);
        ServiceRecord s = spy(new ServiceRecord(sService, null, cn, cn, null, 0, null,
        ServiceRecord s = spy(new ServiceRecord(sService, cn, cn, null, 0, null,
                si, false, null));
        doReturn(new ArrayMap<IBinder, ArrayList<ConnectionRecord>>()).when(s).getConnections();
        s.startRequested = true;
@@ -1668,7 +1668,7 @@ public class MockingOomAdjusterTests {
        final ServiceInfo si2 = mock(ServiceInfo.class);
        si2.applicationInfo = mock(ApplicationInfo.class);
        si2.applicationInfo.uid = MOCKAPP2_UID_OTHER;
        ServiceRecord s2 = spy(new ServiceRecord(sService, null, cn2, cn2, null, 0, null,
        ServiceRecord s2 = spy(new ServiceRecord(sService, cn2, cn2, null, 0, null,
                si2, false, null));
        doReturn(new ArrayMap<IBinder, ArrayList<ConnectionRecord>>()).when(s2).getConnections();
        s2.startRequested = true;
@@ -1708,7 +1708,7 @@ public class MockingOomAdjusterTests {
        app.hasShownUi = true;
        sService.mConstants.KEEP_WARMING_SERVICES.add(cn);
        sService.mConstants.KEEP_WARMING_SERVICES.add(cn2);
        s = spy(new ServiceRecord(sService, null, cn, cn, null, 0, null,
        s = spy(new ServiceRecord(sService, cn, cn, null, 0, null,
                si, false, null));
        doReturn(new ArrayMap<IBinder, ArrayList<ConnectionRecord>>()).when(s).getConnections();
        s.startRequested = true;