Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 38b99e0

Browse files
committed
Version gate and take fps directly
1 parent a844071 commit 38b99e0

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import android.content.pm.PackageManager;
1111
import android.content.res.AssetManager;
1212
import android.hardware.display.DisplayManager;
13+
import android.os.Build;
1314
import android.os.Bundle;
1415
import android.os.Handler;
1516
import android.os.Looper;
@@ -159,9 +160,17 @@ public void startInitialization(@NonNull Context applicationContext, @NonNull Se
159160
initStartTimestampMillis = SystemClock.uptimeMillis();
160161
flutterApplicationInfo = ApplicationInfoLoader.load(appContext);
161162

162-
final DisplayManager dm = appContext.getSystemService(DisplayManager.class);
163-
final Display primaryDisplay = dm.getDisplay(Display.DEFAULT_DISPLAY);
164-
VsyncWaiter.getInstance(primaryDisplay).init();
163+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
164+
final DisplayManager dm = appContext.getSystemService(DisplayManager.class);
165+
final Display primaryDisplay = dm.getDisplay(Display.DEFAULT_DISPLAY);
166+
VsyncWaiter.getInstance(primaryDisplay.getRefreshRate()).init();
167+
} else {
168+
VsyncWaiter.getInstance(
169+
((WindowManager) appContext.getSystemService(Context.WINDOW_SERVICE))
170+
.getDefaultDisplay()
171+
.getRefreshRate())
172+
.init();
173+
}
165174

166175
// Use a background thread for initialization tasks that require disk access.
167176
Callable<InitResult> initTask =

shell/platform/android/io/flutter/view/VsyncWaiter.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package io.flutter.view;
66

77
import android.view.Choreographer;
8-
import android.view.Display;
98
import androidx.annotation.NonNull;
109
import io.flutter.embedding.engine.FlutterJNI;
1110

@@ -14,14 +13,14 @@ public class VsyncWaiter {
1413
private static VsyncWaiter instance;
1514

1615
@NonNull
17-
public static VsyncWaiter getInstance(@NonNull Display display) {
16+
public static VsyncWaiter getInstance(@NonNull float fps) {
1817
if (instance == null) {
19-
instance = new VsyncWaiter(display);
18+
instance = new VsyncWaiter(fps);
2019
}
2120
return instance;
2221
}
2322

24-
@NonNull private final Display display;
23+
@NonNull private final float fps;
2524

2625
private final FlutterJNI.AsyncWaitForVsyncDelegate asyncWaitForVsyncDelegate =
2726
new FlutterJNI.AsyncWaitForVsyncDelegate() {
@@ -32,7 +31,6 @@ public void asyncWaitForVsync(long cookie) {
3231
new Choreographer.FrameCallback() {
3332
@Override
3433
public void doFrame(long frameTimeNanos) {
35-
float fps = display.getRefreshRate();
3634
long refreshPeriodNanos = (long) (1000000000.0 / fps);
3735
FlutterJNI.nativeOnVsync(
3836
frameTimeNanos, frameTimeNanos + refreshPeriodNanos, cookie);
@@ -41,15 +39,14 @@ public void doFrame(long frameTimeNanos) {
4139
}
4240
};
4341

44-
private VsyncWaiter(@NonNull Display display) {
45-
this.display = display;
42+
private VsyncWaiter(@NonNull float fps) {
43+
this.fps = fps;
4644
}
4745

4846
public void init() {
4947
FlutterJNI.setAsyncWaitForVsyncDelegate(asyncWaitForVsyncDelegate);
5048

5149
// TODO(mattcarroll): look into moving FPS reporting to a plugin
52-
float fps = display.getRefreshRate();
5350
FlutterJNI.setRefreshRateFPS(fps);
5451
}
5552
}

0 commit comments

Comments
 (0)