Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
flutter_engine.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "include/flutter/flutter_engine.h"
6
7#include <algorithm>
8#include <iostream>
9
11#include "flutter_windows.h"
12
13namespace flutter {
14
16 FlutterDesktopEngineProperties c_engine_properties = {};
17 c_engine_properties.assets_path = project.assets_path().c_str();
18 c_engine_properties.icu_data_path = project.icu_data_path().c_str();
19 c_engine_properties.aot_library_path = project.aot_library_path().c_str();
20 c_engine_properties.dart_entrypoint = project.dart_entrypoint().c_str();
21 c_engine_properties.gpu_preference =
22 static_cast<FlutterDesktopGpuPreference>(project.gpu_preference());
23 c_engine_properties.ui_thread_policy =
24 static_cast<FlutterDesktopUIThreadPolicy>(project.ui_thread_policy());
25 c_engine_properties.accessibility_mode =
27 project.accessibility_mode());
28 c_engine_properties.impeller_switch =
29 static_cast<FlutterDesktopImpellerSwitch>(project.impeller_switch());
30
31 const std::vector<std::string>& entrypoint_args =
33 std::vector<const char*> entrypoint_argv;
34 std::transform(
35 entrypoint_args.begin(), entrypoint_args.end(),
36 std::back_inserter(entrypoint_argv),
37 [](const std::string& arg) -> const char* { return arg.c_str(); });
38
39 c_engine_properties.dart_entrypoint_argc =
40 static_cast<int>(entrypoint_argv.size());
41 c_engine_properties.dart_entrypoint_argv =
42 entrypoint_argv.empty() ? nullptr : entrypoint_argv.data();
43
44 engine_ = FlutterDesktopEngineCreate(&c_engine_properties);
45
46 auto core_messenger = FlutterDesktopEngineGetMessenger(engine_);
47 messenger_ = std::make_unique<BinaryMessengerImpl>(core_messenger);
48}
49
51 ShutDown();
52}
53
55 return Run(nullptr);
56}
57
58bool FlutterEngine::Run(const char* entry_point) {
59 if (!engine_) {
60 std::cerr << "Cannot run an engine that failed creation." << std::endl;
61 return false;
62 }
63 if (run_succeeded_) {
64 std::cerr << "Cannot run an engine more than once." << std::endl;
65 return false;
66 }
67 bool run_succeeded = FlutterDesktopEngineRun(engine_, entry_point);
68 if (!run_succeeded) {
69 std::cerr << "Failed to start engine." << std::endl;
70 }
71 run_succeeded_ = true;
72 return run_succeeded;
73}
74
76 if (engine_ && owns_engine_) {
78 }
79 engine_ = nullptr;
80}
81
82std::chrono::nanoseconds FlutterEngine::ProcessMessages() {
83 return std::chrono::nanoseconds(FlutterDesktopEngineProcessMessages(engine_));
84}
85
89
91 const std::string& plugin_name) {
92 if (!engine_) {
93 std::cerr << "Cannot get plugin registrar on an engine that isn't running; "
94 "call Run first."
95 << std::endl;
96 return nullptr;
97 }
98 return FlutterDesktopEngineGetPluginRegistrar(engine_, plugin_name.c_str());
99}
100
102 next_frame_callback_ = std::move(callback);
104 engine_,
105 [](void* user_data) {
106 FlutterEngine* self = static_cast<FlutterEngine*>(user_data);
107 self->next_frame_callback_();
108 self->next_frame_callback_ = nullptr;
109 },
110 this);
111}
112
114 if (!engine_) {
115 std::cerr
116 << "Cannot check platform thread on an engine that failed creation."
117 << std::endl;
118 return false;
119 }
121}
122
124 if (!callback) {
125 return;
126 }
128 engine_,
129 /*callback=*/
130 [](void* user_data) {
131 std::unique_ptr<std::function<void()>> cb{
132 static_cast<std::function<void()>*>(user_data)};
133 (*cb)();
134 },
135 /*on_cancel=*/
136 [](void* user_data) {
137 delete static_cast<std::function<void()>*>(user_data);
138 },
139 /*user_data=*/new std::function<void()>(std::move(callback)));
140}
141
143 HWND hwnd,
145 WPARAM wparam,
146 LPARAM lparam) {
147 LRESULT result;
149 engine_, hwnd, message, wparam, lparam, &result)) {
150 return result;
151 }
152 return std::nullopt;
153}
154
155FlutterDesktopEngineRef FlutterEngine::RelinquishEngine() {
156 owns_engine_ = false;
157 return engine_;
158}
159
160} // namespace flutter
const std::vector< std::string > & dart_entrypoint_arguments() const
const std::string & dart_entrypoint() const
AccessibilityMode accessibility_mode() const
UIThreadPolicy ui_thread_policy() const
GpuPreference gpu_preference() const
ImpellerSwitch impeller_switch() const
std::chrono::nanoseconds ProcessMessages()
std::optional< LRESULT > ProcessExternalWindowMessage(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
void SetNextFrameCallback(std::function< void()> callback)
void PostPlatformThreadTask(std::function< void()> callback)
FlutterDesktopPluginRegistrarRef GetRegistrarForPlugin(const std::string &plugin_name) override
const char * message
FlutterDesktopUIThreadPolicy
FlutterDesktopGpuPreference
FlutterDesktopImpellerSwitch
FlutterDesktopAccessibilityMode
FlutterDesktopBinaryReply callback
FlutterDesktopAccessibilityMode accessibility_mode
FlutterDesktopImpellerSwitch impeller_switch
FlutterDesktopUIThreadPolicy ui_thread_policy
FlutterDesktopGpuPreference gpu_preference
FlutterDesktopEngineRef FlutterDesktopEngineCreate(const FlutterDesktopEngineProperties *engine_properties)
void FlutterDesktopEngineReloadSystemFonts(FlutterDesktopEngineRef engine)
bool FlutterDesktopEngineProcessExternalWindowMessage(FlutterDesktopEngineRef engine, HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, LRESULT *result)
FlutterDesktopPluginRegistrarRef FlutterDesktopEngineGetPluginRegistrar(FlutterDesktopEngineRef engine, const char *plugin_name)
bool FlutterDesktopEngineIsPlatformThread(FlutterDesktopEngineRef engine)
bool FlutterDesktopEngineDestroy(FlutterDesktopEngineRef engine_ref)
void FlutterDesktopEnginePostPlatformThreadTask(FlutterDesktopEngineRef engine, VoidCallback callback, VoidCallback on_cancel, void *user_data)
uint64_t FlutterDesktopEngineProcessMessages(FlutterDesktopEngineRef engine)
FlutterDesktopMessengerRef FlutterDesktopEngineGetMessenger(FlutterDesktopEngineRef engine)
void FlutterDesktopEngineSetNextFrameCallback(FlutterDesktopEngineRef engine, VoidCallback callback, void *user_data)
bool FlutterDesktopEngineRun(FlutterDesktopEngineRef engine, const char *entry_point)
LONG_PTR LRESULT
unsigned int UINT
LONG_PTR LPARAM
UINT_PTR WPARAM