From 229b07808ff7d5a3d16628922ea5c315ed79681b Mon Sep 17 00:00:00 2001 From: Jeff DeCew Date: Fri, 6 May 2022 15:21:42 +0000 Subject: [PATCH 1/2] Improve dumps/logs to diagnose mis-ordered group children Fixes: 204817567 Test: dumpsysui NotifLog ShadeListBuilder NotifCollection Change-Id: I4d7f0497451572a7660607cb83b4e08c39b04db7 --- .../statusbar/notification/collection/ListDumper.java | 6 ++++++ .../notification/collection/listbuilder/NotifSection.kt | 9 +++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java index 6be8a491eeadd..e98ae8db41221 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java @@ -121,6 +121,12 @@ public class ListDumper { sb.append(" (parent=") .append(entry.getParent() != null ? entry.getParent().getKey() : null) .append(")"); + + NotificationEntry notifEntry = entry.getRepresentativeEntry(); + if (notifEntry != null) { + sb.append(" rank=") + .append(notifEntry.getRanking().getRank()); + } } if (entry.getSection() != null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/NotifSection.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/NotifSection.kt index 263737e20a133..ea66f3b6dd429 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/NotifSection.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/NotifSection.kt @@ -25,12 +25,9 @@ data class NotifSection( val sectioner: NotifSectioner, val index: Int ) { - val label: String - get() = "Section($index, $bucket, \"${sectioner.name}\")" - + @PriorityBucket + val bucket: Int = sectioner.bucket + val label: String = "$index:$bucket:${sectioner.name}" val headerController: NodeController? = sectioner.headerNodeController - val comparator: NotifComparator? = sectioner.comparator - - @PriorityBucket val bucket: Int = sectioner.bucket } From f5b65590bff75cd739739ec68847294cb01ab6c3 Mon Sep 17 00:00:00 2001 From: Jeff DeCew Date: Sat, 7 May 2022 15:29:57 +0000 Subject: [PATCH 2/2] Improve logging in NotifCollection for when ending the LifetimeExtender fails or might fail. Bug: 227254780 Test: atest NotifCollectionTest Change-Id: Id9f50e84831a6f8cb2fa3ce6b8d1d200aebc9a06 --- .../collection/NotifCollection.java | 17 +++++++++++++---- .../notifcollection/NotifCollectionLogger.kt | 14 ++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java index 6085096ee124e..410593ac54934 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java @@ -609,12 +609,21 @@ public class NotifCollection implements Dumpable { } checkForReentrantCall(); + NotificationEntry collectionEntry = getEntry(entry.getKey()); + String logKey = logKey(entry); + String collectionEntryIs = collectionEntry == null ? "null" + : entry == collectionEntry ? "same" : "different"; + + if (entry != collectionEntry) { + // TODO: We should probably make this throw, but that's too risky right now + mLogger.logEntryBeingExtendedNotInCollection(entry, extender, collectionEntryIs); + } + if (!entry.mLifetimeExtenders.remove(extender)) { throw mEulogizer.record(new IllegalStateException( - String.format( - "Cannot end lifetime extension for extender \"%s\" (%s)", - extender.getName(), - extender))); + String.format("Cannot end lifetime extension for extender \"%s\"" + + " of entry %s (collection entry is %s)", + extender.getName(), logKey, collectionEntryIs))); } mLogger.logLifetimeExtensionEnded( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt index 7e7936717b84e..ac0b1ee6c442a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt @@ -248,6 +248,20 @@ class NotifCollectionLogger @Inject constructor( }) } + fun logEntryBeingExtendedNotInCollection( + entry: NotificationEntry, + extender: NotifLifetimeExtender, + collectionEntryIs: String + ) { + buffer.log(TAG, WARNING, { + str1 = entry.logKey + str2 = extender.name + str3 = collectionEntryIs + }, { + "While ending lifetime extension by $str2 of $str1, entry in collection is $str3" + }) + } + fun logFutureDismissalReused(dismissal: FutureDismissal) { buffer.log(TAG, INFO, { str1 = dismissal.label