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

Commit ac334303 authored by Jernej Virag's avatar Jernej Virag
Browse files

Trace dispatches for Lifecycle code

Bug: 313630049
Flag: NONE
Test: recorded perfetto trace
Change-Id: I0ad8d8954cc03534daf727bf7b6aa282442566cb
parent fa7ecaef
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -18,6 +18,10 @@ package com.android.systemui.keyguard;

import androidx.annotation.NonNull;

import com.android.app.tracing.TraceUtils;

import kotlin.Unit;

import java.util.ArrayList;
import java.util.Objects;
import java.util.function.BiConsumer;
@@ -28,7 +32,7 @@ import java.util.function.Consumer;
 */
public class Lifecycle<T> {

    private ArrayList<T> mObservers = new ArrayList<>();
    private final ArrayList<T> mObservers = new ArrayList<>();

    public void addObserver(@NonNull T observer) {
        mObservers.add(Objects.requireNonNull(observer));
@@ -40,7 +44,11 @@ public class Lifecycle<T> {

    public void dispatch(Consumer<T> consumer) {
        for (int i = 0; i < mObservers.size(); i++) {
            consumer.accept(mObservers.get(i));
            final T observer = mObservers.get(i);
            TraceUtils.trace(() -> "dispatch#" + consumer.toString(), () -> {
                consumer.accept(observer);
                return Unit.INSTANCE;
            });
        }
    }

@@ -49,7 +57,11 @@ public class Lifecycle<T> {
     */
    public <U> void dispatch(BiConsumer<T, U> biConsumer, U arg) {
        for (int i = 0; i < mObservers.size(); i++) {
            biConsumer.accept(mObservers.get(i), arg);
            final T observer = mObservers.get(i);
            TraceUtils.trace(() -> "dispatch#" + biConsumer.toString(), () -> {
                biConsumer.accept(observer, arg);
                return Unit.INSTANCE;
            });
        }
    }
}
+4 −7
Original line number Diff line number Diff line
@@ -16,8 +16,7 @@

package com.android.systemui.keyguard;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static com.google.common.truth.Truth.assertThat;

import android.testing.AndroidTestingRunner;

@@ -52,8 +51,7 @@ public class LifecycleTest extends SysuiTestCase {
        mLifecycle.addObserver(mObj1);

        mLifecycle.dispatch(mDispatchedObjects::add);

        assertTrue(mDispatchedObjects.contains(mObj1));
        assertThat(mDispatchedObjects).contains(mObj1);
    }

    @Test
@@ -63,7 +61,7 @@ public class LifecycleTest extends SysuiTestCase {

        mLifecycle.dispatch(mDispatchedObjects::add);

        assertFalse(mDispatchedObjects.contains(mObj1));
        assertThat(mDispatchedObjects).isEmpty();
    }

    @Test
@@ -73,8 +71,7 @@ public class LifecycleTest extends SysuiTestCase {

        mLifecycle.dispatch(mDispatchedObjects::add);

        assertTrue(mDispatchedObjects.contains(mObj1));
        assertTrue(mDispatchedObjects.contains(mObj2));
        assertThat(mDispatchedObjects).containsExactly(mObj1, mObj2);
    }

}
 No newline at end of file