Flutter Engine
The Flutter Engine
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Classes | Namespaces | Macros | Functions
proc_table.h File Reference
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include <android/api-level.h>
#include <android/hardware_buffer.h>
#include <android/hardware_buffer_jni.h>
#include <android/surface_control.h>
#include <android/trace.h>
#include <functional>
#include "flutter/fml/logging.h"
#include "flutter/fml/native_library.h"

Go to the source code of this file.

Classes

struct  impeller::android::AndroidProc< T >
 
struct  impeller::android::ProcTable
 The table of Android procs that are resolved dynamically. More...
 

Namespaces

namespace  impeller
 
namespace  impeller::android
 

Macros

#define EGL_EGLEXT_PROTOTYPES
 
#define FOR_EACH_ANDROID_PROC(INVOKE)
 The Android procs along with the device API level on which these will be available. There is no checking of the actual API level however (because getting the API level is itself only possible on API levels 29 and above). More...
 
#define DEFINE_PROC(name, api)    AndroidProc<decltype(name)> name = {.proc_name = #name};
 

Functions

const ProcTable & impeller::android::GetProcTable ()
 

Macro Definition Documentation

◆ DEFINE_PROC

#define DEFINE_PROC (   name,
  api 
)     AndroidProc<decltype(name)> name = {.proc_name = #name};

Definition at line 119 of file proc_table.h.

◆ EGL_EGLEXT_PROTOTYPES

#define EGL_EGLEXT_PROTOTYPES

Definition at line 9 of file proc_table.h.

◆ FOR_EACH_ANDROID_PROC

#define FOR_EACH_ANDROID_PROC (   INVOKE)
Value:
INVOKE(AChoreographer_getInstance, 24) \
INVOKE(AChoreographer_postFrameCallback, 24) \
INVOKE(AChoreographer_postFrameCallback64, 29) \
INVOKE(AHardwareBuffer_acquire, 26) \
INVOKE(AHardwareBuffer_allocate, 26) \
INVOKE(AHardwareBuffer_describe, 26) \
INVOKE(AHardwareBuffer_fromHardwareBuffer, 26) \
INVOKE(AHardwareBuffer_getId, 31) \
INVOKE(AHardwareBuffer_isSupported, 29) \
INVOKE(AHardwareBuffer_lock, 26) \
INVOKE(AHardwareBuffer_release, 26) \
INVOKE(AHardwareBuffer_unlock, 26) \
INVOKE(ANativeWindow_acquire, 0) \
INVOKE(ANativeWindow_getHeight, 0) \
INVOKE(ANativeWindow_getWidth, 0) \
INVOKE(ANativeWindow_release, 0) \
INVOKE(ASurfaceControl_createFromWindow, 29) \
INVOKE(ASurfaceControl_release, 29) \
INVOKE(ASurfaceTransaction_apply, 29) \
INVOKE(ASurfaceTransaction_create, 29) \
INVOKE(ASurfaceTransaction_delete, 29) \
INVOKE(ASurfaceTransaction_reparent, 29) \
INVOKE(ASurfaceTransaction_setBuffer, 29) \
INVOKE(ASurfaceTransaction_setColor, 29) \
INVOKE(ASurfaceTransaction_setOnComplete, 29) \
INVOKE(ASurfaceTransaction_setEnableBackPressure, 31) \
INVOKE(ASurfaceTransactionStats_getPreviousReleaseFenceFd, 29) \
INVOKE(ATrace_isEnabled, 23) \
INVOKE(eglGetNativeClientBufferANDROID, 0)

The Android procs along with the device API level on which these will be available. There is no checking of the actual API level however (because getting the API level is itself only possible on API levels 29 and above).

Take care to explicitly check for the availability of these APIs at runtime before invoking them.

Typically, you'll never have to deal with the proc. table directly. Instead, rely on the handle wrappers (Choreographer, HardwareBuffer, etc..).

Definition at line 37 of file proc_table.h.