From 49fa85a1c0947aa87f0863809387b8ac91c84890 Mon Sep 17 00:00:00 2001 From: Dmitri Plotnikov Date: Mon, 14 Aug 2023 17:31:12 -0700 Subject: Include the history tag string in checkin file verbatim This is done when the history tag pool overflows - otherwise the tag wouldn't be included in the output at all. Bug: 274242119 Test: PowerStatsTests:BatteryStatsHistoryTest Change-Id: I68cf65dd5285864bbf38115321da944d95c7438d --- core/java/android/os/BatteryStats.java | 28 +++++-- .../android/internal/os/BatteryStatsHistory.java | 3 +- .../internal/os/BatteryStatsHistoryIterator.java | 6 +- .../power/stats/BatteryStatsHistoryTest.java | 89 +++++++++++++++++++++- 4 files changed, 116 insertions(+), 10 deletions(-) diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 43219bc38e2d..42c56265bb4a 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -1656,6 +1656,8 @@ public abstract class BatteryStats { public abstract CpuScalingPolicies getCpuScalingPolicies(); public final static class HistoryTag { + public static final int HISTORY_TAG_POOL_OVERFLOW = -1; + public String string; public int uid; @@ -6826,10 +6828,11 @@ public abstract class BatteryStats { if (bd.mask == HistoryItem.STATE_WAKE_LOCK_FLAG && wakelockTag != null) { didWake = true; sb.append("="); - if (longNames) { + if (longNames + || wakelockTag.poolIdx == HistoryTag.HISTORY_TAG_POOL_OVERFLOW) { UserHandle.formatUid(sb, wakelockTag.uid); sb.append(":\""); - sb.append(wakelockTag.string); + sb.append(wakelockTag.string.replace("\"", "\"\"")); sb.append("\""); } else { sb.append(wakelockTag.poolIdx); @@ -6849,7 +6852,7 @@ public abstract class BatteryStats { } if (!didWake && wakelockTag != null) { sb.append(longNames ? " wake_lock=" : ",w="); - if (longNames) { + if (longNames || wakelockTag.poolIdx == HistoryTag.HISTORY_TAG_POOL_OVERFLOW) { UserHandle.formatUid(sb, wakelockTag.uid); sb.append(":\""); sb.append(wakelockTag.string); @@ -7110,7 +7113,14 @@ public abstract class BatteryStats { if (rec.wakeReasonTag != null) { if (checkin) { item.append(",wr="); - item.append(rec.wakeReasonTag.poolIdx); + if (rec.wakeReasonTag.poolIdx == HistoryTag.HISTORY_TAG_POOL_OVERFLOW) { + item.append(sUidToString.applyAsString(rec.wakeReasonTag.uid)); + item.append(":\""); + item.append(rec.wakeReasonTag.string.replace("\"", "\"\"")); + item.append("\""); + } else { + item.append(rec.wakeReasonTag.poolIdx); + } } else { item.append(" wake_reason="); item.append(rec.wakeReasonTag.uid); @@ -7138,7 +7148,15 @@ public abstract class BatteryStats { } item.append("="); if (checkin) { - item.append(rec.eventTag.poolIdx); + if (rec.eventTag.poolIdx == HistoryTag.HISTORY_TAG_POOL_OVERFLOW) { + item.append(HISTORY_EVENT_INT_FORMATTERS[idx] + .applyAsString(rec.eventTag.uid)); + item.append(":\""); + item.append(rec.eventTag.string.replace("\"", "\"\"")); + item.append("\""); + } else { + item.append(rec.eventTag.poolIdx); + } } else { item.append(HISTORY_EVENT_INT_FORMATTERS[idx] .applyAsString(rec.eventTag.uid)); diff --git a/core/java/com/android/internal/os/BatteryStatsHistory.java b/core/java/com/android/internal/os/BatteryStatsHistory.java index 0a938ef4d81c..79152b4b618f 100644 --- a/core/java/com/android/internal/os/BatteryStatsHistory.java +++ b/core/java/com/android/internal/os/BatteryStatsHistory.java @@ -185,7 +185,7 @@ public class BatteryStatsHistory { private boolean mHaveBatteryLevel; private boolean mRecordingHistory; - private static final int HISTORY_TAG_INDEX_LIMIT = 0x7ffe; + static final int HISTORY_TAG_INDEX_LIMIT = 0x7ffe; private static final int MAX_HISTORY_TAG_STRING_LENGTH = 1024; private final HashMap mHistoryTagPool = new HashMap<>(); @@ -1872,6 +1872,7 @@ public class BatteryStatsHistory { } return idx | BatteryStatsHistory.TAG_FIRST_OCCURRENCE_FLAG; } else { + tag.poolIdx = HistoryTag.HISTORY_TAG_POOL_OVERFLOW; // Tag pool overflow: include the tag itself in the parcel return HISTORY_TAG_INDEX_LIMIT | BatteryStatsHistory.TAG_FIRST_OCCURRENCE_FLAG; } diff --git a/core/java/com/android/internal/os/BatteryStatsHistoryIterator.java b/core/java/com/android/internal/os/BatteryStatsHistoryIterator.java index ccc3454624f8..4c2b2854df88 100644 --- a/core/java/com/android/internal/os/BatteryStatsHistoryIterator.java +++ b/core/java/com/android/internal/os/BatteryStatsHistoryIterator.java @@ -309,7 +309,11 @@ public class BatteryStatsHistoryIterator implements Iterator