From e47669b08c5a21d4c710bdee61ed3ec78757244f Mon Sep 17 00:00:00 2001 From: Kunal Malhotra Date: Thu, 27 Apr 2023 22:50:16 +0000 Subject: Updating logging for possible edge cases of incorrectly updated arrays Test: manual testing on phone Bug: 278153526 Change-Id: Ie0b10dc3f52d9e5a4dadafc05ce374fd4b79d095 --- .../server/am/ForegroundServiceTypeLoggerModule.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/am/ForegroundServiceTypeLoggerModule.java b/services/core/java/com/android/server/am/ForegroundServiceTypeLoggerModule.java index 8f84b08ff6a6..79d3e968c07e 100644 --- a/services/core/java/com/android/server/am/ForegroundServiceTypeLoggerModule.java +++ b/services/core/java/com/android/server/am/ForegroundServiceTypeLoggerModule.java @@ -33,7 +33,7 @@ import android.app.ForegroundServiceDelegationOptions; import android.content.ComponentName; import android.content.pm.ServiceInfo; import android.util.ArrayMap; -import android.util.Log; +import android.util.Slog; import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; @@ -191,13 +191,20 @@ public class ForegroundServiceTypeLoggerModule { final ArrayList apiTypes = convertFgsTypeToApiTypes(record.foregroundServiceType); final UidState uidState = mUids.get(uid); if (uidState == null) { - Log.e(TAG, "FGS stop call being logged with no start call for UID " + uid); + Slog.wtfStack(TAG, "FGS stop call being logged with no start call for UID for UID " + + uid + + " in package " + record.packageName); return; } final ArrayList apisFound = new ArrayList<>(); final ArrayList timestampsFound = new ArrayList<>(); for (int i = 0, size = apiTypes.size(); i < size; i++) { - int apiType = apiTypes.get(i); + final int apiType = apiTypes.get(i); + if (!uidState.mOpenWithFgsCount.contains(apiType)) { + Slog.wtfStack(TAG, "Logger should be tracking FGS types correctly for UID " + uid + + " in package " + record.packageName); + continue; + } // retrieve the eligible closed call // we only want to log if this is the only // open in flight call. If there are other calls, @@ -214,7 +221,8 @@ public class ForegroundServiceTypeLoggerModule { final ArrayMap runningFgsOfType = uidState.mRunningFgs.get(apiType); if (runningFgsOfType == null) { - Log.w(TAG, "Could not find appropriate running FGS for FGS stop"); + Slog.w(TAG, "Could not find appropriate running FGS for FGS stop for UID " + uid + + " in package " + record.packageName); continue; } @@ -321,7 +329,7 @@ public class ForegroundServiceTypeLoggerModule { // it's not related to any FGS UidState uidState = mUids.get(uid); if (uidState == null) { - Log.w(TAG, "API event end called before start!"); + Slog.w(TAG, "API event end called before start!"); return -1; } if (uidState.mOpenWithFgsCount.contains(apiType)) { -- cgit v1.2.3-59-g8ed1b