Cache NotifCollection for next pipeline run

NotifCollection may change during pipeline run. This change will help us cover NotifCollection changes during pipeline run.

Basically we cache incoming entries into pending entries and we only schedule non re-entrant build when there is ongoing pipeline run on NotifCollection change.

Bug: 272046092
Test: atest ShadeListBuilderTest
Change-Id: I6c9bf228e5f2657a0b0fa7fd85487b871c8902f8
This commit is contained in:
Ibrahim Yilmaz
2023-03-16 16:55:58 +00:00
parent 310e20565b
commit 7ae3d2b12a

View File

@@ -110,6 +110,8 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
private final PipelineState mPipelineState = new PipelineState();
private final Map<String, GroupEntry> mGroups = new ArrayMap<>();
private Collection<NotificationEntry> mAllEntries = Collections.emptyList();
@Nullable
private Collection<NotificationEntry> mPendingEntries = null;
private int mIterationCount = 0;
private final List<NotifFilter> mNotifPreGroupFilters = new ArrayList<>();
@@ -317,11 +319,9 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
@Override
public void onBuildList(Collection<NotificationEntry> entries, String reason) {
Assert.isMainThread();
mPipelineState.requireIsBefore(STATE_BUILD_STARTED);
mPendingEntries = new ArrayList<>(entries);
mLogger.logOnBuildList(reason);
mAllEntries = entries;
scheduleRebuild(/* reentrant = */ false);
rebuildListIfBefore(STATE_BUILD_STARTED);
}
};
@@ -398,6 +398,11 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
Trace.beginSection("ShadeListBuilder.buildList");
mPipelineState.requireIsBefore(STATE_BUILD_STARTED);
if (mPendingEntries != null) {
mAllEntries = mPendingEntries;
mPendingEntries = null;
}
if (!mNotifStabilityManager.isPipelineRunAllowed()) {
mLogger.logPipelineRunSuppressed();
Trace.endSection();