5#ifndef FLUTTER_IMPELLER_TOOLKIT_ANDROID_PROC_TABLE_H_
6#define FLUTTER_IMPELLER_TOOLKIT_ANDROID_PROC_TABLE_H_
9#define EGL_EGLEXT_PROTOTYPES
10#include <EGL/eglext.h>
11#include <android/api-level.h>
13#include <android/hardware_buffer_jni.h>
15#include <android/trace.h>
19#include "flutter/fml/logging.h"
20#include "flutter/fml/native_library.h"
37#define FOR_EACH_ANDROID_PROC(INVOKE) \
38 INVOKE(AChoreographer_getInstance, 24) \
39 INVOKE(AChoreographer_postFrameCallback, 24) \
40 INVOKE(AChoreographer_postFrameCallback64, 29) \
41 INVOKE(AHardwareBuffer_acquire, 26) \
42 INVOKE(AHardwareBuffer_allocate, 26) \
43 INVOKE(AHardwareBuffer_describe, 26) \
44 INVOKE(AHardwareBuffer_fromHardwareBuffer, 26) \
45 INVOKE(AHardwareBuffer_getId, 31) \
46 INVOKE(AHardwareBuffer_isSupported, 29) \
47 INVOKE(AHardwareBuffer_lock, 26) \
48 INVOKE(AHardwareBuffer_release, 26) \
49 INVOKE(AHardwareBuffer_unlock, 26) \
50 INVOKE(ANativeWindow_acquire, 0) \
51 INVOKE(ANativeWindow_getHeight, 0) \
52 INVOKE(ANativeWindow_getWidth, 0) \
53 INVOKE(ANativeWindow_release, 0) \
54 INVOKE(ASurfaceControl_createFromWindow, 29) \
55 INVOKE(ASurfaceControl_release, 29) \
56 INVOKE(ASurfaceTransaction_apply, 29) \
57 INVOKE(ASurfaceTransaction_create, 29) \
58 INVOKE(ASurfaceTransaction_delete, 29) \
59 INVOKE(ASurfaceTransaction_reparent, 29) \
60 INVOKE(ASurfaceTransaction_setBuffer, 29) \
61 INVOKE(ASurfaceTransaction_setColor, 29) \
62 INVOKE(ASurfaceTransaction_setOnComplete, 29) \
63 INVOKE(ASurfaceTransaction_setEnableBackPressure, 31) \
64 INVOKE(ASurfaceTransactionStats_getPreviousReleaseFenceFd, 29) \
65 INVOKE(ATrace_isEnabled, 23) \
66 INVOKE(eglGetNativeClientBufferANDROID, 0)
78 explicit constexpr operator bool()
const {
return IsAvailable(); }
80 template <
class... Args>
84 <<
" is not available on this device. Missing check.";
85 return proc(std::forward<Args>(
args)...);
119#define DEFINE_PROC(name, api) \
120 AndroidProc<decltype(name)> name = {.proc_name = #name};
125 std::vector<fml::RefPtr<fml::NativeLibrary>> libraries_;
126 bool is_valid_ =
false;
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
#define FML_DCHECK(condition)
const ProcTable & GetProcTable()
ProcTable & GetMutableProcTable()
auto operator()(Args &&... args) const
constexpr bool IsAvailable() const
The table of Android procs that are resolved dynamically.
ProcTable(const ProcTable &)=delete
FOR_EACH_ANDROID_PROC(DEFINE_PROC)
ProcTable & operator=(const ProcTable &)=delete
bool IsValid() const
If a valid proc table could be setup. This may fail in case of setup on non-Android platforms.
bool TraceIsEnabled() const
Check if tracing in enabled in the process. This call can be made at any API level.