summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kunal <malhk@google.com> 2023-09-05 20:12:15 +0000
committer Kunal Malhotra <malhk@google.com> 2023-09-26 23:02:32 +0000
commit9eb82ee33f4599472a01db943ad67d3fda95b123 (patch)
treecca833325ddc8ef7c8982c8398a8c66081487456
parent9fa75957e30acf8af762c6f52016bb171ef7cf22 (diff)
Closing retrieved list of stats in AppBatteryTracker
Bug: 286690406 Fixes: 286690406 Test: built and flashed to device Change-Id: Ibd3fca5f14c4858711a7ce3e2b0eab887592f6db
-rw-r--r--services/core/java/com/android/server/am/AppBatteryTracker.java28
1 files changed, 27 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/am/AppBatteryTracker.java b/services/core/java/com/android/server/am/AppBatteryTracker.java
index 128bbdf9de9b..907069de8c97 100644
--- a/services/core/java/com/android/server/am/AppBatteryTracker.java
+++ b/services/core/java/com/android/server/am/AppBatteryTracker.java
@@ -82,6 +82,7 @@ import com.android.server.am.AppRestrictionController.TrackerType;
import com.android.server.am.AppRestrictionController.UidBatteryUsageProvider;
import com.android.server.pm.UserManagerInternal;
+import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Constructor;
import java.util.Arrays;
@@ -571,8 +572,18 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
builder = new BatteryUsageStatsQuery.Builder()
.includeProcessStateData()
.aggregateSnapshots(lastUidBatteryUsageStartTs, curStart);
- updateBatteryUsageStatsOnceInternal(0, buf, builder, userIds, batteryStatsInternal);
+ final BatteryUsageStats statsCommit =
+ updateBatteryUsageStatsOnceInternal(0,
+ buf,
+ builder,
+ userIds,
+ batteryStatsInternal);
curDuration += curStart - lastUidBatteryUsageStartTs;
+ try {
+ statsCommit.close();
+ } catch (IOException e) {
+ Slog.w(TAG, "Failed to close a stat");
+ }
}
if (needUpdateUidBatteryUsageInWindow && curDuration >= windowSize) {
// If we do have long enough data for the window, save it.
@@ -648,8 +659,14 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
}
}
}
+ try {
+ stats.close();
+ } catch (IOException e) {
+ Slog.w(TAG, "Failed to close a stat");
+ }
}
+ // The BatteryUsageStats object MUST BE CLOSED when finished using
private BatteryUsageStats updateBatteryUsageStatsOnceInternal(long expectedDuration,
SparseArray<BatteryUsage> buf, BatteryUsageStatsQuery.Builder builder,
ArraySet<UserHandle> userIds, BatteryStatsInternal batteryStatsInternal) {
@@ -662,7 +679,16 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
// Shouldn't happen unless in test.
return null;
}
+ // We need the first stat in the list, so we should
+ // close out the others.
final BatteryUsageStats stats = statsList.get(0);
+ for (int i = 1; i < statsList.size(); i++) {
+ try {
+ statsList.get(i).close();
+ } catch (IOException e) {
+ Slog.w(TAG, "Failed to close a stat in BatteryUsageStats List");
+ }
+ }
final List<UidBatteryConsumer> uidConsumers = stats.getUidBatteryConsumers();
if (uidConsumers != null) {
final long start = stats.getStatsStartTimestamp();