Merge "Defer UID data removal until after reading is finished"

This commit is contained in:
Treehugger Robot
2021-02-23 23:08:31 +00:00
committed by Gerrit Code Review

View File

@@ -11879,16 +11879,17 @@ public class BatteryStatsImpl extends BatteryStats {
final int numClusters = mPowerProfile.getNumCpuClusters(); final int numClusters = mPowerProfile.getNumCpuClusters();
mWakeLockAllocationsUs = null; mWakeLockAllocationsUs = null;
final long startTimeMs = mClocks.uptimeMillis(); final long startTimeMs = mClocks.uptimeMillis();
final List<Integer> uidsToRemove = new ArrayList<>();
mCpuUidFreqTimeReader.readDelta((uid, cpuFreqTimeMs) -> { mCpuUidFreqTimeReader.readDelta((uid, cpuFreqTimeMs) -> {
uid = mapUid(uid); uid = mapUid(uid);
if (Process.isIsolated(uid)) { if (Process.isIsolated(uid)) {
mCpuUidFreqTimeReader.removeUid(uid); uidsToRemove.add(uid);
Slog.d(TAG, "Got freq readings for an isolated uid with no mapping: " + uid); Slog.d(TAG, "Got freq readings for an isolated uid with no mapping: " + uid);
return; return;
} }
if (!mUserInfoProvider.exists(UserHandle.getUserId(uid))) { if (!mUserInfoProvider.exists(UserHandle.getUserId(uid))) {
Slog.d(TAG, "Got freq readings for an invalid user's uid " + uid); Slog.d(TAG, "Got freq readings for an invalid user's uid " + uid);
mCpuUidFreqTimeReader.removeUid(uid); uidsToRemove.add(uid);
return; return;
} }
final Uid u = getUidStatsLocked(uid); final Uid u = getUidStatsLocked(uid);
@@ -11947,6 +11948,9 @@ public class BatteryStatsImpl extends BatteryStats {
} }
} }
}); });
for (int uid : uidsToRemove) {
mCpuUidFreqTimeReader.removeUid(uid);
}
final long elapsedTimeMs = mClocks.uptimeMillis() - startTimeMs; final long elapsedTimeMs = mClocks.uptimeMillis() - startTimeMs;
if (DEBUG_ENERGY_CPU || elapsedTimeMs >= 100) { if (DEBUG_ENERGY_CPU || elapsedTimeMs >= 100) {
@@ -11992,21 +11996,25 @@ public class BatteryStatsImpl extends BatteryStats {
@VisibleForTesting @VisibleForTesting
public void readKernelUidCpuActiveTimesLocked(boolean onBattery) { public void readKernelUidCpuActiveTimesLocked(boolean onBattery) {
final long startTimeMs = mClocks.uptimeMillis(); final long startTimeMs = mClocks.uptimeMillis();
final List<Integer> uidsToRemove = new ArrayList<>();
mCpuUidActiveTimeReader.readDelta((uid, cpuActiveTimesMs) -> { mCpuUidActiveTimeReader.readDelta((uid, cpuActiveTimesMs) -> {
uid = mapUid(uid); uid = mapUid(uid);
if (Process.isIsolated(uid)) { if (Process.isIsolated(uid)) {
mCpuUidActiveTimeReader.removeUid(uid); uidsToRemove.add(uid);
Slog.w(TAG, "Got active times for an isolated uid with no mapping: " + uid); Slog.w(TAG, "Got active times for an isolated uid with no mapping: " + uid);
return; return;
} }
if (!mUserInfoProvider.exists(UserHandle.getUserId(uid))) { if (!mUserInfoProvider.exists(UserHandle.getUserId(uid))) {
Slog.w(TAG, "Got active times for an invalid user's uid " + uid); Slog.w(TAG, "Got active times for an invalid user's uid " + uid);
mCpuUidActiveTimeReader.removeUid(uid); uidsToRemove.add(uid);
return; return;
} }
final Uid u = getUidStatsLocked(uid); final Uid u = getUidStatsLocked(uid);
u.mCpuActiveTimeMs.addCountLocked(cpuActiveTimesMs, onBattery); u.mCpuActiveTimeMs.addCountLocked(cpuActiveTimesMs, onBattery);
}); });
for (int uid : uidsToRemove) {
mCpuUidActiveTimeReader.removeUid(uid);
}
final long elapsedTimeMs = mClocks.uptimeMillis() - startTimeMs; final long elapsedTimeMs = mClocks.uptimeMillis() - startTimeMs;
if (DEBUG_ENERGY_CPU || elapsedTimeMs >= 100) { if (DEBUG_ENERGY_CPU || elapsedTimeMs >= 100) {
@@ -12021,21 +12029,25 @@ public class BatteryStatsImpl extends BatteryStats {
@VisibleForTesting @VisibleForTesting
public void readKernelUidCpuClusterTimesLocked(boolean onBattery) { public void readKernelUidCpuClusterTimesLocked(boolean onBattery) {
final long startTimeMs = mClocks.uptimeMillis(); final long startTimeMs = mClocks.uptimeMillis();
final List<Integer> uidsToRemove = new ArrayList<>();
mCpuUidClusterTimeReader.readDelta((uid, cpuClusterTimesMs) -> { mCpuUidClusterTimeReader.readDelta((uid, cpuClusterTimesMs) -> {
uid = mapUid(uid); uid = mapUid(uid);
if (Process.isIsolated(uid)) { if (Process.isIsolated(uid)) {
mCpuUidClusterTimeReader.removeUid(uid); uidsToRemove.add(uid);
Slog.w(TAG, "Got cluster times for an isolated uid with no mapping: " + uid); Slog.w(TAG, "Got cluster times for an isolated uid with no mapping: " + uid);
return; return;
} }
if (!mUserInfoProvider.exists(UserHandle.getUserId(uid))) { if (!mUserInfoProvider.exists(UserHandle.getUserId(uid))) {
Slog.w(TAG, "Got cluster times for an invalid user's uid " + uid); Slog.w(TAG, "Got cluster times for an invalid user's uid " + uid);
mCpuUidClusterTimeReader.removeUid(uid); uidsToRemove.add(uid);
return; return;
} }
final Uid u = getUidStatsLocked(uid); final Uid u = getUidStatsLocked(uid);
u.mCpuClusterTimesMs.addCountLocked(cpuClusterTimesMs, onBattery); u.mCpuClusterTimesMs.addCountLocked(cpuClusterTimesMs, onBattery);
}); });
for (int uid : uidsToRemove) {
mCpuUidClusterTimeReader.removeUid(uid);
}
final long elapsedTimeMs = mClocks.uptimeMillis() - startTimeMs; final long elapsedTimeMs = mClocks.uptimeMillis() - startTimeMs;
if (DEBUG_ENERGY_CPU || elapsedTimeMs >= 100) { if (DEBUG_ENERGY_CPU || elapsedTimeMs >= 100) {