This repository was archived by the owner on Feb 25, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 4 files changed +16
-12
lines changed Expand file tree Collapse file tree 4 files changed +16
-12
lines changed Original file line number Diff line number Diff line change @@ -238,7 +238,7 @@ private static void asyncWaitForVsync(final long cookie) {
238238
239239 // TODO(mattcarroll): add javadocs
240240 public static native void nativeOnVsync (
241- long frameTimeNanos , long frameTargetTimeNanos , long cookie );
241+ long frameDelayNanos , long refreshPeriodNanos , long cookie );
242242
243243 // TODO(mattcarroll): add javadocs
244244 @ NonNull
Original file line number Diff line number Diff line change @@ -21,6 +21,7 @@ public static VsyncWaiter getInstance(float fps) {
2121 }
2222
2323 private final float fps ;
24+ private final long refreshPeriodNanos ;
2425
2526 private final FlutterJNI .AsyncWaitForVsyncDelegate asyncWaitForVsyncDelegate =
2627 new FlutterJNI .AsyncWaitForVsyncDelegate () {
@@ -31,16 +32,19 @@ public void asyncWaitForVsync(long cookie) {
3132 new Choreographer .FrameCallback () {
3233 @ Override
3334 public void doFrame (long frameTimeNanos ) {
34- long refreshPeriodNanos = (long ) (1000000000.0 / fps );
35- FlutterJNI .nativeOnVsync (
36- frameTimeNanos , frameTimeNanos + refreshPeriodNanos , cookie );
35+ long delay = System .nanoTime () - frameTimeNanos ;
36+ if (delay < 0 ) {
37+ delay = 0 ;
38+ }
39+ FlutterJNI .nativeOnVsync (delay , refreshPeriodNanos , cookie );
3740 }
3841 });
3942 }
4043 };
4144
4245 private VsyncWaiter (float fps ) {
4346 this .fps = fps ;
47+ refreshPeriodNanos = (long ) (1000000000.0 / fps );
4448 }
4549
4650 public void init () {
Original file line number Diff line number Diff line change @@ -41,15 +41,15 @@ void VsyncWaiterAndroid::AwaitVSync() {
4141// static
4242void VsyncWaiterAndroid::OnNativeVsync (JNIEnv* env,
4343 jclass jcaller,
44- jlong frameTimeNanos ,
45- jlong frameTargetTimeNanos ,
44+ jlong frameDelayNanos ,
45+ jlong refreshPeriodNanos ,
4646 jlong java_baton) {
4747 TRACE_EVENT0 (" flutter" , " VSYNC" );
4848
49- auto frame_time = fml::TimePoint::FromEpochDelta (
50- fml::TimeDelta::FromNanoseconds (frameTimeNanos) );
51- auto target_time = fml::TimePoint::FromEpochDelta (
52- fml::TimeDelta::FromNanoseconds (frameTargetTimeNanos) );
49+ auto frame_time =
50+ fml::TimePoint::Now () - fml:: TimeDelta::FromNanoseconds (frameDelayNanos );
51+ auto target_time =
52+ frame_time + fml::TimeDelta::FromNanoseconds (refreshPeriodNanos );
5353
5454 ConsumePendingCallback (java_baton, frame_time, target_time);
5555}
Original file line number Diff line number Diff line change @@ -28,8 +28,8 @@ class VsyncWaiterAndroid final : public VsyncWaiter {
2828
2929 static void OnNativeVsync (JNIEnv* env,
3030 jclass jcaller,
31- jlong frameTimeNanos ,
32- jlong frameTargetTimeNanos ,
31+ jlong frameDelayNanos ,
32+ jlong refreshPeriodNanos ,
3333 jlong java_baton);
3434
3535 static void ConsumePendingCallback (jlong java_baton,
You can’t perform that action at this time.
0 commit comments