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

Commit 3ecf7b2c authored by Xiaowen Lei's avatar Xiaowen Lei Committed by Android (Google) Code Review
Browse files

Merge "Log UiEvents useful for calculating dream overlay start latency." into tm-dev

parents 5a558f35 f564a5d7
Loading
Loading
Loading
Loading
+28 −1
Original line number Original line Diff line number Diff line
@@ -26,10 +26,13 @@ import android.view.WindowInsets;
import android.view.WindowManager;
import android.view.WindowManager;


import androidx.annotation.NonNull;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleRegistry;
import androidx.lifecycle.LifecycleRegistry;
import androidx.lifecycle.ViewModelStore;
import androidx.lifecycle.ViewModelStore;


import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.policy.PhoneWindow;
import com.android.internal.policy.PhoneWindow;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
@@ -61,6 +64,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
    private final DreamOverlayContainerViewController mDreamOverlayContainerViewController;
    private final DreamOverlayContainerViewController mDreamOverlayContainerViewController;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final DreamPreviewComplication mPreviewComplication;
    private final DreamPreviewComplication mPreviewComplication;
    private final UiEventLogger mUiEventLogger;


    // A reference to the {@link Window} used to hold the dream overlay.
    // A reference to the {@link Window} used to hold the dream overlay.
    private Window mWindow;
    private Window mWindow;
@@ -97,6 +101,25 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ


    private DreamOverlayStateController mStateController;
    private DreamOverlayStateController mStateController;


    @VisibleForTesting
    public enum DreamOverlayEvent implements UiEventLogger.UiEventEnum {
        @UiEvent(doc = "The dream overlay has entered start.")
        DREAM_OVERLAY_ENTER_START(989),
        @UiEvent(doc = "The dream overlay has completed start.")
        DREAM_OVERLAY_COMPLETE_START(990);

        private final int mId;

        DreamOverlayEvent(int id) {
            mId = id;
        }

        @Override
        public int getId() {
            return mId;
        }
    }

    @Inject
    @Inject
    public DreamOverlayService(
    public DreamOverlayService(
            Context context,
            Context context,
@@ -104,13 +127,15 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
            DreamOverlayComponent.Factory dreamOverlayComponentFactory,
            DreamOverlayComponent.Factory dreamOverlayComponentFactory,
            DreamOverlayStateController stateController,
            DreamOverlayStateController stateController,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            DreamPreviewComplication previewComplication) {
            DreamPreviewComplication previewComplication,
            UiEventLogger uiEventLogger) {
        mContext = context;
        mContext = context;
        mExecutor = executor;
        mExecutor = executor;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mKeyguardUpdateMonitor.registerCallback(mKeyguardCallback);
        mKeyguardUpdateMonitor.registerCallback(mKeyguardCallback);
        mStateController = stateController;
        mStateController = stateController;
        mPreviewComplication = previewComplication;
        mPreviewComplication = previewComplication;
        mUiEventLogger = uiEventLogger;


        final DreamOverlayComponent component =
        final DreamOverlayComponent component =
                dreamOverlayComponentFactory.create(mViewModelStore, mHost);
                dreamOverlayComponentFactory.create(mViewModelStore, mHost);
@@ -143,6 +168,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ


    @Override
    @Override
    public void onStartDream(@NonNull WindowManager.LayoutParams layoutParams) {
    public void onStartDream(@NonNull WindowManager.LayoutParams layoutParams) {
        mUiEventLogger.log(DreamOverlayEvent.DREAM_OVERLAY_ENTER_START);
        setCurrentState(Lifecycle.State.STARTED);
        setCurrentState(Lifecycle.State.STARTED);
        mExecutor.execute(() -> {
        mExecutor.execute(() -> {
            if (mDestroyed) {
            if (mDestroyed) {
@@ -159,6 +185,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
            addOverlayWindowLocked(layoutParams);
            addOverlayWindowLocked(layoutParams);
            setCurrentState(Lifecycle.State.RESUMED);
            setCurrentState(Lifecycle.State.RESUMED);
            mStateController.setOverlayActive(true);
            mStateController.setOverlayActive(true);
            mUiEventLogger.log(DreamOverlayEvent.DREAM_OVERLAY_COMPLETE_START);
        });
        });
    }
    }


+20 −1
Original line number Original line Diff line number Diff line
@@ -38,6 +38,7 @@ import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LifecycleRegistry;
import androidx.lifecycle.LifecycleRegistry;
import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;


import com.android.internal.logging.UiEventLogger;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dreams.complication.DreamPreviewComplication;
import com.android.systemui.dreams.complication.DreamPreviewComplication;
@@ -104,6 +105,9 @@ public class DreamOverlayServiceTest extends SysuiTestCase {
    @Mock
    @Mock
    ViewGroup mDreamOverlayContainerViewParent;
    ViewGroup mDreamOverlayContainerViewParent;


    @Mock
    UiEventLogger mUiEventLogger;

    DreamOverlayService mService;
    DreamOverlayService mService;


    @Before
    @Before
@@ -129,7 +133,22 @@ public class DreamOverlayServiceTest extends SysuiTestCase {
                mDreamOverlayComponentFactory,
                mDreamOverlayComponentFactory,
                mStateController,
                mStateController,
                mKeyguardUpdateMonitor,
                mKeyguardUpdateMonitor,
                mPreviewComplication);
                mPreviewComplication,
                mUiEventLogger);
    }

    @Test
    public void testOnStartMetricsLogged() throws Exception {
        final IBinder proxy = mService.onBind(new Intent());
        final IDreamOverlay overlay = IDreamOverlay.Stub.asInterface(proxy);

        // Inform the overlay service of dream starting.
        overlay.startDream(mWindowParams, mDreamOverlayCallback);
        mMainExecutor.runAllReady();

        verify(mUiEventLogger).log(DreamOverlayService.DreamOverlayEvent.DREAM_OVERLAY_ENTER_START);
        verify(mUiEventLogger).log(
                DreamOverlayService.DreamOverlayEvent.DREAM_OVERLAY_COMPLETE_START);
    }
    }


    @Test
    @Test