Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_43355755
engine
提交
caf32d5b
E
engine
项目概览
weixin_43355755
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
caf32d5b
编写于
10月 29, 2020
作者:
S
stuartmorgan
提交者:
GitHub
10月 29, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add a proc table version of embedder API (#21813)
上级
38f6665b
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
414 addition
and
62 deletion
+414
-62
BUILD.gn
BUILD.gn
+1
-0
ci/licenses_golden/licenses_flutter
ci/licenses_golden/licenses_flutter
+2
-1
shell/platform/embedder/BUILD.gn
shell/platform/embedder/BUILD.gn
+36
-1
shell/platform/embedder/embedder.cc
shell/platform/embedder/embedder.cc
+55
-1
shell/platform/embedder/embedder.h
shell/platform/embedder/embedder.h
+219
-48
shell/platform/embedder/embedder_struct_macros.h
shell/platform/embedder/embedder_struct_macros.h
+14
-10
shell/platform/embedder/embedder_thread_host.cc
shell/platform/embedder/embedder_thread_host.cc
+1
-1
shell/platform/embedder/test_utils/proc_table_replacement.h
shell/platform/embedder/test_utils/proc_table_replacement.h
+23
-0
shell/platform/embedder/tests/embedder_unittests_proctable.cc
...l/platform/embedder/tests/embedder_unittests_proctable.cc
+62
-0
testing/run_tests.py
testing/run_tests.py
+1
-0
未找到文件。
BUILD.gn
浏览文件 @
caf32d5b
...
...
@@ -95,6 +95,7 @@ group("flutter") {
"//flutter/lib/ui:ui_unittests",
"//flutter/runtime:runtime_unittests",
"//flutter/shell/common:shell_unittests",
"//flutter/shell/platform/embedder:embedder_proctable_unittests",
"//flutter/shell/platform/embedder:embedder_unittests",
"//flutter/testing:testing_unittests",
"//flutter/third_party/txt:txt_unittests",
...
...
ci/licenses_golden/licenses_flutter
浏览文件 @
caf32d5b
...
...
@@ -1093,7 +1093,7 @@ FILE: ../../../flutter/shell/platform/embedder/embedder_render_target.cc
FILE: ../../../flutter/shell/platform/embedder/embedder_render_target.h
FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_cache.cc
FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_cache.h
FILE: ../../../flutter/shell/platform/embedder/embedder_s
afe_acces
s.h
FILE: ../../../flutter/shell/platform/embedder/embedder_s
truct_macro
s.h
FILE: ../../../flutter/shell/platform/embedder/embedder_surface.cc
FILE: ../../../flutter/shell/platform/embedder/embedder_surface.h
FILE: ../../../flutter/shell/platform/embedder/embedder_surface_gl.cc
...
...
@@ -1121,6 +1121,7 @@ FILE: ../../../flutter/shell/platform/embedder/fixtures/verifyb143464703.png
FILE: ../../../flutter/shell/platform/embedder/fixtures/verifyb143464703_soft_noxform.png
FILE: ../../../flutter/shell/platform/embedder/platform_view_embedder.cc
FILE: ../../../flutter/shell/platform/embedder/platform_view_embedder.h
FILE: ../../../flutter/shell/platform/embedder/test_utils/proc_table_replacement.h
FILE: ../../../flutter/shell/platform/embedder/vsync_waiter_embedder.cc
FILE: ../../../flutter/shell/platform/embedder/vsync_waiter_embedder.h
FILE: ../../../flutter/shell/platform/fuchsia/dart-pkg/fuchsia/lib/fuchsia.dart
...
...
shell/platform/embedder/BUILD.gn
浏览文件 @
caf32d5b
...
...
@@ -48,7 +48,7 @@ template("embedder_source_set") {
"embedder_render_target.h",
"embedder_render_target_cache.cc",
"embedder_render_target_cache.h",
"embedder_s
afe_acces
s.h",
"embedder_s
truct_macro
s.h",
"embedder_surface.cc",
"embedder_surface.h",
"embedder_surface_software.cc",
...
...
@@ -110,6 +110,14 @@ source_set("embedder_headers") {
public_configs = [ "//flutter:config" ]
}
source_set("embedder_test_utils") {
public = [ "test_utils/proc_table_replacement.h" ]
deps = [ ":embedder_headers" ]
public_configs = [ "//flutter:config" ]
}
# For using the embedder API as internal implementation detail of an
# embedding.
config("embedder_internal_library_config") {
...
...
@@ -200,6 +208,33 @@ if (enable_unittests) {
deps += [ "//flutter/testing:opengl" ]
}
}
# Tests the build in FLUTTER_ENGINE_NO_PROTOTYPES mode.
executable("embedder_proctable_unittests") {
testonly = true
configs += [
":embedder_gpu_configuration_config",
"//flutter:export_dynamic_symbols",
]
sources = [ "tests/embedder_unittests_proctable.cc" ]
defines = [ "FLUTTER_ENGINE_NO_PROTOTYPES" ]
deps = [
":embedder",
":embedder_gpu_configuration",
":fixtures",
"//flutter/testing",
#"//flutter/testing:dart",
#"//flutter/testing:skia",
#"//flutter/third_party/tonic",
#"//third_party/dart/runtime/bin:elf_loader",
#"//third_party/skia",
]
}
}
shared_library("flutter_engine_library") {
...
...
shell/platform/embedder/embedder.cc
浏览文件 @
caf32d5b
...
...
@@ -50,7 +50,7 @@ extern const intptr_t kPlatformStrongDillSize;
#include "flutter/shell/platform/embedder/embedder_engine.h"
#include "flutter/shell/platform/embedder/embedder_platform_message_response.h"
#include "flutter/shell/platform/embedder/embedder_render_target.h"
#include "flutter/shell/platform/embedder/embedder_s
afe_acces
s.h"
#include "flutter/shell/platform/embedder/embedder_s
truct_macro
s.h"
#include "flutter/shell/platform/embedder/embedder_task_runner.h"
#include "flutter/shell/platform/embedder/embedder_thread_host.h"
#include "flutter/shell/platform/embedder/platform_view_embedder.h"
...
...
@@ -2048,3 +2048,57 @@ FlutterEngineResult FlutterEngineNotifyDisplayUpdate(
"Invalid FlutterEngineDisplaysUpdateType type specified."
);
}
}
FlutterEngineResult
FlutterEngineGetProcAddresses
(
FlutterEngineProcTable
*
table
)
{
if
(
!
table
)
{
return
LOG_EMBEDDER_ERROR
(
kInvalidArguments
,
"Null table specified."
);
}
#define SET_PROC(member, function) \
if (STRUCT_HAS_MEMBER(table, member)) { \
table->member = &function; \
}
SET_PROC
(
CreateAOTData
,
FlutterEngineCreateAOTData
);
SET_PROC
(
CollectAOTData
,
FlutterEngineCollectAOTData
);
SET_PROC
(
Run
,
FlutterEngineRun
);
SET_PROC
(
Shutdown
,
FlutterEngineShutdown
);
SET_PROC
(
Initialize
,
FlutterEngineInitialize
);
SET_PROC
(
Deinitialize
,
FlutterEngineDeinitialize
);
SET_PROC
(
RunInitialized
,
FlutterEngineRunInitialized
);
SET_PROC
(
SendWindowMetricsEvent
,
FlutterEngineSendWindowMetricsEvent
);
SET_PROC
(
SendPointerEvent
,
FlutterEngineSendPointerEvent
);
SET_PROC
(
SendPlatformMessage
,
FlutterEngineSendPlatformMessage
);
SET_PROC
(
PlatformMessageCreateResponseHandle
,
FlutterPlatformMessageCreateResponseHandle
);
SET_PROC
(
PlatformMessageReleaseResponseHandle
,
FlutterPlatformMessageReleaseResponseHandle
);
SET_PROC
(
SendPlatformMessageResponse
,
FlutterEngineSendPlatformMessageResponse
);
SET_PROC
(
RegisterExternalTexture
,
FlutterEngineRegisterExternalTexture
);
SET_PROC
(
UnregisterExternalTexture
,
FlutterEngineUnregisterExternalTexture
);
SET_PROC
(
MarkExternalTextureFrameAvailable
,
FlutterEngineMarkExternalTextureFrameAvailable
);
SET_PROC
(
UpdateSemanticsEnabled
,
FlutterEngineUpdateSemanticsEnabled
);
SET_PROC
(
UpdateAccessibilityFeatures
,
FlutterEngineUpdateAccessibilityFeatures
);
SET_PROC
(
DispatchSemanticsAction
,
FlutterEngineDispatchSemanticsAction
);
SET_PROC
(
OnVsync
,
FlutterEngineOnVsync
);
SET_PROC
(
ReloadSystemFonts
,
FlutterEngineReloadSystemFonts
);
SET_PROC
(
TraceEventDurationBegin
,
FlutterEngineTraceEventDurationBegin
);
SET_PROC
(
TraceEventDurationEnd
,
FlutterEngineTraceEventDurationEnd
);
SET_PROC
(
TraceEventInstant
,
FlutterEngineTraceEventInstant
);
SET_PROC
(
PostRenderThreadTask
,
FlutterEnginePostRenderThreadTask
);
SET_PROC
(
GetCurrentTime
,
FlutterEngineGetCurrentTime
);
SET_PROC
(
RunTask
,
FlutterEngineRunTask
);
SET_PROC
(
UpdateLocales
,
FlutterEngineUpdateLocales
);
SET_PROC
(
RunsAOTCompiledDartCode
,
FlutterEngineRunsAOTCompiledDartCode
);
SET_PROC
(
PostDartObject
,
FlutterEnginePostDartObject
);
SET_PROC
(
NotifyLowMemoryWarning
,
FlutterEngineNotifyLowMemoryWarning
);
SET_PROC
(
PostCallbackOnAllNativeThreads
,
FlutterEnginePostCallbackOnAllNativeThreads
);
SET_PROC
(
NotifyDisplayUpdate
,
FlutterEngineNotifyDisplayUpdate
);
#undef SET_PROC
return
kSuccess
;
}
shell/platform/embedder/embedder.h
浏览文件 @
caf32d5b
...
...
@@ -1001,22 +1001,6 @@ typedef enum {
kFlutterEngineDisplaysUpdateTypeCount
,
}
FlutterEngineDisplaysUpdateType
;
//------------------------------------------------------------------------------
/// @brief Posts updates corresponding to display changes to a running engine
/// instance.
///
/// @param[in] update_type The type of update pushed to the engine.
/// @param[in] displays The displays affected by this update.
/// @param[in] display_count Size of the displays array, must be at least 1.
///
/// @return the result of the call made to the engine.
///
FlutterEngineResult
FlutterEngineNotifyDisplayUpdate
(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
FlutterEngineDisplaysUpdateType
update_type
,
const
FlutterEngineDisplay
*
displays
,
size_t
display_count
);
typedef
int64_t
FlutterEngineDartPort
;
typedef
enum
{
...
...
@@ -1134,38 +1118,6 @@ typedef struct {
/// FlutterEngine instance in AOT mode.
typedef
struct
_FlutterEngineAOTData
*
FlutterEngineAOTData
;
//------------------------------------------------------------------------------
/// @brief Creates the necessary data structures to launch a Flutter Dart
/// application in AOT mode. The data may only be collected after
/// all FlutterEngine instances launched using this data have been
/// terminated.
///
/// @param[in] source The source of the AOT data.
/// @param[out] data_out The AOT data on success. Unchanged on failure.
///
/// @return Returns if the AOT data could be successfully resolved.
///
FLUTTER_EXPORT
FlutterEngineResult
FlutterEngineCreateAOTData
(
const
FlutterEngineAOTDataSource
*
source
,
FlutterEngineAOTData
*
data_out
);
//------------------------------------------------------------------------------
/// @brief Collects the AOT data.
///
/// @warning The embedder must ensure that this call is made only after all
/// FlutterEngine instances launched using this data have been
/// terminated, and that all of those instances were launched with
/// the FlutterProjectArgs::shutdown_dart_vm_when_done flag set to
/// true.
///
/// @param[in] data The data to collect.
///
/// @return Returns if the AOT data was successfully collected.
///
FLUTTER_EXPORT
FlutterEngineResult
FlutterEngineCollectAOTData
(
FlutterEngineAOTData
data
);
typedef
struct
{
/// The size of this struct. Must be sizeof(FlutterProjectArgs).
size_t
struct_size
;
...
...
@@ -1387,6 +1339,40 @@ typedef struct {
}
FlutterProjectArgs
;
#ifndef FLUTTER_ENGINE_NO_PROTOTYPES
//------------------------------------------------------------------------------
/// @brief Creates the necessary data structures to launch a Flutter Dart
/// application in AOT mode. The data may only be collected after
/// all FlutterEngine instances launched using this data have been
/// terminated.
///
/// @param[in] source The source of the AOT data.
/// @param[out] data_out The AOT data on success. Unchanged on failure.
///
/// @return Returns if the AOT data could be successfully resolved.
///
FLUTTER_EXPORT
FlutterEngineResult
FlutterEngineCreateAOTData
(
const
FlutterEngineAOTDataSource
*
source
,
FlutterEngineAOTData
*
data_out
);
//------------------------------------------------------------------------------
/// @brief Collects the AOT data.
///
/// @warning The embedder must ensure that this call is made only after all
/// FlutterEngine instances launched using this data have been
/// terminated, and that all of those instances were launched with
/// the FlutterProjectArgs::shutdown_dart_vm_when_done flag set to
/// true.
///
/// @param[in] data The data to collect.
///
/// @return Returns if the AOT data was successfully collected.
///
FLUTTER_EXPORT
FlutterEngineResult
FlutterEngineCollectAOTData
(
FlutterEngineAOTData
data
);
//------------------------------------------------------------------------------
/// @brief Initialize and run a Flutter engine instance and return a handle
/// to it. This is a convenience method for the pair of calls to
...
...
@@ -1970,6 +1956,191 @@ FlutterEngineResult FlutterEnginePostCallbackOnAllNativeThreads(
FlutterNativeThreadCallback
callback
,
void
*
user_data
);
//------------------------------------------------------------------------------
/// @brief Posts updates corresponding to display changes to a running engine
/// instance.
///
/// @param[in] update_type The type of update pushed to the engine.
/// @param[in] displays The displays affected by this update.
/// @param[in] display_count Size of the displays array, must be at least 1.
///
/// @return the result of the call made to the engine.
///
FLUTTER_EXPORT
FlutterEngineResult
FlutterEngineNotifyDisplayUpdate
(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
FlutterEngineDisplaysUpdateType
update_type
,
const
FlutterEngineDisplay
*
displays
,
size_t
display_count
);
#endif // !FLUTTER_ENGINE_NO_PROTOTYPES
// Typedefs for the function pointers in FlutterEngineProcTable.
typedef
FlutterEngineResult
(
*
FlutterEngineCreateAOTDataFnPtr
)(
const
FlutterEngineAOTDataSource
*
source
,
FlutterEngineAOTData
*
data_out
);
typedef
FlutterEngineResult
(
*
FlutterEngineCollectAOTDataFnPtr
)(
FlutterEngineAOTData
data
);
typedef
FlutterEngineResult
(
*
FlutterEngineRunFnPtr
)(
size_t
version
,
const
FlutterRendererConfig
*
config
,
const
FlutterProjectArgs
*
args
,
void
*
user_data
,
FLUTTER_API_SYMBOL
(
FlutterEngine
)
*
engine_out
);
typedef
FlutterEngineResult
(
*
FlutterEngineShutdownFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
);
typedef
FlutterEngineResult
(
*
FlutterEngineInitializeFnPtr
)(
size_t
version
,
const
FlutterRendererConfig
*
config
,
const
FlutterProjectArgs
*
args
,
void
*
user_data
,
FLUTTER_API_SYMBOL
(
FlutterEngine
)
*
engine_out
);
typedef
FlutterEngineResult
(
*
FlutterEngineDeinitializeFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
);
typedef
FlutterEngineResult
(
*
FlutterEngineRunInitializedFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
);
typedef
FlutterEngineResult
(
*
FlutterEngineSendWindowMetricsEventFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
const
FlutterWindowMetricsEvent
*
event
);
typedef
FlutterEngineResult
(
*
FlutterEngineSendPointerEventFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
const
FlutterPointerEvent
*
events
,
size_t
events_count
);
typedef
FlutterEngineResult
(
*
FlutterEngineSendPlatformMessageFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
const
FlutterPlatformMessage
*
message
);
typedef
FlutterEngineResult
(
*
FlutterEnginePlatformMessageCreateResponseHandleFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
FlutterDataCallback
data_callback
,
void
*
user_data
,
FlutterPlatformMessageResponseHandle
**
response_out
);
typedef
FlutterEngineResult
(
*
FlutterEnginePlatformMessageReleaseResponseHandleFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
FlutterPlatformMessageResponseHandle
*
response
);
typedef
FlutterEngineResult
(
*
FlutterEngineSendPlatformMessageResponseFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
const
FlutterPlatformMessageResponseHandle
*
handle
,
const
uint8_t
*
data
,
size_t
data_length
);
typedef
FlutterEngineResult
(
*
FlutterEngineRegisterExternalTextureFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
int64_t
texture_identifier
);
typedef
FlutterEngineResult
(
*
FlutterEngineUnregisterExternalTextureFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
int64_t
texture_identifier
);
typedef
FlutterEngineResult
(
*
FlutterEngineMarkExternalTextureFrameAvailableFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
int64_t
texture_identifier
);
typedef
FlutterEngineResult
(
*
FlutterEngineUpdateSemanticsEnabledFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
bool
enabled
);
typedef
FlutterEngineResult
(
*
FlutterEngineUpdateAccessibilityFeaturesFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
FlutterAccessibilityFeature
features
);
typedef
FlutterEngineResult
(
*
FlutterEngineDispatchSemanticsActionFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
uint64_t
id
,
FlutterSemanticsAction
action
,
const
uint8_t
*
data
,
size_t
data_length
);
typedef
FlutterEngineResult
(
*
FlutterEngineOnVsyncFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
intptr_t
baton
,
uint64_t
frame_start_time_nanos
,
uint64_t
frame_target_time_nanos
);
typedef
FlutterEngineResult
(
*
FlutterEngineReloadSystemFontsFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
);
typedef
void
(
*
FlutterEngineTraceEventDurationBeginFnPtr
)(
const
char
*
name
);
typedef
void
(
*
FlutterEngineTraceEventDurationEndFnPtr
)(
const
char
*
name
);
typedef
void
(
*
FlutterEngineTraceEventInstantFnPtr
)(
const
char
*
name
);
typedef
FlutterEngineResult
(
*
FlutterEnginePostRenderThreadTaskFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
VoidCallback
callback
,
void
*
callback_data
);
typedef
uint64_t
(
*
FlutterEngineGetCurrentTimeFnPtr
)();
typedef
FlutterEngineResult
(
*
FlutterEngineRunTaskFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
const
FlutterTask
*
task
);
typedef
FlutterEngineResult
(
*
FlutterEngineUpdateLocalesFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
const
FlutterLocale
**
locales
,
size_t
locales_count
);
typedef
bool
(
*
FlutterEngineRunsAOTCompiledDartCodeFnPtr
)(
void
);
typedef
FlutterEngineResult
(
*
FlutterEnginePostDartObjectFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
FlutterEngineDartPort
port
,
const
FlutterEngineDartObject
*
object
);
typedef
FlutterEngineResult
(
*
FlutterEngineNotifyLowMemoryWarningFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
);
typedef
FlutterEngineResult
(
*
FlutterEnginePostCallbackOnAllNativeThreadsFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
FlutterNativeThreadCallback
callback
,
void
*
user_data
);
typedef
FlutterEngineResult
(
*
FlutterEngineNotifyDisplayUpdateFnPtr
)(
FLUTTER_API_SYMBOL
(
FlutterEngine
)
engine
,
FlutterEngineDisplaysUpdateType
update_type
,
const
FlutterEngineDisplay
*
displays
,
size_t
display_count
);
/// Function-pointer-based versions of the APIs above.
typedef
struct
{
/// The size of this struct. Must be sizeof(FlutterEngineProcs).
size_t
struct_size
;
FlutterEngineCreateAOTDataFnPtr
CreateAOTData
;
FlutterEngineCollectAOTDataFnPtr
CollectAOTData
;
FlutterEngineRunFnPtr
Run
;
FlutterEngineShutdownFnPtr
Shutdown
;
FlutterEngineInitializeFnPtr
Initialize
;
FlutterEngineDeinitializeFnPtr
Deinitialize
;
FlutterEngineRunInitializedFnPtr
RunInitialized
;
FlutterEngineSendWindowMetricsEventFnPtr
SendWindowMetricsEvent
;
FlutterEngineSendPointerEventFnPtr
SendPointerEvent
;
FlutterEngineSendPlatformMessageFnPtr
SendPlatformMessage
;
FlutterEnginePlatformMessageCreateResponseHandleFnPtr
PlatformMessageCreateResponseHandle
;
FlutterEnginePlatformMessageReleaseResponseHandleFnPtr
PlatformMessageReleaseResponseHandle
;
FlutterEngineSendPlatformMessageResponseFnPtr
SendPlatformMessageResponse
;
FlutterEngineRegisterExternalTextureFnPtr
RegisterExternalTexture
;
FlutterEngineUnregisterExternalTextureFnPtr
UnregisterExternalTexture
;
FlutterEngineMarkExternalTextureFrameAvailableFnPtr
MarkExternalTextureFrameAvailable
;
FlutterEngineUpdateSemanticsEnabledFnPtr
UpdateSemanticsEnabled
;
FlutterEngineUpdateAccessibilityFeaturesFnPtr
UpdateAccessibilityFeatures
;
FlutterEngineDispatchSemanticsActionFnPtr
DispatchSemanticsAction
;
FlutterEngineOnVsyncFnPtr
OnVsync
;
FlutterEngineReloadSystemFontsFnPtr
ReloadSystemFonts
;
FlutterEngineTraceEventDurationBeginFnPtr
TraceEventDurationBegin
;
FlutterEngineTraceEventDurationEndFnPtr
TraceEventDurationEnd
;
FlutterEngineTraceEventInstantFnPtr
TraceEventInstant
;
FlutterEnginePostRenderThreadTaskFnPtr
PostRenderThreadTask
;
FlutterEngineGetCurrentTimeFnPtr
GetCurrentTime
;
FlutterEngineRunTaskFnPtr
RunTask
;
FlutterEngineUpdateLocalesFnPtr
UpdateLocales
;
FlutterEngineRunsAOTCompiledDartCodeFnPtr
RunsAOTCompiledDartCode
;
FlutterEnginePostDartObjectFnPtr
PostDartObject
;
FlutterEngineNotifyLowMemoryWarningFnPtr
NotifyLowMemoryWarning
;
FlutterEnginePostCallbackOnAllNativeThreadsFnPtr
PostCallbackOnAllNativeThreads
;
FlutterEngineNotifyDisplayUpdateFnPtr
NotifyDisplayUpdate
;
}
FlutterEngineProcTable
;
//------------------------------------------------------------------------------
/// @brief Gets the table of engine function pointers.
///
/// @param[out] table The table to fill with pointers. This should be
/// zero-initialized, except for struct_size.
///
/// @return Returns whether the table was successfully populated.
///
FLUTTER_EXPORT
FlutterEngineResult
FlutterEngineGetProcAddresses
(
FlutterEngineProcTable
*
table
);
#if defined(__cplusplus)
}
// extern "C"
#endif
...
...
shell/platform/embedder/embedder_s
afe_acces
s.h
→
shell/platform/embedder/embedder_s
truct_macro
s.h
浏览文件 @
caf32d5b
...
...
@@ -7,21 +7,25 @@
#include <type_traits>
#define SAFE_ACCESS(pointer, member, default_value) \
([=]() { \
if (offsetof(std::remove_pointer<decltype(pointer)>::type, member) + \
sizeof(pointer->member) <= \
pointer->struct_size) { \
return pointer->member; \
} \
return static_cast<decltype(pointer->member)>((default_value)); \
// Checks if the given struct contains a member, whether set or not.
#define STRUCT_HAS_MEMBER(pointer, member) \
((offsetof(std::remove_pointer<decltype(pointer)>::type, member) + \
sizeof(pointer->member) <= \
pointer->struct_size))
#define SAFE_ACCESS(pointer, member, default_value) \
([=]() { \
if (STRUCT_HAS_MEMBER(pointer, member)) { \
return pointer->member; \
} \
return static_cast<decltype(pointer->member)>((default_value)); \
})()
/// Checks if the member exists.
/// Checks if the member exists
and is non-null
.
#define SAFE_EXISTS(pointer, member) \
(SAFE_ACCESS(pointer, member, nullptr) != nullptr)
/// Checks if exactly one of member1 or member2 exists.
/// Checks if exactly one of member1 or member2 exists
and is non-null
.
#define SAFE_EXISTS_ONE_OF(pointer, member1, member2) \
(SAFE_EXISTS(pointer, member1) != SAFE_EXISTS(pointer, member2))
...
...
shell/platform/embedder/embedder_thread_host.cc
浏览文件 @
caf32d5b
...
...
@@ -9,7 +9,7 @@
#include <algorithm>
#include "flutter/fml/message_loop.h"
#include "flutter/shell/platform/embedder/embedder_s
afe_acces
s.h"
#include "flutter/shell/platform/embedder/embedder_s
truct_macro
s.h"
namespace
flutter
{
...
...
shell/platform/embedder/test_utils/proc_table_replacement.h
0 → 100644
浏览文件 @
caf32d5b
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/shell/platform/embedder/embedder.h"
// Wraps capturing lambas with non-capturing version that can be assigned to
// FlutterEngineProcTable entries (by using statics) to facilitate mocking in
// tests of code built on top of the embedder API.
//
// This should *ONLY* be used in unit tests as it is leaky by design.
//
// |proc| should be the name of an entry in FlutterEngineProcTable, such as
// "initialize". |mock_impl| should be a lamba that replaces its implementation,
// taking the same arguments and returning the same type.
#define MOCK_ENGINE_PROC(proc, mock_impl) \
([&]() { \
static std::function< \
std::remove_pointer_t<decltype(FlutterEngineProcTable::proc)>> \
closure = mock_impl; \
static auto non_capturing = [](auto... args) { return closure(args...); }; \
return non_capturing; \
})()
shell/platform/embedder/tests/embedder_unittests_proctable.cc
0 → 100644
浏览文件 @
caf32d5b
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/shell/platform/embedder/embedder.h"
#include <set>
#include "flutter/testing/testing.h"
#ifdef _WIN32
// winbase.h defines GetCurrentTime as a macro.
#undef GetCurrentTime
#endif
namespace
flutter
{
namespace
testing
{
// Verifies that the proc table is fully populated.
TEST
(
EmbedderProcTable
,
AllPointersProvided
)
{
FlutterEngineProcTable
procs
=
{};
procs
.
struct_size
=
sizeof
(
FlutterEngineProcTable
);
ASSERT_EQ
(
FlutterEngineGetProcAddresses
(
&
procs
),
kSuccess
);
void
(
**
proc
)()
=
reinterpret_cast
<
void
(
**
)()
>
(
&
procs
.
CreateAOTData
);
const
uintptr_t
end_address
=
reinterpret_cast
<
uintptr_t
>
(
&
procs
)
+
procs
.
struct_size
;
while
(
reinterpret_cast
<
uintptr_t
>
(
proc
)
<
end_address
)
{
EXPECT_NE
(
*
proc
,
nullptr
);
++
proc
;
}
}
// Ensures that there are no duplicate pointers in the proc table, to catch
// copy/paste mistakes when adding a new entry to FlutterEngineGetProcAddresses.
TEST
(
EmbedderProcTable
,
NoDuplicatePointers
)
{
FlutterEngineProcTable
procs
=
{};
procs
.
struct_size
=
sizeof
(
FlutterEngineProcTable
);
ASSERT_EQ
(
FlutterEngineGetProcAddresses
(
&
procs
),
kSuccess
);
void
(
**
proc
)()
=
reinterpret_cast
<
void
(
**
)()
>
(
&
procs
.
CreateAOTData
);
const
uintptr_t
end_address
=
reinterpret_cast
<
uintptr_t
>
(
&
procs
)
+
procs
.
struct_size
;
std
::
set
<
void
(
*
)()
>
seen_procs
;
while
(
reinterpret_cast
<
uintptr_t
>
(
proc
)
<
end_address
)
{
auto
result
=
seen_procs
.
insert
(
*
proc
);
EXPECT_TRUE
(
result
.
second
);
++
proc
;
}
}
// Spot-checks that calling one of the function pointers works.
TEST
(
EmbedderProcTable
,
CallProc
)
{
FlutterEngineProcTable
procs
=
{};
procs
.
struct_size
=
sizeof
(
FlutterEngineProcTable
);
ASSERT_EQ
(
FlutterEngineGetProcAddresses
(
&
procs
),
kSuccess
);
EXPECT_NE
(
procs
.
GetCurrentTime
(),
0ULL
);
}
}
// namespace testing
}
// namespace flutter
testing/run_tests.py
浏览文件 @
caf32d5b
...
...
@@ -113,6 +113,7 @@ def RunCCTests(build_dir, filter):
# https://github.com/flutter/flutter/issues/36294
if
not
IsWindows
():
RunEngineExecutable
(
build_dir
,
'embedder_unittests'
,
filter
,
shuffle_flags
)
RunEngineExecutable
(
build_dir
,
'embedder_proctable_unittests'
,
filter
,
shuffle_flags
)
else
:
RunEngineExecutable
(
build_dir
,
'flutter_windows_unittests'
,
filter
,
shuffle_flags
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录