Merge "Remove BatteryStatsService.mStats lock dependancy from ActiveService"
This commit is contained in:
committed by
Android (Google) Code Review
commit
207a3108ba
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user