diff options
| author | 2024-04-10 16:09:16 +0000 | |
|---|---|---|
| committer | 2024-04-10 16:33:31 +0000 | |
| commit | f0edb9d687b9bfd1f03394fdea8538029d8425ff (patch) | |
| tree | a285ca1dd0d5940be9caea6d0ea5e214ac06d780 | |
| parent | dc08c20002532038c55f8abdf454200132753511 (diff) | |
Remove DozeUI binder call from main thread
Put on background instead
Fixes: 331918317
Test: DozeUiTest
Flag: ACONFIG com.android.systemui.migrate_clocks_to_blueprint
TEAMFOOD
Change-Id: I0b8b3d5341fe001ef14e28fce151a527956733ae
4 files changed, 35 insertions, 8 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java index 424bd0a3e23b..9a9e698e0138 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java @@ -209,6 +209,15 @@ public class DozeLog implements Dumpable { } /** + * Logs cancelation requests for time ticks + * @param isPending is an unschedule request pending? + * @param isTimeTickScheduled is a time tick request scheduled + */ + public void tracePendingUnscheduleTimeTick(boolean isPending, boolean isTimeTickScheduled) { + mLogger.logPendingUnscheduleTimeTick(isPending, isTimeTickScheduled); + } + + /** * Appends keyguard visibility change event to the logs * @param showing whether the keyguard is now showing */ diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt b/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt index 75b8e513c14a..9d6693efffa3 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt @@ -162,6 +162,15 @@ class DozeLogger @Inject constructor( }) } + fun logPendingUnscheduleTimeTick(isPending: Boolean, isTimeTickScheduled: Boolean) { + buffer.log(TAG, INFO, { + bool1 = isPending + bool2 = isTimeTickScheduled + }, { + "Pending unschedule time tick, isPending=$bool1, isTimeTickScheduled:$bool2" + }) + } + fun logDozeStateChanged(state: DozeMachine.State) { buffer.log(TAG, INFO, { str1 = state.name diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java index 34a80e867153..95012a2643a5 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java @@ -26,11 +26,12 @@ import android.os.SystemClock; import android.text.format.Formatter; import android.util.Log; -import com.android.systemui.DejankUtils; +import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.doze.dagger.DozeScope; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.AlarmTimeout; +import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.wakelock.WakeLock; import java.util.Calendar; @@ -52,14 +53,17 @@ public class DozeUi implements DozeMachine.Part { private final boolean mCanAnimateTransition; private final DozeParameters mDozeParameters; private final DozeLog mDozeLog; - + private final DelayableExecutor mBgExecutor; private long mLastTimeTickElapsed = 0; // If time tick is scheduled and there's not a pending runnable to cancel: - private boolean mTimeTickScheduled; + private volatile boolean mTimeTickScheduled; private final Runnable mCancelTimeTickerRunnable = new Runnable() { @Override public void run() { - mTimeTicker.cancel(); + mDozeLog.tracePendingUnscheduleTimeTick(false, mTimeTickScheduled); + if (!mTimeTickScheduled) { + mTimeTicker.cancel(); + } } }; @@ -67,11 +71,13 @@ public class DozeUi implements DozeMachine.Part { public DozeUi(Context context, AlarmManager alarmManager, WakeLock wakeLock, DozeHost host, @Main Handler handler, DozeParameters params, + @Background DelayableExecutor bgExecutor, DozeLog dozeLog) { mContext = context; mWakeLock = wakeLock; mHost = host; mHandler = handler; + mBgExecutor = bgExecutor; mCanAnimateTransition = !params.getDisplayNeedsBlanking(); mDozeParameters = params; mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick", handler); @@ -166,7 +172,6 @@ public class DozeUi implements DozeMachine.Part { return; } mTimeTickScheduled = true; - DejankUtils.removeCallbacks(mCancelTimeTickerRunnable); long time = System.currentTimeMillis(); long delta = roundToNextMinute(time) - System.currentTimeMillis(); @@ -182,7 +187,8 @@ public class DozeUi implements DozeMachine.Part { return; } mTimeTickScheduled = false; - DejankUtils.postAfterTraversal(mCancelTimeTickerRunnable); + mDozeLog.tracePendingUnscheduleTimeTick(true, mTimeTickScheduled); + mBgExecutor.execute(mCancelTimeTickerRunnable); } private void verifyLastTimeTick() { 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 7311f4a5ef71..e7caf000ef67 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java @@ -41,6 +41,8 @@ import androidx.test.runner.AndroidJUnit4; import com.android.systemui.DejankUtils; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.phone.DozeParameters; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.wakelock.WakeLockFake; import org.junit.After; @@ -69,6 +71,7 @@ public class DozeUiTest extends SysuiTestCase { private Handler mHandler; private HandlerThread mHandlerThread; private DozeUi mDozeUi; + private FakeExecutor mFakeExecutor; @Before public void setUp() throws Exception { @@ -80,9 +83,9 @@ public class DozeUiTest extends SysuiTestCase { mHandlerThread.start(); mWakeLock = new WakeLockFake(); mHandler = mHandlerThread.getThreadHandler(); - + mFakeExecutor = new FakeExecutor(new FakeSystemClock()); mDozeUi = new DozeUi(mContext, mAlarmManager, mWakeLock, mHost, mHandler, - mDozeParameters, mDozeLog); + mDozeParameters, mFakeExecutor, mDozeLog); mDozeUi.setDozeMachine(mMachine); } |