From ef94fc2fc36e19af784c620168fa4a95055f0ba6 Mon Sep 17 00:00:00 2001 From: Julia Tuttle Date: Mon, 6 Jun 2022 14:02:43 -0400 Subject: [PATCH] New Pipeline: log structure in dumpsys For debugging reference purposes, log the full structure of the pipeline as constructed in dumpsys. Test: manual Change-Id: I774c444deae8a215921a80946d1d82cf2ad128bf --- .../statusbar/NotificationListener.java | 10 +++- .../collection/NotifCollection.java | 10 +++- .../collection/PipelineDumpable.kt | 21 ++++++++ .../notification/collection/PipelineDumper.kt | 51 ++++++++++++++++++ .../collection/ShadeListBuilder.java | 17 +++++- .../collection/coalescer/GroupCoalescer.java | 9 +++- .../coordinator/NotifCoordinators.kt | 25 ++++----- .../init/NotifPipelineInitializer.java | 53 ++++++++++++++++--- .../collection/listbuilder/NotifSection.kt | 12 ++++- .../collection/render/RenderStageManager.kt | 13 ++++- .../collection/render/RootNodeController.kt | 8 ++- .../collection/render/ShadeViewManager.kt | 12 ++++- ...tificationStackScrollLayoutController.java | 11 +++- 13 files changed, 217 insertions(+), 35 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumpable.kt create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumper.kt 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 410593ac54934..2b78b40cdbddb 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 @@ -137,7 +137,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; @@ -841,6 +841,14 @@ public class NotifCollection implements Dumpable { "\t\t")); } + @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..eca3ebf921bee --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumper.kt @@ -0,0 +1,51 @@ +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 println(a: Any?) = ipw.println(a) + + fun dump(label: String, value: Any?) { + ipw.print("$label: ") + dump(value) + } + + private fun dump(value: Any?) = when (value) { + null, is String, is Int -> ipw.println(value) + is Collection<*> -> dumpCollection(value) + else -> { + ipw.println(value.fullPipelineName) + (value as? PipelineDumpable)?.let { + ipw.withIncreasedIndent { it.dumpPipeline(this) } + } + } + } + + private fun dumpCollection(values: Collection) { + ipw.println(values.size) + ipw.withIncreasedIndent { values.forEach { dump(it) } } + } +} + +private val Any.bareClassName: String get() { + val className = javaClass.name + val packagePrefixLength = javaClass.`package`?.name?.length?.plus(1) ?: 0 + return className.substring(packagePrefixLength) +} + +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 2a8a67281c2c9..083759c1d7572 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; @@ -1397,6 +1397,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 359e2028d9f3f..f9b864473a09f 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 @@ -127,15 +123,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 70b11569f50be..d1ab62cbd1de0 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; @@ -26,12 +28,15 @@ import com.android.systemui.statusbar.notification.NotifPipelineFlags; 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; @@ -43,7 +48,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; @@ -55,6 +60,9 @@ public class NotifPipelineInitializer implements Dumpable { private final ShadeViewManagerFactory mShadeViewManagerFactory; private final NotifPipelineFlags mNotifPipelineFlags; + /* These are saved just for dumping. */ + private ShadeViewManager mShadeViewManager; + private NotificationListener mNotificationService; @Inject public NotifPipelineInitializer( @@ -87,9 +95,10 @@ public class NotifPipelineInitializer implements Dumpable { NotificationRowBinderImpl rowBinder, NotificationListContainer listContainer, NotifStackController stackController) { - mDumpManager.registerDumpable("NotifPipeline", this); + mNotificationService = notificationService; + // Setup inflation if (mNotifPipelineFlags.isNewPipelineEnabled()) { mNotifInflater.setRowBinder(rowBinder); @@ -100,14 +109,13 @@ public class NotifPipelineInitializer implements Dumpable { // Wire up pipeline if (mNotifPipelineFlags.isNewPipelineEnabled()) { - 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=" + mNotifPipelineFlags.isNewPipelineEnabled()); @@ -115,8 +123,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..3061522e87dd0 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 2493ccbe5a484..2282f6bb1f6c5 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 @@ -91,6 +91,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; @@ -1610,7 +1612,8 @@ public class NotificationStackScrollLayoutController { } } - private class NotificationListContainerImpl implements NotificationListContainer { + private class NotificationListContainerImpl implements NotificationListContainer, + PipelineDumpable { @Override public void setChildTransferInProgress(boolean childTransferInProgress) { @@ -1756,6 +1759,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 {