diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java index 68d35f9679ed1..824d3a3f5af14 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java @@ -34,6 +34,8 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.statusbar.dagger.CentralSurfacesModule; import com.android.systemui.statusbar.notification.collection.NotifCollection; +import com.android.systemui.statusbar.notification.collection.PipelineDumpable; +import com.android.systemui.statusbar.notification.collection.PipelineDumper; import com.android.systemui.statusbar.phone.CentralSurfaces; import com.android.systemui.statusbar.phone.NotificationListenerWithPlugins; import com.android.systemui.util.time.SystemClock; @@ -52,7 +54,8 @@ import javax.inject.Inject; */ @SysUISingleton @SuppressLint("OverrideAbstract") -public class NotificationListener extends NotificationListenerWithPlugins { +public class NotificationListener extends NotificationListenerWithPlugins implements + PipelineDumpable { private static final String TAG = "NotificationListener"; private static final boolean DEBUG = CentralSurfaces.DEBUG; private static final long MAX_RANKING_DELAY_MILLIS = 500L; @@ -255,6 +258,11 @@ public class NotificationListener extends NotificationListenerWithPlugins { } } + @Override + public void dumpPipeline(@NonNull PipelineDumper d) { + d.dump("notificationHandlers", mNotificationHandlers); + } + private static Ranking getRankingOrTemporaryStandIn(RankingMap rankingMap, String key) { Ranking ranking = new Ranking(); if (!rankingMap.getRanking(key, ranking)) { 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 351a4bea2947d..68bf69a3ea9dd 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 @@ -142,7 +142,7 @@ import javax.inject.Inject; */ @MainThread @SysUISingleton -public class NotifCollection implements Dumpable { +public class NotifCollection implements Dumpable, PipelineDumpable { private final IStatusBarService mStatusBarService; private final SystemClock mClock; private final NotifPipelineFlags mNotifPipelineFlags; @@ -870,6 +870,14 @@ public class NotifCollection implements Dumpable { } } + @Override + public void dumpPipeline(@NonNull PipelineDumper d) { + d.dump("notifCollectionListeners", mNotifCollectionListeners); + d.dump("lifetimeExtenders", mLifetimeExtenders); + d.dump("dismissInterceptors", mDismissInterceptors); + d.dump("buildListener", mBuildListener); + } + private final BatchableNotificationHandler mNotifHandler = new BatchableNotificationHandler() { @Override public void onNotificationPosted(StatusBarNotification sbn, RankingMap rankingMap) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumpable.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumpable.kt new file mode 100644 index 0000000000000..a1aec3f382bfa --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumpable.kt @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.notification.collection + +interface PipelineDumpable { + fun dumpPipeline(d: PipelineDumper) +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumper.kt new file mode 100644 index 0000000000000..a10c745230151 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumper.kt @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.notification.collection + +import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable +import com.android.systemui.statusbar.notification.collection.notifcollection.NotifDismissInterceptor +import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender +import com.android.systemui.util.asIndenting +import com.android.systemui.util.withIncreasedIndent +import java.io.PrintWriter + +class PipelineDumper(pw: PrintWriter) { + private val ipw = pw.asIndenting() + + fun print(a: Any?) = ipw.print(a) + fun println(a: Any?) = ipw.println(a) + fun withIncreasedIndent(b: () -> Unit) = ipw.withIncreasedIndent(b) + fun withIncreasedIndent(r: Runnable) = ipw.withIncreasedIndent(r) + + fun dump(label: String, value: Any?) { + ipw.print("$label: ") + dump(value) + } + + private fun dump(value: Any?) = when (value) { + null, is String, is Int -> println(value) + is Collection<*> -> dumpCollection(value) + else -> { + println(value.fullPipelineName) + withIncreasedIndent { (value as? PipelineDumpable)?.dumpPipeline(this) } + } + } + + private fun dumpCollection(values: Collection) { + println(values.size) + withIncreasedIndent { values.forEach { dump(it) } } + } +} + +private val Any.bareClassName: String get() { + val className = javaClass.name + val packageName = javaClass.`package`.name + return className.substring(packageName.length + 1) +} + +private val Any.barePipelineName: String? get() = when (this) { + is NotifLifetimeExtender -> name + is NotifDismissInterceptor -> name + is Pluggable<*> -> name + else -> null +} + +private val Any.fullPipelineName: String get() = + barePipelineName?.let { "\"$it\" ($bareClassName)" } ?: bareClassName diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java index 075a0dc7555e5..420f21db2c73a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java @@ -87,7 +87,7 @@ import javax.inject.Inject; */ @MainThread @SysUISingleton -public class ShadeListBuilder implements Dumpable { +public class ShadeListBuilder implements Dumpable, PipelineDumpable { private final SystemClock mSystemClock; private final ShadeListBuilderLogger mLogger; private final NotificationInteractionTracker mInteractionTracker; @@ -1396,6 +1396,21 @@ public class ShadeListBuilder implements Dumpable { "\t\t")); } + @Override + public void dumpPipeline(@NonNull PipelineDumper d) { + d.dump("choreographer", mChoreographer); + d.dump("notifPreGroupFilters", mNotifPreGroupFilters); + d.dump("onBeforeTransformGroupsListeners", mOnBeforeTransformGroupsListeners); + d.dump("notifPromoters", mNotifPromoters); + d.dump("onBeforeSortListeners", mOnBeforeSortListeners); + d.dump("notifSections", mNotifSections); + d.dump("notifComparators", mNotifComparators); + d.dump("onBeforeFinalizeFilterListeners", mOnBeforeFinalizeFilterListeners); + d.dump("notifFinalizeFilters", mNotifFinalizeFilters); + d.dump("onBeforeRenderListListeners", mOnBeforeRenderListListeners); + d.dump("onRenderListListener", mOnRenderListListener); + } + /** See {@link #setOnRenderListListener(OnRenderListListener)} */ public interface OnRenderListListener { /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java index 050b4c1132311..98f2167ebfa69 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java @@ -32,6 +32,8 @@ import com.android.systemui.Dumpable; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.statusbar.NotificationListener; import com.android.systemui.statusbar.NotificationListener.NotificationHandler; +import com.android.systemui.statusbar.notification.collection.PipelineDumpable; +import com.android.systemui.statusbar.notification.collection.PipelineDumper; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.time.SystemClock; @@ -63,7 +65,7 @@ import javax.inject.Inject; * passed along to the NotifCollection. */ @MainThread -public class GroupCoalescer implements Dumpable { +public class GroupCoalescer implements Dumpable, PipelineDumpable { private final DelayableExecutor mMainExecutor; private final SystemClock mClock; private final GroupCoalescerLogger mLogger; @@ -314,6 +316,11 @@ public class GroupCoalescer implements Dumpable { } } + @Override + public void dumpPipeline(@NonNull PipelineDumper d) { + d.dump("handler", mHandler); + } + private final Comparator mEventComparator = (o1, o2) -> { int cmp = Boolean.compare( o2.getSbn().getNotification().isGroupSummary(), diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/NotifCoordinators.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/NotifCoordinators.kt index 891e25ef6c25f..1399385e7654b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/NotifCoordinators.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/NotifCoordinators.kt @@ -15,24 +15,22 @@ */ package com.android.systemui.statusbar.notification.collection.coordinator -import com.android.systemui.Dumpable -import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.notification.NotifPipelineFlags import com.android.systemui.statusbar.notification.collection.NotifPipeline +import com.android.systemui.statusbar.notification.collection.PipelineDumpable +import com.android.systemui.statusbar.notification.collection.PipelineDumper import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner -import java.io.PrintWriter import javax.inject.Inject /** * Handles the attachment of [Coordinator]s to the [NotifPipeline] so that the * Coordinators can register their respective callbacks. */ -interface NotifCoordinators : Coordinator, Dumpable +interface NotifCoordinators : Coordinator, PipelineDumpable @CoordinatorScope class NotifCoordinatorsImpl @Inject constructor( - dumpManager: DumpManager, notifPipelineFlags: NotifPipelineFlags, dataStoreCoordinator: DataStoreCoordinator, hideLocallyDismissedNotifsCoordinator: HideLocallyDismissedNotifsCoordinator, @@ -66,8 +64,6 @@ class NotifCoordinatorsImpl @Inject constructor( * Creates all the coordinators. */ init { - dumpManager.registerDumpable(TAG, this) - // TODO(b/208866714): formalize the system by which some coordinators may be required by the // pipeline, such as this DataStoreCoordinator which cannot be removed, as it's a critical // glue between the pipeline and parts of SystemUI which depend on pipeline output via the @@ -121,15 +117,12 @@ class NotifCoordinatorsImpl @Inject constructor( pipeline.setSections(mOrderedSections) } - override fun dump(pw: PrintWriter, args: Array) { - pw.println() - pw.println("$TAG:") - for (c in mCoordinators) { - pw.println("\t${c.javaClass}") - } - for (s in mOrderedSections) { - pw.println("\t${s.name}") - } + /* + * As part of the NotifPipeline dumpable, dumps the list of coordinators; sections are omitted + * as they are dumped in the RenderStageManager instead. + */ + override fun dumpPipeline(d: PipelineDumper) = with(d) { + dump("coordinators", mCoordinators) } companion object { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/init/NotifPipelineInitializer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/init/NotifPipelineInitializer.java index 24ef5808b2e31..a34d033afcaaa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/init/NotifPipelineInitializer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/init/NotifPipelineInitializer.java @@ -18,6 +18,8 @@ package com.android.systemui.statusbar.notification.collection.init; import android.util.Log; +import androidx.annotation.NonNull; + import com.android.systemui.Dumpable; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; @@ -25,12 +27,15 @@ import com.android.systemui.statusbar.NotificationListener; import com.android.systemui.statusbar.notification.collection.NotifCollection; import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl; import com.android.systemui.statusbar.notification.collection.NotifPipeline; +import com.android.systemui.statusbar.notification.collection.PipelineDumpable; +import com.android.systemui.statusbar.notification.collection.PipelineDumper; import com.android.systemui.statusbar.notification.collection.ShadeListBuilder; import com.android.systemui.statusbar.notification.collection.coalescer.GroupCoalescer; import com.android.systemui.statusbar.notification.collection.coordinator.NotifCoordinators; import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl; import com.android.systemui.statusbar.notification.collection.render.NotifStackController; import com.android.systemui.statusbar.notification.collection.render.RenderStageManager; +import com.android.systemui.statusbar.notification.collection.render.ShadeViewManager; import com.android.systemui.statusbar.notification.collection.render.ShadeViewManagerFactory; import com.android.systemui.statusbar.notification.stack.NotificationListContainer; @@ -42,7 +47,7 @@ import javax.inject.Inject; * Initialization code for the new notification pipeline. */ @SysUISingleton -public class NotifPipelineInitializer implements Dumpable { +public class NotifPipelineInitializer implements Dumpable, PipelineDumpable { private final NotifPipeline mPipelineWrapper; private final GroupCoalescer mGroupCoalescer; private final NotifCollection mNotifCollection; @@ -53,6 +58,9 @@ public class NotifPipelineInitializer implements Dumpable { private final DumpManager mDumpManager; private final ShadeViewManagerFactory mShadeViewManagerFactory; + /* These are saved just for dumping. */ + private ShadeViewManager mShadeViewManager; + private NotificationListener mNotificationService; @Inject public NotifPipelineInitializer( @@ -83,9 +91,10 @@ public class NotifPipelineInitializer implements Dumpable { NotificationRowBinderImpl rowBinder, NotificationListContainer listContainer, NotifStackController stackController) { - mDumpManager.registerDumpable("NotifPipeline", this); + mNotificationService = notificationService; + // Setup inflation mNotifInflater.setRowBinder(rowBinder); @@ -93,13 +102,12 @@ public class NotifPipelineInitializer implements Dumpable { mNotifPluggableCoordinators.attach(mPipelineWrapper); // Wire up pipeline - mShadeViewManagerFactory - .create(listContainer, stackController) - .attach(mRenderStageManager); + mShadeViewManager = mShadeViewManagerFactory.create(listContainer, stackController); + mShadeViewManager.attach(mRenderStageManager); mRenderStageManager.attach(mListBuilder); mListBuilder.attach(mNotifCollection); mNotifCollection.attach(mGroupCoalescer); - mGroupCoalescer.attach(notificationService); + mGroupCoalescer.attach(mNotificationService); Log.d(TAG, "Notif pipeline initialized." + " rendering=" + true); @@ -107,8 +115,37 @@ public class NotifPipelineInitializer implements Dumpable { @Override public void dump(PrintWriter pw, String[] args) { - mNotifPluggableCoordinators.dump(pw, args); - mGroupCoalescer.dump(pw, args); + dumpPipeline(new PipelineDumper(pw)); + } + + @Override + public void dumpPipeline(@NonNull PipelineDumper d) { + d.println("STAGE 0: SETUP"); + d.dump("notifPluggableCoordinators", mNotifPluggableCoordinators); + d.println(""); + + d.println("STAGE 1: LISTEN"); + d.dump("notificationService", mNotificationService); + d.println(""); + + d.println("STAGE 2: BATCH EVENTS"); + d.dump("groupCoalescer", mGroupCoalescer); + d.println(""); + + d.println("STAGE 3: COLLECT"); + d.dump("notifCollection", mNotifCollection); + d.println(""); + + d.println("STAGE 4: BUILD LIST"); + d.dump("listBuilder", mListBuilder); + d.println(""); + + d.println("STAGE 5: DISPATCH RENDER"); + d.dump("renderStageManager", mRenderStageManager); + d.println(""); + + d.println("STAGE 6: UPDATE SHADE"); + d.dump("shadeViewManager", mShadeViewManager); } private static final String TAG = "NotifPipeline"; 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 ea66f3b6dd429..9765e8f1e4fac 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 @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.notification.collection.listbuilder +import com.android.systemui.statusbar.notification.collection.PipelineDumpable +import com.android.systemui.statusbar.notification.collection.PipelineDumper import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifComparator import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner import com.android.systemui.statusbar.notification.collection.render.NodeController @@ -24,10 +26,18 @@ import com.android.systemui.statusbar.notification.stack.PriorityBucket data class NotifSection( val sectioner: NotifSectioner, val index: Int -) { +) : PipelineDumpable { @PriorityBucket val bucket: Int = sectioner.bucket val label: String = "$index:$bucket:${sectioner.name}" val headerController: NodeController? = sectioner.headerNodeController val comparator: NotifComparator? = sectioner.comparator + + override fun dumpPipeline(d: PipelineDumper) = with(d) { + dump("index", index) + dump("bucket", bucket) + dump("sectioner", sectioner) + dump("headerController", headerController) + dump("comparator", comparator) + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt index a9c3987261386..7a37846ac97bc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt @@ -20,6 +20,8 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.statusbar.notification.collection.GroupEntry import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.collection.NotificationEntry +import com.android.systemui.statusbar.notification.collection.PipelineDumpable +import com.android.systemui.statusbar.notification.collection.PipelineDumper import com.android.systemui.statusbar.notification.collection.ShadeListBuilder import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderEntryListener import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderGroupListener @@ -33,7 +35,7 @@ import javax.inject.Inject * provided to [setViewRenderer]. */ @SysUISingleton -class RenderStageManager @Inject constructor() { +class RenderStageManager @Inject constructor() : PipelineDumpable { private val onAfterRenderListListeners = mutableListOf() private val onAfterRenderGroupListeners = mutableListOf() private val onAfterRenderEntryListeners = mutableListOf() @@ -75,6 +77,13 @@ class RenderStageManager @Inject constructor() { onAfterRenderEntryListeners.add(listener) } + override fun dumpPipeline(d: PipelineDumper) = with(d) { + dump("ViewRenderer", viewRenderer) + dump("OnAfterRenderListListeners", onAfterRenderListListeners) + dump("OnAfterRenderGroupListeners", onAfterRenderGroupListeners) + dump("OnAfterRenderEntryListeners", onAfterRenderEntryListeners) + } + private fun dispatchOnAfterRenderList( viewRenderer: NotifViewRenderer, entries: List @@ -139,4 +148,4 @@ class RenderStageManager @Inject constructor() { } } } -} \ No newline at end of file +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RootNodeController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RootNodeController.kt index b76169f111dbb..2073e92cd45b2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RootNodeController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RootNodeController.kt @@ -17,6 +17,8 @@ package com.android.systemui.statusbar.notification.collection.render import android.view.View +import com.android.systemui.statusbar.notification.collection.PipelineDumpable +import com.android.systemui.statusbar.notification.collection.PipelineDumper import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableView import com.android.systemui.statusbar.notification.stack.NotificationListContainer @@ -28,7 +30,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationListContain class RootNodeController( private val listContainer: NotificationListContainer, override val view: View -) : NodeController { +) : NodeController, PipelineDumpable { override val nodeLabel: String = "" override fun getChildAt(index: Int): View? { @@ -59,4 +61,8 @@ class RootNodeController( listContainer.setChildTransferInProgress(false) } } + + override fun dumpPipeline(d: PipelineDumper) = with(d) { + dump("listContainer", listContainer) + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt index 51dc72848d9e9..df8e87fa413b6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt @@ -22,6 +22,8 @@ import com.android.systemui.statusbar.notification.NotificationSectionsFeatureMa import com.android.systemui.statusbar.notification.collection.GroupEntry import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.collection.NotificationEntry +import com.android.systemui.statusbar.notification.collection.PipelineDumpable +import com.android.systemui.statusbar.notification.collection.PipelineDumper import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider import com.android.systemui.statusbar.notification.stack.NotificationListContainer import com.android.systemui.util.traceSection @@ -43,12 +45,12 @@ class ShadeViewManager @AssistedInject constructor( nodeSpecBuilderLogger: NodeSpecBuilderLogger, shadeViewDifferLogger: ShadeViewDifferLogger, private val viewBarn: NotifViewBarn -) { +) : PipelineDumpable { // We pass a shim view here because the listContainer may not actually have a view associated // with it and the differ never actually cares about the root node's view. private val rootController = RootNodeController(listContainer, View(context)) private val specBuilder = NodeSpecBuilder(mediaContainerController, featureManager, - sectionHeaderVisibilityProvider, viewBarn, nodeSpecBuilderLogger) + sectionHeaderVisibilityProvider, viewBarn, nodeSpecBuilderLogger) private val viewDiffer = ShadeViewDiffer(rootController, shadeViewDifferLogger) /** Method for attaching this manager to the pipeline. */ @@ -56,6 +58,12 @@ class ShadeViewManager @AssistedInject constructor( renderStageManager.setViewRenderer(viewRenderer) } + override fun dumpPipeline(d: PipelineDumper) = with(d) { + dump("rootController", rootController) + dump("specBuilder", specBuilder) + dump("viewDiffer", viewDiffer) + } + private val viewRenderer = object : NotifViewRenderer { override fun onRenderList(notifList: List) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java index e5835a836d391..cc539b01b8940 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java @@ -86,6 +86,8 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.collection.NotifCollection; import com.android.systemui.statusbar.notification.collection.NotifPipeline; import com.android.systemui.statusbar.notification.collection.NotificationEntry; +import com.android.systemui.statusbar.notification.collection.PipelineDumpable; +import com.android.systemui.statusbar.notification.collection.PipelineDumper; import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy; import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy.OnGroupChangeListener; import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager; @@ -1560,7 +1562,8 @@ public class NotificationStackScrollLayoutController { } } - private class NotificationListContainerImpl implements NotificationListContainer { + private class NotificationListContainerImpl implements NotificationListContainer, + PipelineDumpable { @Override public void setChildTransferInProgress(boolean childTransferInProgress) { @@ -1706,6 +1709,12 @@ public class NotificationStackScrollLayoutController { public void setWillExpand(boolean willExpand) { mView.setWillExpand(willExpand); } + + @Override + public void dumpPipeline(@NonNull PipelineDumper d) { + d.dump("NotificationStackScrollLayoutController.this", + NotificationStackScrollLayoutController.this); + } } class TouchHandler implements Gefingerpoken {