Merge "Defer UID data removal until after reading is finished"
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user