Postpone alarm IPC

Delaying it until the animation callback to improve parallelization.

Test: atest ScrimControllerTest
Fixes: 140630719
Change-Id: I5e6f29a082ef0d634f74f40ce65fd42f098080b6
This commit is contained in:
Lucas Dupin
2019-10-01 15:21:16 -07:00
parent 4bec4b2fd9
commit fc6ba3703c
2 changed files with 13 additions and 5 deletions

View File

@@ -41,6 +41,7 @@ import com.android.internal.graphics.ColorUtils;
import com.android.internal.util.function.TriConsumer;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.DejankUtils;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
@@ -311,10 +312,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
// Docking pulses may take a long time, wallpapers should also fade away after a while.
mWallpaperVisibilityTimedOut = false;
if (shouldFadeAwayWallpaper()) {
mTimeTicker.schedule(mDozeParameters.getWallpaperAodDuration(),
AlarmTimeout.MODE_IGNORE_IF_SCHEDULED);
DejankUtils.postAfterTraversal(() -> {
mTimeTicker.schedule(mDozeParameters.getWallpaperAodDuration(),
AlarmTimeout.MODE_IGNORE_IF_SCHEDULED);
});
} else {
mTimeTicker.cancel();
DejankUtils.postAfterTraversal(mTimeTicker::cancel);
}
if (mKeyguardUpdateMonitor.needsSlowUnlockTransition() && mState == ScrimState.UNLOCKED) {
@@ -430,8 +433,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
// and docking.
if (mWallpaperVisibilityTimedOut) {
mWallpaperVisibilityTimedOut = false;
mTimeTicker.schedule(mDozeParameters.getWallpaperAodDuration(),
AlarmTimeout.MODE_IGNORE_IF_SCHEDULED);
DejankUtils.postAfterTraversal(() -> {
mTimeTicker.schedule(mDozeParameters.getWallpaperAodDuration(),
AlarmTimeout.MODE_IGNORE_IF_SCHEDULED);
});
}
}
}

View File

@@ -46,6 +46,7 @@ import androidx.test.filters.SmallTest;
import com.android.internal.colorextraction.ColorExtractor.GradientColors;
import com.android.internal.util.function.TriConsumer;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.DejankUtils;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.ScrimView;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -95,6 +96,7 @@ public class ScrimControllerTest extends SysuiTestCase {
mDependency.injectMockDependency(KeyguardUpdateMonitor.class);
when(mDozeParamenters.getAlwaysOn()).thenAnswer(invocation -> mAlwaysOnEnabled);
when(mDozeParamenters.getDisplayNeedsBlanking()).thenReturn(true);
DejankUtils.setImmediate(true);
mScrimController = new SynchronousScrimController(mScrimBehind, mScrimInFront,
mScrimForBubble,
(scrimState, scrimBehindAlpha, scrimInFrontColor) -> {
@@ -113,6 +115,7 @@ public class ScrimControllerTest extends SysuiTestCase {
@After
public void tearDown() {
mScrimController.finishAnimationsImmediately();
DejankUtils.setImmediate(false);
}
@Test