Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Private Member Functions | List of all members
flutter::VsyncWaiterAndroid Class Referencefinal

#include <vsync_waiter_android.h>

Inheritance diagram for flutter::VsyncWaiterAndroid:
flutter::VsyncWaiter

Public Member Functions

 VsyncWaiterAndroid (const flutter::TaskRunners &task_runners)
 
 ~VsyncWaiterAndroid () override
 
- Public Member Functions inherited from flutter::VsyncWaiter
virtual ~VsyncWaiter ()
 
void AsyncWaitForVsync (const Callback &callback)
 
void ScheduleSecondaryCallback (uintptr_t id, const fml::closure &callback)
 

Static Public Member Functions

static bool Register (JNIEnv *env)
 

Private Member Functions

void AwaitVSync () override
 

Additional Inherited Members

- Public Types inherited from flutter::VsyncWaiter
using Callback = std::function< void(std::unique_ptr< FrameTimingsRecorder >)>
 
- Protected Member Functions inherited from flutter::VsyncWaiter
 VsyncWaiter (const TaskRunners &task_runners)
 
virtual void AwaitVSyncForSecondaryCallback ()
 
void FireCallback (fml::TimePoint frame_start_time, fml::TimePoint frame_target_time, bool pause_secondary_tasks=true)
 
- Protected Attributes inherited from flutter::VsyncWaiter
const TaskRunners task_runners_
 

Detailed Description

Definition at line 19 of file vsync_waiter_android.h.

Constructor & Destructor Documentation

◆ VsyncWaiterAndroid()

flutter::VsyncWaiterAndroid::VsyncWaiterAndroid ( const flutter::TaskRunners task_runners)
explicit

Definition at line 24 of file vsync_waiter_android.cc.

25 : VsyncWaiter(task_runners) {}
VsyncWaiter(const TaskRunners &task_runners)

◆ ~VsyncWaiterAndroid()

flutter::VsyncWaiterAndroid::~VsyncWaiterAndroid ( )
overridedefault

Member Function Documentation

◆ AwaitVSync()

void flutter::VsyncWaiterAndroid::AwaitVSync ( )
overrideprivatevirtual

Implements flutter::VsyncWaiter.

Definition at line 30 of file vsync_waiter_android.cc.

30 {
32 auto* weak_this = new std::weak_ptr<VsyncWaiter>(shared_from_this());
34 task_runners_.GetUITaskRunner(), [weak_this]() {
35 const auto& choreographer =
36 impeller::android::Choreographer::GetInstance();
37 choreographer.PostFrameCallback([weak_this](auto time) {
38 auto time_ns =
39 std::chrono::time_point_cast<std::chrono::nanoseconds>(time)
40 .time_since_epoch()
41 .count();
42 OnVsyncFromNDK(time_ns, weak_this);
43 });
44 });
45 } else {
46 // TODO(99798): Remove it when we drop support for API level < 29 and 32-bit
47 // devices.
48 auto* weak_this = new std::weak_ptr<VsyncWaiter>(shared_from_this());
49 jlong java_baton = reinterpret_cast<jlong>(weak_this);
52 env->CallStaticVoidMethod(g_vsync_waiter_class->obj(), //
54 java_baton //
55 );
56 });
57 }
58}
fml::RefPtr< fml::TaskRunner > GetUITaskRunner() const
fml::RefPtr< fml::TaskRunner > GetPlatformTaskRunner() const
const TaskRunners task_runners_
static void RunNowOrPostTask(const fml::RefPtr< fml::TaskRunner > &runner, const fml::closure &task)
virtual void PostTask(const fml::closure &task) override
Definition __init__.py:1
static fml::jni::ScopedJavaGlobalRef< jclass > * g_vsync_waiter_class
static jmethodID g_async_wait_for_vsync_method_
JNIEnv * AttachCurrentThread()
Definition jni_util.cc:34

◆ Register()

bool flutter::VsyncWaiterAndroid::Register ( JNIEnv *  env)
static

Definition at line 122 of file vsync_waiter_android.cc.

122 {
123 static const JNINativeMethod methods[] = {
124 {
125 .name = "nativeOnVsync",
126 .signature = "(JJJ)V",
127 .fnPtr = reinterpret_cast<void*>(&OnVsyncFromJava),
128 },
129 {
130 .name = "nativeUpdateRefreshRate",
131 .signature = "(F)V",
132 .fnPtr = reinterpret_cast<void*>(&OnUpdateRefreshRate),
133 }};
134
135 jclass clazz = env->FindClass("io/flutter/embedding/engine/FlutterJNI");
136
137 if (clazz == nullptr) {
138 return false;
139 }
140
142 FML_CHECK(!g_vsync_waiter_class->is_null());
143
144 g_async_wait_for_vsync_method_ = env->GetStaticMethodID(
145 g_vsync_waiter_class->obj(), "asyncWaitForVsync", "(J)V");
147
148 return env->RegisterNatives(clazz, methods, fml::size(methods)) == 0;
149}
#define FML_CHECK(condition)
Definition logging.h:85
constexpr std::size_t size(T(&array)[N])
Definition size.h:13

The documentation for this class was generated from the following files: