summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2025-03-24 11:10:42 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-24 11:10:42 -0700
commit69998a8c779a20f0d00c0338be3eb7cad943021b (patch)
treeaf9ff4e1dc193b016a05de29107114f7d27db3ac /src
parente0a018785efb805a35e1bd8cedea622b57ae2f63 (diff)
parent836a832bfe4de06ab5ebec4fe3aaa8f44392bbd4 (diff)
Merge "Using Choreographer for getting refreshrate instead of display manager" into main
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher3/dagger/LauncherBaseAppComponent.java1
-rw-r--r--src/com/android/launcher3/util/window/RefreshRateTracker.java92
-rw-r--r--src/com/android/launcher3/util/window/RefreshRateTracker.kt70
3 files changed, 71 insertions, 92 deletions
diff --git a/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java b/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java
index f86772e5f5..c95c376290 100644
--- a/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java
+++ b/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java
@@ -91,6 +91,7 @@ public interface LauncherBaseAppComponent {
LoaderCursorFactory getLoaderCursorFactory();
WidgetHolderFactory getWidgetHolderFactory();
+ RefreshRateTracker getFrameRateProvider();
/** Builder for LauncherBaseAppComponent. */
interface Builder {
diff --git a/src/com/android/launcher3/util/window/RefreshRateTracker.java b/src/com/android/launcher3/util/window/RefreshRateTracker.java
deleted file mode 100644
index e3397d4359..0000000000
--- a/src/com/android/launcher3/util/window/RefreshRateTracker.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2022 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.launcher3.util.window;
-
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
-
-import android.content.Context;
-import android.hardware.display.DisplayManager;
-import android.hardware.display.DisplayManager.DisplayListener;
-import android.view.Display;
-
-import androidx.annotation.WorkerThread;
-
-import com.android.launcher3.dagger.ApplicationContext;
-import com.android.launcher3.dagger.LauncherAppComponent;
-import com.android.launcher3.dagger.LauncherAppSingleton;
-import com.android.launcher3.util.DaggerSingletonObject;
-import com.android.launcher3.util.DaggerSingletonTracker;
-import com.android.launcher3.util.SafeCloseable;
-
-import javax.inject.Inject;
-
-/**
- * Utility class to track refresh rate of the current device
- */
-@LauncherAppSingleton
-public class RefreshRateTracker implements DisplayListener, SafeCloseable {
-
- private static final DaggerSingletonObject<RefreshRateTracker> INSTANCE =
- new DaggerSingletonObject<>(LauncherAppComponent::getRefreshRateTracker);
-
- private int mSingleFrameMs = 1;
-
- private final DisplayManager mDM;
-
- @Inject
- RefreshRateTracker(@ApplicationContext Context context, DaggerSingletonTracker tracker) {
- mDM = context.getSystemService(DisplayManager.class);
- updateSingleFrameMs();
- mDM.registerDisplayListener(this, UI_HELPER_EXECUTOR.getHandler());
- tracker.addCloseable(this);
- }
-
- /**
- * Returns the single frame time in ms
- */
- public static int getSingleFrameMs(Context context) {
- return INSTANCE.get(context).mSingleFrameMs;
- }
-
- @Override
- public final void onDisplayAdded(int displayId) { }
-
- @Override
- public final void onDisplayRemoved(int displayId) { }
-
- @WorkerThread
- @Override
- public final void onDisplayChanged(int displayId) {
- if (displayId == DEFAULT_DISPLAY) {
- updateSingleFrameMs();
- }
- }
-
- private void updateSingleFrameMs() {
- Display display = mDM.getDisplay(DEFAULT_DISPLAY);
- if (display != null) {
- float refreshRate = display.getRefreshRate();
- mSingleFrameMs = refreshRate > 0 ? (int) (1000 / refreshRate) : 16;
- }
- }
-
- @Override
- public void close() {
- mDM.unregisterDisplayListener(this);
- }
-}
diff --git a/src/com/android/launcher3/util/window/RefreshRateTracker.kt b/src/com/android/launcher3/util/window/RefreshRateTracker.kt
new file mode 100644
index 0000000000..577fec1136
--- /dev/null
+++ b/src/com/android/launcher3/util/window/RefreshRateTracker.kt
@@ -0,0 +1,70 @@
+/*
+ * 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.launcher3.util.window
+
+import android.content.Context
+import android.hardware.display.DisplayManager
+import android.hardware.display.DisplayManager.DisplayListener
+import android.view.Display.DEFAULT_DISPLAY
+import com.android.launcher3.dagger.ApplicationContext
+import com.android.launcher3.dagger.LauncherAppSingleton
+import com.android.launcher3.dagger.LauncherComponentProvider.appComponent
+import com.android.launcher3.util.DaggerSingletonTracker
+import com.android.launcher3.util.Executors
+import javax.inject.Inject
+
+/** Utility class to track refresh rate of the current device */
+interface RefreshRateTracker {
+
+ val singleFrameMs: Int
+
+ @LauncherAppSingleton
+ class RefreshRateTrackerImpl
+ @Inject
+ constructor(@ApplicationContext ctx: Context, tracker: DaggerSingletonTracker) :
+ RefreshRateTracker, DisplayListener {
+
+ private val displayManager: DisplayManager =
+ ctx.getSystemService(DisplayManager::class.java)!!.also {
+ it.registerDisplayListener(this, Executors.UI_HELPER_EXECUTOR.handler)
+ tracker.addCloseable { it.unregisterDisplayListener(this) }
+ }
+
+ override var singleFrameMs: Int = updateSingleFrameMs()
+
+ private fun updateSingleFrameMs(): Int {
+ val refreshRate = displayManager.getDisplay(DEFAULT_DISPLAY)?.refreshRate
+ return if (refreshRate != null && refreshRate > 0) (1000 / refreshRate).toInt() else 16
+ }
+
+ override fun onDisplayChanged(displayId: Int) {
+ if (displayId == DEFAULT_DISPLAY) {
+ singleFrameMs = updateSingleFrameMs()
+ }
+ }
+
+ override fun onDisplayAdded(displayId: Int) {}
+
+ override fun onDisplayRemoved(displayId: Int) {}
+ }
+
+ companion object {
+
+ /** Returns the single frame time in ms */
+ @JvmStatic fun Context.getSingleFrameMs() = appComponent.frameRateProvider.singleFrameMs
+ }
+}