Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7ae3d2b1 authored by Ibrahim Yilmaz's avatar Ibrahim Yilmaz
Browse files

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
parent 310e2056
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -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();