From beee218f244d3dbdb7449aabb2a423bd52618f35 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Tue, 16 Jul 2019 10:27:57 -0700 Subject: [PATCH 1/3] Add a macro for prefixing embedder.h symbols embedder.h is a C API, so has no namespace, and only uses 'Flutter' as a prefix for most symbol names. This creates potential collisions with other code; for instance, FlutterEngine is the name of a type in embedder.h, but also an ObjC class in the iOS Flutter API. This adds a macro that can be set to prefix symbol names, allowing clients (notably, the macOS embedding) to adjust the names used by the embedding API internally without breaking ABI or API compatibility for the standard engine build. Currently the macro is only applied to FlutterEngine, since that's the symbol that is currently at issue, but it can be expanded to other symbols in the future. --- shell/platform/common/cpp/BUILD.gn | 2 +- shell/platform/darwin/macos/BUILD.gn | 2 +- .../macos/framework/Source/FLEEngine.mm | 2 +- shell/platform/embedder/BUILD.gn | 101 +++++++++++------- shell/platform/embedder/embedder.cc | 49 +++++---- shell/platform/embedder/embedder.h | 58 ++++++---- shell/platform/glfw/BUILD.gn | 2 +- shell/platform/glfw/flutter_glfw.cc | 10 +- 8 files changed, 134 insertions(+), 92 deletions(-) diff --git a/shell/platform/common/cpp/BUILD.gn b/shell/platform/common/cpp/BUILD.gn index 265cb37b906ab..ac678700d86b6 100644 --- a/shell/platform/common/cpp/BUILD.gn +++ b/shell/platform/common/cpp/BUILD.gn @@ -46,7 +46,7 @@ source_set("common_cpp") { deps = [ ":common_cpp_library_headers", "$flutter_root/shell/platform/common/cpp/client_wrapper:client_wrapper", - "$flutter_root/shell/platform/embedder:embedder", + "$flutter_root/shell/platform/embedder:embedder_with_symbol_prefix", ] # TODO: Remove once text input model refactor lands, at which point this code diff --git a/shell/platform/darwin/macos/BUILD.gn b/shell/platform/darwin/macos/BUILD.gn index 03990ede05c96..42a79863f1018 100644 --- a/shell/platform/darwin/macos/BUILD.gn +++ b/shell/platform/darwin/macos/BUILD.gn @@ -65,7 +65,7 @@ shared_library("create_flutter_framework_dylib") { deps = [ "$flutter_root/shell/platform/darwin/common:framework_shared", - "$flutter_root/shell/platform/embedder:embedder", + "$flutter_root/shell/platform/embedder:embedder_with_symbol_prefix", ] public_configs = [ "$flutter_root:config" ] diff --git a/shell/platform/darwin/macos/framework/Source/FLEEngine.mm b/shell/platform/darwin/macos/framework/Source/FLEEngine.mm index 9a50499f309ea..22bcec64aaf93 100644 --- a/shell/platform/darwin/macos/framework/Source/FLEEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FLEEngine.mm @@ -123,7 +123,7 @@ static void OnPlatformMessage(const FlutterPlatformMessage* message, FLEEngine* @implementation FLEEngine { // The embedding-API-level engine object. - FlutterEngine _engine; + EmbedderFlutterEngine _engine; // The project being run by this engine. FLEDartProject* _project; diff --git a/shell/platform/embedder/BUILD.gn b/shell/platform/embedder/BUILD.gn index c875d981162f4..c5251f09c682a 100644 --- a/shell/platform/embedder/BUILD.gn +++ b/shell/platform/embedder/BUILD.gn @@ -14,49 +14,68 @@ shell_gpu_configuration("embedder_gpu_configuration") { enable_metal = false } -source_set("embedder") { - sources = [ - "embedder.cc", - "embedder.h", - "embedder_engine.cc", - "embedder_engine.h", - "embedder_external_texture_gl.cc", - "embedder_external_texture_gl.h", - "embedder_include.c", - "embedder_platform_message_response.cc", - "embedder_platform_message_response.h", - "embedder_safe_access.h", - "embedder_surface.cc", - "embedder_surface.h", - "embedder_surface_gl.cc", - "embedder_surface_gl.h", - "embedder_surface_software.cc", - "embedder_surface_software.h", - "embedder_task_runner.cc", - "embedder_task_runner.h", - "embedder_thread_host.cc", - "embedder_thread_host.h", - "platform_view_embedder.cc", - "platform_view_embedder.h", - "vsync_waiter_embedder.cc", - "vsync_waiter_embedder.h", - ] +# Template for the embedder build. Used to allow building it multiple times with +# different flags. +template("embedder_source_set") { + template_target_name = target_name + forward_variables_from(invoker, "*") - deps = [ - ":embedder_gpu_configuration", - "$flutter_root/assets", - "$flutter_root/common", - "$flutter_root/flow", - "$flutter_root/fml", - "$flutter_root/lib/ui", - "$flutter_root/runtime:libdart", - "$flutter_root/shell/common", - "//third_party/dart/runtime/bin:dart_io_api", - "//third_party/skia", - "//third_party/tonic", - ] + source_set(template_target_name) { + sources = [ + "embedder.cc", + "embedder.h", + "embedder_engine.cc", + "embedder_engine.h", + "embedder_external_texture_gl.cc", + "embedder_external_texture_gl.h", + "embedder_include.c", + "embedder_platform_message_response.cc", + "embedder_platform_message_response.h", + "embedder_safe_access.h", + "embedder_surface.cc", + "embedder_surface.h", + "embedder_surface_gl.cc", + "embedder_surface_gl.h", + "embedder_surface_software.cc", + "embedder_surface_software.h", + "embedder_task_runner.cc", + "embedder_task_runner.h", + "embedder_thread_host.cc", + "embedder_thread_host.h", + "platform_view_embedder.cc", + "platform_view_embedder.h", + "vsync_waiter_embedder.cc", + "vsync_waiter_embedder.h", + ] - public_configs = [ "$flutter_root:config" ] + deps = [ + ":embedder_gpu_configuration", + "$flutter_root/assets", + "$flutter_root/common", + "$flutter_root/flow", + "$flutter_root/fml", + "$flutter_root/lib/ui", + "$flutter_root/runtime:libdart", + "$flutter_root/shell/common", + "//third_party/dart/runtime/bin:dart_io_api", + "//third_party/skia", + "//third_party/tonic", + ] + + public_configs += [ "$flutter_root:config" ] + } +} + +embedder_source_set("embedder") { + public_configs = [] +} + +embedder_source_set("embedder_with_symbol_prefix") { + public_configs = [ ":embedder_prefix_config" ] +} + +config("embedder_prefix_config") { + defines = [ "FLUTTER_EMBEDDING_API_PREFIX=Embedder" ] } test_fixtures("fixtures") { diff --git a/shell/platform/embedder/embedder.cc b/shell/platform/embedder/embedder.cc index fcce64bad2c3e..5ba6c8f45edf6 100644 --- a/shell/platform/embedder/embedder.cc +++ b/shell/platform/embedder/embedder.cc @@ -312,7 +312,8 @@ FlutterEngineResult FlutterEngineRun(size_t version, const FlutterRendererConfig* config, const FlutterProjectArgs* args, void* user_data, - FlutterEngine* engine_out) { + FLUTTER_EMBEDDING_API(FlutterEngine) * + engine_out) { // Step 0: Figure out arguments for shell creation. if (version != FLUTTER_ENGINE_VERSION) { return LOG_EMBEDDER_ERROR(kInvalidLibraryVersion); @@ -647,11 +648,13 @@ FlutterEngineResult FlutterEngineRun(size_t version, } // Finally! Release the ownership of the embedder engine to the caller. - *engine_out = reinterpret_cast(embedder_engine.release()); + *engine_out = reinterpret_cast( + embedder_engine.release()); return kSuccess; } -FlutterEngineResult FlutterEngineShutdown(FlutterEngine engine) { +FlutterEngineResult FlutterEngineShutdown(FLUTTER_EMBEDDING_API(FlutterEngine) + engine) { if (engine == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); } @@ -662,7 +665,7 @@ FlutterEngineResult FlutterEngineShutdown(FlutterEngine engine) { } FlutterEngineResult FlutterEngineSendWindowMetricsEvent( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, const FlutterWindowMetricsEvent* flutter_metrics) { if (engine == nullptr || flutter_metrics == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -749,7 +752,7 @@ inline int64_t PointerDataButtonsForLegacyEvent( } FlutterEngineResult FlutterEngineSendPointerEvent( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, const FlutterPointerEvent* pointers, size_t events_count) { if (engine == nullptr || pointers == nullptr || events_count == 0) { @@ -808,7 +811,7 @@ FlutterEngineResult FlutterEngineSendPointerEvent( } FlutterEngineResult FlutterEngineSendPlatformMessage( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, const FlutterPlatformMessage* flutter_message) { if (engine == nullptr || flutter_message == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -841,7 +844,7 @@ FlutterEngineResult FlutterEngineSendPlatformMessage( } FlutterEngineResult FlutterPlatformMessageCreateResponseHandle( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, FlutterDataCallback data_callback, void* user_data, FlutterPlatformMessageResponseHandle** response_out) { @@ -872,7 +875,7 @@ FlutterEngineResult FlutterPlatformMessageCreateResponseHandle( } FlutterEngineResult FlutterPlatformMessageReleaseResponseHandle( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, FlutterPlatformMessageResponseHandle* response) { if (engine == nullptr || response == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -882,7 +885,7 @@ FlutterEngineResult FlutterPlatformMessageReleaseResponseHandle( } FlutterEngineResult FlutterEngineSendPlatformMessageResponse( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, const FlutterPlatformMessageResponseHandle* handle, const uint8_t* data, size_t data_length) { @@ -912,7 +915,7 @@ FlutterEngineResult __FlutterEngineFlushPendingTasksNow() { } FlutterEngineResult FlutterEngineRegisterExternalTexture( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, int64_t texture_identifier) { if (engine == nullptr || texture_identifier == 0) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -925,7 +928,7 @@ FlutterEngineResult FlutterEngineRegisterExternalTexture( } FlutterEngineResult FlutterEngineUnregisterExternalTexture( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, int64_t texture_identifier) { if (engine == nullptr || texture_identifier == 0) { return kInvalidArguments; @@ -940,7 +943,7 @@ FlutterEngineResult FlutterEngineUnregisterExternalTexture( } FlutterEngineResult FlutterEngineMarkExternalTextureFrameAvailable( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, int64_t texture_identifier) { if (engine == nullptr || texture_identifier == 0) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -952,8 +955,9 @@ FlutterEngineResult FlutterEngineMarkExternalTextureFrameAvailable( return kSuccess; } -FlutterEngineResult FlutterEngineUpdateSemanticsEnabled(FlutterEngine engine, - bool enabled) { +FlutterEngineResult FlutterEngineUpdateSemanticsEnabled( + FLUTTER_EMBEDDING_API(FlutterEngine) engine, + bool enabled) { if (engine == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); } @@ -965,7 +969,7 @@ FlutterEngineResult FlutterEngineUpdateSemanticsEnabled(FlutterEngine engine, } FlutterEngineResult FlutterEngineUpdateAccessibilityFeatures( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, FlutterAccessibilityFeature flags) { if (engine == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -978,7 +982,7 @@ FlutterEngineResult FlutterEngineUpdateAccessibilityFeatures( } FlutterEngineResult FlutterEngineDispatchSemanticsAction( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, uint64_t id, FlutterSemanticsAction action, const uint8_t* data, @@ -996,7 +1000,8 @@ FlutterEngineResult FlutterEngineDispatchSemanticsAction( return kSuccess; } -FlutterEngineResult FlutterEngineOnVsync(FlutterEngine engine, +FlutterEngineResult FlutterEngineOnVsync(FLUTTER_EMBEDDING_API(FlutterEngine) + engine, intptr_t baton, uint64_t frame_start_time_nanos, uint64_t frame_target_time_nanos) { @@ -1032,9 +1037,10 @@ void FlutterEngineTraceEventInstant(const char* name) { fml::tracing::TraceEventInstant0("flutter", name); } -FlutterEngineResult FlutterEnginePostRenderThreadTask(FlutterEngine engine, - VoidCallback callback, - void* baton) { +FlutterEngineResult FlutterEnginePostRenderThreadTask( + FLUTTER_EMBEDDING_API(FlutterEngine) engine, + VoidCallback callback, + void* baton) { if (engine == nullptr || callback == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); } @@ -1051,7 +1057,8 @@ uint64_t FlutterEngineGetCurrentTime() { return fml::TimePoint::Now().ToEpochDelta().ToNanoseconds(); } -FlutterEngineResult FlutterEngineRunTask(FlutterEngine engine, +FlutterEngineResult FlutterEngineRunTask(FLUTTER_EMBEDDING_API(FlutterEngine) + engine, const FlutterTask* task) { if (engine == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); diff --git a/shell/platform/embedder/embedder.h b/shell/platform/embedder/embedder.h index 2d6e4205e35d5..3952c7b05f5d0 100644 --- a/shell/platform/embedder/embedder.h +++ b/shell/platform/embedder/embedder.h @@ -17,6 +17,16 @@ extern "C" { #define FLUTTER_EXPORT #endif // FLUTTER_EXPORT +#ifdef FLUTTER_EMBEDDING_API_PREFIX +#define FLUTTER_EMBEDDING_CONCAT(a, b) a##b +#define FLUTTER_EMBEDDING_ADD_PREFIX(symbol, prefix) \ + FLUTTER_EMBEDDING_CONCAT(prefix, symbol) +#define FLUTTER_EMBEDDING_API(symbol) \ + FLUTTER_EMBEDDING_ADD_PREFIX(symbol, FLUTTER_EMBEDDING_API_PREFIX) +#else +#define FLUTTER_EMBEDDING_API(symbol) symbol +#endif + #define FLUTTER_ENGINE_VERSION 1 typedef enum { @@ -168,7 +178,7 @@ typedef enum { kFlutterTextDirectionLTR = 2, } FlutterTextDirection; -typedef struct _FlutterEngine* FlutterEngine; +typedef struct _FlutterEngine* FLUTTER_EMBEDDING_API(FlutterEngine); typedef struct { // horizontal scale factor @@ -689,25 +699,27 @@ FlutterEngineResult FlutterEngineRun(size_t version, const FlutterRendererConfig* config, const FlutterProjectArgs* args, void* user_data, - FlutterEngine* engine_out); + FLUTTER_EMBEDDING_API(FlutterEngine) * + engine_out); FLUTTER_EXPORT -FlutterEngineResult FlutterEngineShutdown(FlutterEngine engine); +FlutterEngineResult FlutterEngineShutdown(FLUTTER_EMBEDDING_API(FlutterEngine) + engine); FLUTTER_EXPORT FlutterEngineResult FlutterEngineSendWindowMetricsEvent( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, const FlutterWindowMetricsEvent* event); FLUTTER_EXPORT FlutterEngineResult FlutterEngineSendPointerEvent( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, const FlutterPointerEvent* events, size_t events_count); FLUTTER_EXPORT FlutterEngineResult FlutterEngineSendPlatformMessage( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, const FlutterPlatformMessage* message); // Creates a platform message response handle that allows the embedder to set a @@ -725,7 +737,7 @@ FlutterEngineResult FlutterEngineSendPlatformMessage( // call as the third argument. FLUTTER_EXPORT FlutterEngineResult FlutterPlatformMessageCreateResponseHandle( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, FlutterDataCallback data_callback, void* user_data, FlutterPlatformMessageResponseHandle** response_out); @@ -734,12 +746,12 @@ FlutterEngineResult FlutterPlatformMessageCreateResponseHandle( // |FlutterPlatformMessageCreateResponseHandle|. FLUTTER_EXPORT FlutterEngineResult FlutterPlatformMessageReleaseResponseHandle( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, FlutterPlatformMessageResponseHandle* response); FLUTTER_EXPORT FlutterEngineResult FlutterEngineSendPlatformMessageResponse( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, const FlutterPlatformMessageResponseHandle* handle, const uint8_t* data, size_t data_length); @@ -757,19 +769,19 @@ FlutterEngineResult __FlutterEngineFlushPendingTasksNow(); // |FlutterEngineMarkExternalTextureFrameAvailable|. FLUTTER_EXPORT FlutterEngineResult FlutterEngineRegisterExternalTexture( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, int64_t texture_identifier); // Unregister a previous texture registration. FLUTTER_EXPORT FlutterEngineResult FlutterEngineUnregisterExternalTexture( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, int64_t texture_identifier); // Mark that a new texture frame is available for a given texture identifier. FLUTTER_EXPORT FlutterEngineResult FlutterEngineMarkExternalTextureFrameAvailable( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, int64_t texture_identifier); // Enable or disable accessibility semantics. @@ -778,19 +790,20 @@ FlutterEngineResult FlutterEngineMarkExternalTextureFrameAvailable( // the |FlutterUpdateSemanticsNodeCallback| registered to // |update_semantics_node_callback| in |FlutterProjectArgs|; FLUTTER_EXPORT -FlutterEngineResult FlutterEngineUpdateSemanticsEnabled(FlutterEngine engine, - bool enabled); +FlutterEngineResult FlutterEngineUpdateSemanticsEnabled( + FLUTTER_EMBEDDING_API(FlutterEngine) engine, + bool enabled); // Sets additional accessibility features. FLUTTER_EXPORT FlutterEngineResult FlutterEngineUpdateAccessibilityFeatures( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, FlutterAccessibilityFeature features); // Dispatch a semantics action to the specified semantics node. FLUTTER_EXPORT FlutterEngineResult FlutterEngineDispatchSemanticsAction( - FlutterEngine engine, + FLUTTER_EMBEDDING_API(FlutterEngine) engine, uint64_t id, FlutterSemanticsAction action, const uint8_t* data, @@ -813,7 +826,8 @@ FlutterEngineResult FlutterEngineDispatchSemanticsAction( // // That frame timepoints are in nanoseconds. FLUTTER_EXPORT -FlutterEngineResult FlutterEngineOnVsync(FlutterEngine engine, +FlutterEngineResult FlutterEngineOnVsync(FLUTTER_EMBEDDING_API(FlutterEngine) + engine, intptr_t baton, uint64_t frame_start_time_nanos, uint64_t frame_target_time_nanos); @@ -848,9 +862,10 @@ void FlutterEngineTraceEventInstant(const char* name); // from any thread as long as a |FlutterEngineShutdown| on the specific engine // has not already been initiated. FLUTTER_EXPORT -FlutterEngineResult FlutterEnginePostRenderThreadTask(FlutterEngine engine, - VoidCallback callback, - void* callback_data); +FlutterEngineResult FlutterEnginePostRenderThreadTask( + FLUTTER_EMBEDDING_API(FlutterEngine) engine, + VoidCallback callback, + void* callback_data); // Get the current time in nanoseconds from the clock used by the flutter // engine. This is the system monotonic clock. @@ -862,7 +877,8 @@ uint64_t FlutterEngineGetCurrentTime(); // call must only be made at the target time specified in that callback. Running // the task before that time is undefined behavior. FLUTTER_EXPORT -FlutterEngineResult FlutterEngineRunTask(FlutterEngine engine, +FlutterEngineResult FlutterEngineRunTask(FLUTTER_EMBEDDING_API(FlutterEngine) + engine, const FlutterTask* task); #if defined(__cplusplus) diff --git a/shell/platform/glfw/BUILD.gn b/shell/platform/glfw/BUILD.gn index 95118a7cf6f70..3a2d254f746e1 100644 --- a/shell/platform/glfw/BUILD.gn +++ b/shell/platform/glfw/BUILD.gn @@ -54,7 +54,7 @@ source_set("flutter_glfw") { ":flutter_glfw_headers", "$flutter_root/shell/platform/common/cpp:common_cpp", "$flutter_root/shell/platform/common/cpp/client_wrapper:client_wrapper", - "$flutter_root/shell/platform/embedder:embedder", + "$flutter_root/shell/platform/embedder:embedder_with_symbol_prefix", "$flutter_root/shell/platform/glfw/client_wrapper:client_wrapper_glfw", "//build/secondary/third_party/glfw", "//third_party/rapidjson", diff --git a/shell/platform/glfw/flutter_glfw.cc b/shell/platform/glfw/flutter_glfw.cc index 438c93506357c..8995c732f6efe 100644 --- a/shell/platform/glfw/flutter_glfw.cc +++ b/shell/platform/glfw/flutter_glfw.cc @@ -59,7 +59,7 @@ struct FlutterDesktopWindowControllerState { UniqueGLFWwindowPtr(nullptr, glfwDestroyWindow); // The handle to the Flutter engine instance. - FlutterEngine engine; + EmbedderFlutterEngine engine; // The window handle given to API clients. std::unique_ptr window_wrapper; @@ -113,7 +113,7 @@ struct FlutterDesktopWindow { // Struct for storing state of a Flutter engine instance. struct FlutterDesktopEngineState { // The handle to the Flutter engine instance. - FlutterEngine engine; + EmbedderFlutterEngine engine; }; // State associated with the plugin registrar. @@ -128,7 +128,7 @@ struct FlutterDesktopPluginRegistrar { // State associated with the messenger used to communicate with the engine. struct FlutterDesktopMessenger { // The Flutter engine this messenger sends outgoing messages to. - FlutterEngine engine; + EmbedderFlutterEngine engine; // The message dispatcher for handling incoming messages. flutter::IncomingMessageDispatcher* dispatcher; @@ -493,7 +493,7 @@ static void GLFWErrorCallback(int error_code, const char* description) { // provided). // // Returns a caller-owned pointer to the engine. -static FlutterEngine RunFlutterEngine( +static EmbedderFlutterEngine RunFlutterEngine( GLFWwindow* window, const char* assets_path, const char* icu_data_path, @@ -535,7 +535,7 @@ static FlutterEngine RunFlutterEngine( args.command_line_argv = &argv[0]; args.platform_message_callback = GLFWOnFlutterPlatformMessage; args.custom_task_runners = custom_task_runners; - FlutterEngine engine = nullptr; + EmbedderFlutterEngine engine = nullptr; auto result = FlutterEngineRun(FLUTTER_ENGINE_VERSION, &config, &args, window, &engine); if (result != kSuccess || engine == nullptr) { From 7451b860e8e11de0ef4de761c1efafc6dca62393 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Tue, 16 Jul 2019 14:50:46 -0700 Subject: [PATCH 2/3] First round of review changes --- shell/platform/embedder/BUILD.gn | 5 ++-- shell/platform/embedder/embedder.cc | 36 +++++++++++------------ shell/platform/embedder/embedder.h | 44 ++++++++++++++--------------- 3 files changed, 42 insertions(+), 43 deletions(-) diff --git a/shell/platform/embedder/BUILD.gn b/shell/platform/embedder/BUILD.gn index c5251f09c682a..377060aa6262c 100644 --- a/shell/platform/embedder/BUILD.gn +++ b/shell/platform/embedder/BUILD.gn @@ -17,10 +17,9 @@ shell_gpu_configuration("embedder_gpu_configuration") { # Template for the embedder build. Used to allow building it multiple times with # different flags. template("embedder_source_set") { - template_target_name = target_name forward_variables_from(invoker, "*") - source_set(template_target_name) { + source_set(target_name) { sources = [ "embedder.cc", "embedder.h", @@ -75,7 +74,7 @@ embedder_source_set("embedder_with_symbol_prefix") { } config("embedder_prefix_config") { - defines = [ "FLUTTER_EMBEDDING_API_PREFIX=Embedder" ] + defines = [ "FLUTTER_API_SYMBOL_PREFIX=Embedder" ] } test_fixtures("fixtures") { diff --git a/shell/platform/embedder/embedder.cc b/shell/platform/embedder/embedder.cc index 5ba6c8f45edf6..9776f8c25b210 100644 --- a/shell/platform/embedder/embedder.cc +++ b/shell/platform/embedder/embedder.cc @@ -312,7 +312,7 @@ FlutterEngineResult FlutterEngineRun(size_t version, const FlutterRendererConfig* config, const FlutterProjectArgs* args, void* user_data, - FLUTTER_EMBEDDING_API(FlutterEngine) * + FLUTTER_API_SYMBOL(FlutterEngine) * engine_out) { // Step 0: Figure out arguments for shell creation. if (version != FLUTTER_ENGINE_VERSION) { @@ -648,12 +648,12 @@ FlutterEngineResult FlutterEngineRun(size_t version, } // Finally! Release the ownership of the embedder engine to the caller. - *engine_out = reinterpret_cast( + *engine_out = reinterpret_cast( embedder_engine.release()); return kSuccess; } -FlutterEngineResult FlutterEngineShutdown(FLUTTER_EMBEDDING_API(FlutterEngine) +FlutterEngineResult FlutterEngineShutdown(FLUTTER_API_SYMBOL(FlutterEngine) engine) { if (engine == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -665,7 +665,7 @@ FlutterEngineResult FlutterEngineShutdown(FLUTTER_EMBEDDING_API(FlutterEngine) } FlutterEngineResult FlutterEngineSendWindowMetricsEvent( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, const FlutterWindowMetricsEvent* flutter_metrics) { if (engine == nullptr || flutter_metrics == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -752,7 +752,7 @@ inline int64_t PointerDataButtonsForLegacyEvent( } FlutterEngineResult FlutterEngineSendPointerEvent( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, const FlutterPointerEvent* pointers, size_t events_count) { if (engine == nullptr || pointers == nullptr || events_count == 0) { @@ -811,7 +811,7 @@ FlutterEngineResult FlutterEngineSendPointerEvent( } FlutterEngineResult FlutterEngineSendPlatformMessage( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, const FlutterPlatformMessage* flutter_message) { if (engine == nullptr || flutter_message == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -844,7 +844,7 @@ FlutterEngineResult FlutterEngineSendPlatformMessage( } FlutterEngineResult FlutterPlatformMessageCreateResponseHandle( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, FlutterDataCallback data_callback, void* user_data, FlutterPlatformMessageResponseHandle** response_out) { @@ -875,7 +875,7 @@ FlutterEngineResult FlutterPlatformMessageCreateResponseHandle( } FlutterEngineResult FlutterPlatformMessageReleaseResponseHandle( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, FlutterPlatformMessageResponseHandle* response) { if (engine == nullptr || response == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -885,7 +885,7 @@ FlutterEngineResult FlutterPlatformMessageReleaseResponseHandle( } FlutterEngineResult FlutterEngineSendPlatformMessageResponse( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, const FlutterPlatformMessageResponseHandle* handle, const uint8_t* data, size_t data_length) { @@ -915,7 +915,7 @@ FlutterEngineResult __FlutterEngineFlushPendingTasksNow() { } FlutterEngineResult FlutterEngineRegisterExternalTexture( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, int64_t texture_identifier) { if (engine == nullptr || texture_identifier == 0) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -928,7 +928,7 @@ FlutterEngineResult FlutterEngineRegisterExternalTexture( } FlutterEngineResult FlutterEngineUnregisterExternalTexture( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, int64_t texture_identifier) { if (engine == nullptr || texture_identifier == 0) { return kInvalidArguments; @@ -943,7 +943,7 @@ FlutterEngineResult FlutterEngineUnregisterExternalTexture( } FlutterEngineResult FlutterEngineMarkExternalTextureFrameAvailable( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, int64_t texture_identifier) { if (engine == nullptr || texture_identifier == 0) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -956,7 +956,7 @@ FlutterEngineResult FlutterEngineMarkExternalTextureFrameAvailable( } FlutterEngineResult FlutterEngineUpdateSemanticsEnabled( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, bool enabled) { if (engine == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -969,7 +969,7 @@ FlutterEngineResult FlutterEngineUpdateSemanticsEnabled( } FlutterEngineResult FlutterEngineUpdateAccessibilityFeatures( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, FlutterAccessibilityFeature flags) { if (engine == nullptr) { return LOG_EMBEDDER_ERROR(kInvalidArguments); @@ -982,7 +982,7 @@ FlutterEngineResult FlutterEngineUpdateAccessibilityFeatures( } FlutterEngineResult FlutterEngineDispatchSemanticsAction( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, uint64_t id, FlutterSemanticsAction action, const uint8_t* data, @@ -1000,7 +1000,7 @@ FlutterEngineResult FlutterEngineDispatchSemanticsAction( return kSuccess; } -FlutterEngineResult FlutterEngineOnVsync(FLUTTER_EMBEDDING_API(FlutterEngine) +FlutterEngineResult FlutterEngineOnVsync(FLUTTER_API_SYMBOL(FlutterEngine) engine, intptr_t baton, uint64_t frame_start_time_nanos, @@ -1038,7 +1038,7 @@ void FlutterEngineTraceEventInstant(const char* name) { } FlutterEngineResult FlutterEnginePostRenderThreadTask( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, VoidCallback callback, void* baton) { if (engine == nullptr || callback == nullptr) { @@ -1057,7 +1057,7 @@ uint64_t FlutterEngineGetCurrentTime() { return fml::TimePoint::Now().ToEpochDelta().ToNanoseconds(); } -FlutterEngineResult FlutterEngineRunTask(FLUTTER_EMBEDDING_API(FlutterEngine) +FlutterEngineResult FlutterEngineRunTask(FLUTTER_API_SYMBOL(FlutterEngine) engine, const FlutterTask* task) { if (engine == nullptr) { diff --git a/shell/platform/embedder/embedder.h b/shell/platform/embedder/embedder.h index 3952c7b05f5d0..29a214300202a 100644 --- a/shell/platform/embedder/embedder.h +++ b/shell/platform/embedder/embedder.h @@ -17,14 +17,14 @@ extern "C" { #define FLUTTER_EXPORT #endif // FLUTTER_EXPORT -#ifdef FLUTTER_EMBEDDING_API_PREFIX +#ifdef FLUTTER_API_SYMBOL_PREFIX #define FLUTTER_EMBEDDING_CONCAT(a, b) a##b #define FLUTTER_EMBEDDING_ADD_PREFIX(symbol, prefix) \ FLUTTER_EMBEDDING_CONCAT(prefix, symbol) -#define FLUTTER_EMBEDDING_API(symbol) \ - FLUTTER_EMBEDDING_ADD_PREFIX(symbol, FLUTTER_EMBEDDING_API_PREFIX) +#define FLUTTER_API_SYMBOL(symbol) \ + FLUTTER_EMBEDDING_ADD_PREFIX(symbol, FLUTTER_API_SYMBOL_PREFIX) #else -#define FLUTTER_EMBEDDING_API(symbol) symbol +#define FLUTTER_API_SYMBOL(symbol) symbol #endif #define FLUTTER_ENGINE_VERSION 1 @@ -178,7 +178,7 @@ typedef enum { kFlutterTextDirectionLTR = 2, } FlutterTextDirection; -typedef struct _FlutterEngine* FLUTTER_EMBEDDING_API(FlutterEngine); +typedef struct _FlutterEngine* FLUTTER_API_SYMBOL(FlutterEngine); typedef struct { // horizontal scale factor @@ -699,27 +699,27 @@ FlutterEngineResult FlutterEngineRun(size_t version, const FlutterRendererConfig* config, const FlutterProjectArgs* args, void* user_data, - FLUTTER_EMBEDDING_API(FlutterEngine) * + FLUTTER_API_SYMBOL(FlutterEngine) * engine_out); FLUTTER_EXPORT -FlutterEngineResult FlutterEngineShutdown(FLUTTER_EMBEDDING_API(FlutterEngine) +FlutterEngineResult FlutterEngineShutdown(FLUTTER_API_SYMBOL(FlutterEngine) engine); FLUTTER_EXPORT FlutterEngineResult FlutterEngineSendWindowMetricsEvent( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, const FlutterWindowMetricsEvent* event); FLUTTER_EXPORT FlutterEngineResult FlutterEngineSendPointerEvent( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, const FlutterPointerEvent* events, size_t events_count); FLUTTER_EXPORT FlutterEngineResult FlutterEngineSendPlatformMessage( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, const FlutterPlatformMessage* message); // Creates a platform message response handle that allows the embedder to set a @@ -737,7 +737,7 @@ FlutterEngineResult FlutterEngineSendPlatformMessage( // call as the third argument. FLUTTER_EXPORT FlutterEngineResult FlutterPlatformMessageCreateResponseHandle( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, FlutterDataCallback data_callback, void* user_data, FlutterPlatformMessageResponseHandle** response_out); @@ -746,12 +746,12 @@ FlutterEngineResult FlutterPlatformMessageCreateResponseHandle( // |FlutterPlatformMessageCreateResponseHandle|. FLUTTER_EXPORT FlutterEngineResult FlutterPlatformMessageReleaseResponseHandle( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, FlutterPlatformMessageResponseHandle* response); FLUTTER_EXPORT FlutterEngineResult FlutterEngineSendPlatformMessageResponse( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, const FlutterPlatformMessageResponseHandle* handle, const uint8_t* data, size_t data_length); @@ -769,19 +769,19 @@ FlutterEngineResult __FlutterEngineFlushPendingTasksNow(); // |FlutterEngineMarkExternalTextureFrameAvailable|. FLUTTER_EXPORT FlutterEngineResult FlutterEngineRegisterExternalTexture( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, int64_t texture_identifier); // Unregister a previous texture registration. FLUTTER_EXPORT FlutterEngineResult FlutterEngineUnregisterExternalTexture( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, int64_t texture_identifier); // Mark that a new texture frame is available for a given texture identifier. FLUTTER_EXPORT FlutterEngineResult FlutterEngineMarkExternalTextureFrameAvailable( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, int64_t texture_identifier); // Enable or disable accessibility semantics. @@ -791,19 +791,19 @@ FlutterEngineResult FlutterEngineMarkExternalTextureFrameAvailable( // |update_semantics_node_callback| in |FlutterProjectArgs|; FLUTTER_EXPORT FlutterEngineResult FlutterEngineUpdateSemanticsEnabled( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, bool enabled); // Sets additional accessibility features. FLUTTER_EXPORT FlutterEngineResult FlutterEngineUpdateAccessibilityFeatures( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, FlutterAccessibilityFeature features); // Dispatch a semantics action to the specified semantics node. FLUTTER_EXPORT FlutterEngineResult FlutterEngineDispatchSemanticsAction( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, uint64_t id, FlutterSemanticsAction action, const uint8_t* data, @@ -826,7 +826,7 @@ FlutterEngineResult FlutterEngineDispatchSemanticsAction( // // That frame timepoints are in nanoseconds. FLUTTER_EXPORT -FlutterEngineResult FlutterEngineOnVsync(FLUTTER_EMBEDDING_API(FlutterEngine) +FlutterEngineResult FlutterEngineOnVsync(FLUTTER_API_SYMBOL(FlutterEngine) engine, intptr_t baton, uint64_t frame_start_time_nanos, @@ -863,7 +863,7 @@ void FlutterEngineTraceEventInstant(const char* name); // has not already been initiated. FLUTTER_EXPORT FlutterEngineResult FlutterEnginePostRenderThreadTask( - FLUTTER_EMBEDDING_API(FlutterEngine) engine, + FLUTTER_API_SYMBOL(FlutterEngine) engine, VoidCallback callback, void* callback_data); @@ -877,7 +877,7 @@ uint64_t FlutterEngineGetCurrentTime(); // call must only be made at the target time specified in that callback. Running // the task before that time is undefined behavior. FLUTTER_EXPORT -FlutterEngineResult FlutterEngineRunTask(FLUTTER_EMBEDDING_API(FlutterEngine) +FlutterEngineResult FlutterEngineRunTask(FLUTTER_API_SYMBOL(FlutterEngine) engine, const FlutterTask* task); From 5bb0075854154b09a22aec7fc975d6183dbab2a3 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 22 Jul 2019 15:29:59 -0700 Subject: [PATCH 3/3] Use macro in client code as well --- .../macos/framework/Source/FLEEngine.mm | 2 +- shell/platform/glfw/flutter_glfw.cc | 26 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FLEEngine.mm b/shell/platform/darwin/macos/framework/Source/FLEEngine.mm index 22bcec64aaf93..da811c0a06c45 100644 --- a/shell/platform/darwin/macos/framework/Source/FLEEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FLEEngine.mm @@ -123,7 +123,7 @@ static void OnPlatformMessage(const FlutterPlatformMessage* message, FLEEngine* @implementation FLEEngine { // The embedding-API-level engine object. - EmbedderFlutterEngine _engine; + FLUTTER_API_SYMBOL(FlutterEngine) _engine; // The project being run by this engine. FLEDartProject* _project; diff --git a/shell/platform/glfw/flutter_glfw.cc b/shell/platform/glfw/flutter_glfw.cc index 8995c732f6efe..5913b50517513 100644 --- a/shell/platform/glfw/flutter_glfw.cc +++ b/shell/platform/glfw/flutter_glfw.cc @@ -4,14 +4,14 @@ #include "flutter/shell/platform/glfw/public/flutter_glfw.h" +#include #include + #include #include #include #include -#include - #include "flutter/shell/platform/common/cpp/client_wrapper/include/flutter/plugin_registrar.h" #include "flutter/shell/platform/common/cpp/incoming_message_dispatcher.h" #include "flutter/shell/platform/embedder/embedder.h" @@ -59,7 +59,7 @@ struct FlutterDesktopWindowControllerState { UniqueGLFWwindowPtr(nullptr, glfwDestroyWindow); // The handle to the Flutter engine instance. - EmbedderFlutterEngine engine; + FLUTTER_API_SYMBOL(FlutterEngine) engine; // The window handle given to API clients. std::unique_ptr window_wrapper; @@ -113,7 +113,7 @@ struct FlutterDesktopWindow { // Struct for storing state of a Flutter engine instance. struct FlutterDesktopEngineState { // The handle to the Flutter engine instance. - EmbedderFlutterEngine engine; + FLUTTER_API_SYMBOL(FlutterEngine) engine; }; // State associated with the plugin registrar. @@ -128,7 +128,7 @@ struct FlutterDesktopPluginRegistrar { // State associated with the messenger used to communicate with the engine. struct FlutterDesktopMessenger { // The Flutter engine this messenger sends outgoing messages to. - EmbedderFlutterEngine engine; + FLUTTER_API_SYMBOL(FlutterEngine) engine; // The message dispatcher for handling incoming messages. flutter::IncomingMessageDispatcher* dispatcher; @@ -493,13 +493,13 @@ static void GLFWErrorCallback(int error_code, const char* description) { // provided). // // Returns a caller-owned pointer to the engine. -static EmbedderFlutterEngine RunFlutterEngine( - GLFWwindow* window, - const char* assets_path, - const char* icu_data_path, - const char** arguments, - size_t arguments_count, - const FlutterCustomTaskRunners* custom_task_runners) { +static FLUTTER_API_SYMBOL(FlutterEngine) + RunFlutterEngine(GLFWwindow* window, + const char* assets_path, + const char* icu_data_path, + const char** arguments, + size_t arguments_count, + const FlutterCustomTaskRunners* custom_task_runners) { // FlutterProjectArgs is expecting a full argv, so when processing it for // flags the first item is treated as the executable and ignored. Add a dummy // value so that all provided arguments are used. @@ -535,7 +535,7 @@ static EmbedderFlutterEngine RunFlutterEngine( args.command_line_argv = &argv[0]; args.platform_message_callback = GLFWOnFlutterPlatformMessage; args.custom_task_runners = custom_task_runners; - EmbedderFlutterEngine engine = nullptr; + FLUTTER_API_SYMBOL(FlutterEngine) engine = nullptr; auto result = FlutterEngineRun(FLUTTER_ENGINE_VERSION, &config, &args, window, &engine); if (result != kSuccess || engine == nullptr) {