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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user