Fix: DozeUi scheduling alarms causing jank on wakeup
Passing the background handler while instantiating AlarmTimeout class so that all its calls will be executed in background.
Test: Manual
Flag: android.systemui.Flags.dozeuiSchedulingAlarmsBackgroundExecution disabled
Bug: 330492575
Change-Id: Ic8ceeb93c9b5607693807d022dd2376465da99e7
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig
index 3310cfa..bf925ba 100644
--- a/packages/SystemUI/aconfig/systemui.aconfig
+++ b/packages/SystemUI/aconfig/systemui.aconfig
@@ -1033,3 +1033,13 @@
purpose: PURPOSE_BUGFIX
}
}
+
+flag {
+ name: "dozeui_scheduling_alarms_background_execution"
+ namespace: "systemui"
+ description: "Decide whether to execute binder calls to schedule alarms in background thread"
+ bug: "330492575"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java
index 95012a2..1a06418 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java
@@ -18,6 +18,7 @@
import static com.android.systemui.doze.DozeMachine.State.DOZE;
import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_PAUSED;
+import static com.android.systemui.Flags.dozeuiSchedulingAlarmsBackgroundExecution;
import android.app.AlarmManager;
import android.content.Context;
@@ -70,6 +71,7 @@
@Inject
public DozeUi(Context context, AlarmManager alarmManager,
WakeLock wakeLock, DozeHost host, @Main Handler handler,
+ @Background Handler bgHandler,
DozeParameters params,
@Background DelayableExecutor bgExecutor,
DozeLog dozeLog) {
@@ -80,7 +82,13 @@
mBgExecutor = bgExecutor;
mCanAnimateTransition = !params.getDisplayNeedsBlanking();
mDozeParameters = params;
- mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick", handler);
+ if (dozeuiSchedulingAlarmsBackgroundExecution()) {
+ mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick",
+ bgHandler);
+ } else {
+ mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick",
+ handler);
+ }
mDozeLog = dozeLog;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java
index e7caf00..69e74d8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java
@@ -85,7 +85,7 @@
mHandler = mHandlerThread.getThreadHandler();
mFakeExecutor = new FakeExecutor(new FakeSystemClock());
mDozeUi = new DozeUi(mContext, mAlarmManager, mWakeLock, mHost, mHandler,
- mDozeParameters, mFakeExecutor, mDozeLog);
+ mHandler, mDozeParameters, mFakeExecutor, mDozeLog);
mDozeUi.setDozeMachine(mMachine);
}