summaryrefslogtreecommitdiff
path: root/quickstep
diff options
context:
space:
mode:
author Sunny Goyal <sunnygoyal@google.com> 2025-03-18 14:43:53 -0700
committer Sunny Goyal <sunnygoyal@google.com> 2025-03-24 08:51:53 -0700
commit836a832bfe4de06ab5ebec4fe3aaa8f44392bbd4 (patch)
tree0d555f51f5af44ed36de9172f15405dc97eeeac2 /quickstep
parent91a081f26c9f2c25fd2b5cb97bc7487cd6f1f45a (diff)
Using Choreographer for getting refreshrate instead of display manager
Bug: 404582684 Flag: EXEMPT bugfix Test: Manually verified that values are same as before even after changing refresh rate `adb shell settings put system peak_refresh_rate [30/60/90/120]` Change-Id: I5d5468d8ab81a9a5e8d8cd67a9097423b750edb3
Diffstat (limited to 'quickstep')
-rw-r--r--quickstep/src/com/android/launcher3/dagger/Modules.kt6
-rw-r--r--quickstep/src/com/android/quickstep/util/ChoreographerFrameRateTracker.kt31
2 files changed, 37 insertions, 0 deletions
diff --git a/quickstep/src/com/android/launcher3/dagger/Modules.kt b/quickstep/src/com/android/launcher3/dagger/Modules.kt
index 7671a82869..9723b42c62 100644
--- a/quickstep/src/com/android/launcher3/dagger/Modules.kt
+++ b/quickstep/src/com/android/launcher3/dagger/Modules.kt
@@ -21,8 +21,10 @@ import com.android.launcher3.uioverrides.SystemApiWrapper
import com.android.launcher3.uioverrides.plugins.PluginManagerWrapperImpl
import com.android.launcher3.util.ApiWrapper
import com.android.launcher3.util.PluginManagerWrapper
+import com.android.launcher3.util.window.RefreshRateTracker
import com.android.launcher3.util.window.WindowManagerProxy
import com.android.launcher3.widget.LauncherWidgetHolder.WidgetHolderFactory
+import com.android.quickstep.util.ChoreographerFrameRateTracker
import com.android.quickstep.util.GestureExclusionManager
import com.android.quickstep.util.SystemWindowManagerProxy
import dagger.Binds
@@ -60,4 +62,8 @@ object StaticObjectModule {
@Provides
@JvmStatic
fun provideGestureExclusionManager(): GestureExclusionManager = GestureExclusionManager.INSTANCE
+
+ @Provides
+ @JvmStatic
+ fun provideRefreshRateTracker(): RefreshRateTracker = ChoreographerFrameRateTracker
}
diff --git a/quickstep/src/com/android/quickstep/util/ChoreographerFrameRateTracker.kt b/quickstep/src/com/android/quickstep/util/ChoreographerFrameRateTracker.kt
new file mode 100644
index 0000000000..1b61a6af6b
--- /dev/null
+++ b/quickstep/src/com/android/quickstep/util/ChoreographerFrameRateTracker.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.quickstep.util
+
+import android.util.TimeUtils
+import android.view.Choreographer
+import com.android.launcher3.util.window.RefreshRateTracker
+
+/** [RefreshRateTracker] using main thread [Choreographer] */
+object ChoreographerFrameRateTracker : RefreshRateTracker {
+
+ override val singleFrameMs: Int
+ get() =
+ Choreographer.getMainThreadInstance()?.let {
+ (it.frameIntervalNanos / TimeUtils.NANOS_PER_MS).toInt().coerceAtLeast(1)
+ } ?: 1
+}