From 836a832bfe4de06ab5ebec4fe3aaa8f44392bbd4 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 18 Mar 2025 14:43:53 -0700 Subject: 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 --- .../src/com/android/launcher3/dagger/Modules.kt | 6 +++++ .../util/ChoreographerFrameRateTracker.kt | 31 ++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 quickstep/src/com/android/quickstep/util/ChoreographerFrameRateTracker.kt (limited to 'quickstep/src') 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 +} -- cgit v1.2.3-59-g8ed1b