From 09970f41014254baa544933020b5faaa55a4f48d Mon Sep 17 00:00:00 2001 From: Heemin Seog Date: Mon, 27 Apr 2020 22:01:05 -0700 Subject: [PATCH] Lazy load BiometricUnlockController This one also includes other big dependencies like StatusBar, NotificationShadeWindowController, ShadeController, and more. Bug: 147455109 Test: manual (with timing from SystemUIOverlayWindowManager) Change-Id: I7d8f1a92e66860ea278c062af873665b1b8e47b0 --- .../car/keyguard/CarKeyguardViewController.java | 16 ++++++++++------ .../car/window/SystemUIOverlayWindowManager.java | 10 +++++++++- .../keyguard/CarKeyguardViewControllerTest.java | 14 ++++++++------ 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java index 6a0a31bbeef9f..6d659f1925939 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java @@ -51,6 +51,8 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import javax.inject.Inject; import javax.inject.Singleton; +import dagger.Lazy; + /** * Automotive implementation of the {@link KeyguardViewController}. It controls the Keyguard View * that is mounted to the SystemUIOverlayWindow. @@ -66,9 +68,10 @@ public class CarKeyguardViewController extends OverlayViewController implements private final CarServiceProvider mCarServiceProvider; private final KeyguardStateController mKeyguardStateController; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; + private final Lazy mBiometricUnlockControllerLazy; private final LockPatternUtils mLockPatternUtils; private final FalsingManager mFalsingManager; - private final KeyguardBypassController mKeyguardBypassController; + private final Lazy mKeyguardBypassControllerLazy; private final DismissCallbackRegistry mDismissCallbackRegistry; private final ViewMediatorCallback mViewMediatorCallback; private final CarNavigationBarController mCarNavigationBarController; @@ -109,14 +112,14 @@ public class CarKeyguardViewController extends OverlayViewController implements OverlayViewGlobalStateController overlayViewGlobalStateController, KeyguardStateController keyguardStateController, KeyguardUpdateMonitor keyguardUpdateMonitor, - BiometricUnlockController biometricUnlockController, + Lazy biometricUnlockControllerLazy, ViewMediatorCallback viewMediatorCallback, CarNavigationBarController carNavigationBarController, /* The params below are only used to reuse KeyguardBouncer */ LockPatternUtils lockPatternUtils, DismissCallbackRegistry dismissCallbackRegistry, FalsingManager falsingManager, - KeyguardBypassController keyguardBypassController) { + Lazy keyguardBypassControllerLazy) { super(R.id.keyguard_stub, overlayViewGlobalStateController); @@ -125,14 +128,14 @@ public class CarKeyguardViewController extends OverlayViewController implements mCarServiceProvider = carServiceProvider; mKeyguardStateController = keyguardStateController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; + mBiometricUnlockControllerLazy = biometricUnlockControllerLazy; mLockPatternUtils = lockPatternUtils; mFalsingManager = falsingManager; - mKeyguardBypassController = keyguardBypassController; + mKeyguardBypassControllerLazy = keyguardBypassControllerLazy; mDismissCallbackRegistry = dismissCallbackRegistry; mViewMediatorCallback = viewMediatorCallback; mCarNavigationBarController = carNavigationBarController; - biometricUnlockController.setKeyguardViewController(this); registerUserSwitchedListener(); } @@ -142,7 +145,8 @@ public class CarKeyguardViewController extends OverlayViewController implements mViewMediatorCallback, mLockPatternUtils, getLayout().findViewById(R.id.keyguard_container), mDismissCallbackRegistry, mExpansionCallback, mKeyguardStateController, mFalsingManager, - mKeyguardBypassController); + mKeyguardBypassControllerLazy.get()); + mBiometricUnlockControllerLazy.get().setKeyguardViewController(this); } @Override diff --git a/packages/CarSystemUI/src/com/android/systemui/car/window/SystemUIOverlayWindowManager.java b/packages/CarSystemUI/src/com/android/systemui/car/window/SystemUIOverlayWindowManager.java index 3f88422ba2e5f..8cca0ed308b2d 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/SystemUIOverlayWindowManager.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/SystemUIOverlayWindowManager.java @@ -17,6 +17,7 @@ package com.android.systemui.car.window; import android.content.Context; +import android.util.Log; import com.android.systemui.R; import com.android.systemui.SystemUI; @@ -35,7 +36,7 @@ import javax.inject.Singleton; */ @Singleton public class SystemUIOverlayWindowManager extends SystemUI { - private static final String TAG = "SystemUIOverlayWindowManager"; + private static final String TAG = "SystemUIOverlayWM"; private final Map, Provider> mContentMediatorCreators; private final OverlayViewGlobalStateController mOverlayViewGlobalStateController; @@ -59,6 +60,7 @@ public class SystemUIOverlayWindowManager extends SystemUI { private void startServices(String[] services) { for (String clsName : services) { + long ti = System.currentTimeMillis(); try { OverlayViewMediator obj = resolveContentMediator(clsName); if (obj == null) { @@ -73,6 +75,12 @@ public class SystemUIOverlayWindowManager extends SystemUI { | InvocationTargetException ex) { throw new RuntimeException(ex); } + + // Warn if initialization of component takes too long + ti = System.currentTimeMillis() - ti; + if (ti > 200) { + Log.w(TAG, "Initialization of " + clsName + " took " + ti + " ms"); + } } } diff --git a/packages/CarSystemUI/tests/src/com/android/systemui/car/keyguard/CarKeyguardViewControllerTest.java b/packages/CarSystemUI/tests/src/com/android/systemui/car/keyguard/CarKeyguardViewControllerTest.java index d40b1af67ca64..a2192af147587 100644 --- a/packages/CarSystemUI/tests/src/com/android/systemui/car/keyguard/CarKeyguardViewControllerTest.java +++ b/packages/CarSystemUI/tests/src/com/android/systemui/car/keyguard/CarKeyguardViewControllerTest.java @@ -54,6 +54,8 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import dagger.Lazy; + @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper public class CarKeyguardViewControllerTest extends SysuiTestCase { @@ -88,13 +90,13 @@ public class CarKeyguardViewControllerTest extends SysuiTestCase { mOverlayViewGlobalStateController, mock(KeyguardStateController.class), mock(KeyguardUpdateMonitor.class), - mock(BiometricUnlockController.class), + () -> mock(BiometricUnlockController.class), mock(ViewMediatorCallback.class), mock(CarNavigationBarController.class), mock(LockPatternUtils.class), mock(DismissCallbackRegistry.class), mock(FalsingManager.class), - mock(KeyguardBypassController.class) + () -> mock(KeyguardBypassController.class) ); } @@ -186,17 +188,17 @@ public class CarKeyguardViewControllerTest extends SysuiTestCase { OverlayViewGlobalStateController overlayViewGlobalStateController, KeyguardStateController keyguardStateController, KeyguardUpdateMonitor keyguardUpdateMonitor, - BiometricUnlockController biometricUnlockController, + Lazy biometricUnlockControllerLazy, ViewMediatorCallback viewMediatorCallback, CarNavigationBarController carNavigationBarController, LockPatternUtils lockPatternUtils, DismissCallbackRegistry dismissCallbackRegistry, FalsingManager falsingManager, - KeyguardBypassController keyguardBypassController) { + Lazy keyguardBypassControllerLazy) { super(context, mainHandler, carServiceProvider, overlayViewGlobalStateController, - keyguardStateController, keyguardUpdateMonitor, biometricUnlockController, + keyguardStateController, keyguardUpdateMonitor, biometricUnlockControllerLazy, viewMediatorCallback, carNavigationBarController, lockPatternUtils, - dismissCallbackRegistry, falsingManager, keyguardBypassController); + dismissCallbackRegistry, falsingManager, keyguardBypassControllerLazy); } @Override