Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ private static void asyncWaitForVsync(final long cookie) {

// TODO(mattcarroll): add javadocs
public static native void nativeOnVsync(
long frameTimeNanos, long frameTargetTimeNanos, long cookie);
long frameDelayNanos, long refreshPeriodNanos, long cookie);

// TODO(mattcarroll): add javadocs
@NonNull
Expand Down
10 changes: 7 additions & 3 deletions shell/platform/android/io/flutter/view/VsyncWaiter.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public static VsyncWaiter getInstance(float fps) {
}

private final float fps;
private final long refreshPeriodNanos;

private final FlutterJNI.AsyncWaitForVsyncDelegate asyncWaitForVsyncDelegate =
new FlutterJNI.AsyncWaitForVsyncDelegate() {
Expand All @@ -31,16 +32,19 @@ public void asyncWaitForVsync(long cookie) {
new Choreographer.FrameCallback() {
@Override
public void doFrame(long frameTimeNanos) {
long refreshPeriodNanos = (long) (1000000000.0 / fps);
FlutterJNI.nativeOnVsync(
frameTimeNanos, frameTimeNanos + refreshPeriodNanos, cookie);
long delay = System.nanoTime() - frameTimeNanos;
if (delay < 0) {
delay = 0;
}
FlutterJNI.nativeOnVsync(delay, refreshPeriodNanos, cookie);
}
});
}
};

private VsyncWaiter(float fps) {
this.fps = fps;
refreshPeriodNanos = (long) (1000000000.0 / fps);
}

public void init() {
Expand Down
12 changes: 6 additions & 6 deletions shell/platform/android/vsync_waiter_android.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ void VsyncWaiterAndroid::AwaitVSync() {
// static
void VsyncWaiterAndroid::OnNativeVsync(JNIEnv* env,
jclass jcaller,
jlong frameTimeNanos,
jlong frameTargetTimeNanos,
jlong frameDelayNanos,
jlong refreshPeriodNanos,
jlong java_baton) {
TRACE_EVENT0("flutter", "VSYNC");

auto frame_time = fml::TimePoint::FromEpochDelta(
fml::TimeDelta::FromNanoseconds(frameTimeNanos));
auto target_time = fml::TimePoint::FromEpochDelta(
fml::TimeDelta::FromNanoseconds(frameTargetTimeNanos));
auto frame_time =
fml::TimePoint::Now() - fml::TimeDelta::FromNanoseconds(frameDelayNanos);
auto target_time =
frame_time + fml::TimeDelta::FromNanoseconds(refreshPeriodNanos);

ConsumePendingCallback(java_baton, frame_time, target_time);
}
Expand Down
4 changes: 2 additions & 2 deletions shell/platform/android/vsync_waiter_android.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ class VsyncWaiterAndroid final : public VsyncWaiter {

static void OnNativeVsync(JNIEnv* env,
jclass jcaller,
jlong frameTimeNanos,
jlong frameTargetTimeNanos,
jlong frameDelayNanos,
jlong refreshPeriodNanos,
jlong java_baton);

static void ConsumePendingCallback(jlong java_baton,
Expand Down