Flutter Engine
 
Loading...
Searching...
No Matches
flutter::EmbedderEngine Class Reference

#include <embedder_engine.h>

Public Member Functions

 EmbedderEngine (std::unique_ptr< EmbedderThreadHost > thread_host, const TaskRunners &task_runners, const Settings &settings, RunConfiguration run_configuration, const Shell::CreateCallback< PlatformView > &on_create_platform_view, const Shell::CreateCallback< Rasterizer > &on_create_rasterizer, std::unique_ptr< EmbedderExternalTextureResolver > external_texture_resolver)
 
 ~EmbedderEngine ()
 
bool LaunchShell ()
 
bool CollectShell ()
 
void CollectThreadHost ()
 
const TaskRunnersGetTaskRunners () const
 
bool NotifyCreated ()
 
bool NotifyDestroyed ()
 
bool RunRootIsolate ()
 
bool IsValid () const
 
bool SetViewportMetrics (int64_t view_id, const flutter::ViewportMetrics &metrics)
 
bool DispatchPointerDataPacket (std::unique_ptr< flutter::PointerDataPacket > packet)
 
bool SendPlatformMessage (std::unique_ptr< PlatformMessage > message)
 
bool RegisterTexture (int64_t texture)
 
bool UnregisterTexture (int64_t texture)
 
bool MarkTextureFrameAvailable (int64_t texture)
 
bool SetSemanticsEnabled (bool enabled)
 
bool SetAccessibilityFeatures (int32_t flags)
 
bool DispatchSemanticsAction (int64_t view_id, int node_id, flutter::SemanticsAction action, fml::MallocMapping args)
 
bool OnVsyncEvent (intptr_t baton, fml::TimePoint frame_start_time, fml::TimePoint frame_target_time)
 
bool ReloadSystemFonts ()
 
bool PostRenderThreadTask (const fml::closure &task)
 
bool RunTask (const FlutterTask *task)
 
bool PostTaskOnEngineManagedNativeThreads (const std::function< void(FlutterNativeThreadType)> &closure) const
 
bool ScheduleFrame ()
 
ShellGetShell ()
 

Detailed Description

Definition at line 23 of file embedder_engine.h.

Constructor & Destructor Documentation

◆ EmbedderEngine()

flutter::EmbedderEngine::EmbedderEngine ( std::unique_ptr< EmbedderThreadHost thread_host,
const TaskRunners task_runners,
const Settings settings,
RunConfiguration  run_configuration,
const Shell::CreateCallback< PlatformView > &  on_create_platform_view,
const Shell::CreateCallback< Rasterizer > &  on_create_rasterizer,
std::unique_ptr< EmbedderExternalTextureResolver external_texture_resolver 
)

Definition at line 24 of file embedder_engine.cc.

32 : thread_host_(std::move(thread_host)),
33 task_runners_(task_runners),
34 run_configuration_(std::move(run_configuration)),
35 shell_args_(std::make_unique<ShellArgs>(settings,
36 on_create_platform_view,
37 on_create_rasterizer)),
38 external_texture_resolver_(std::move(external_texture_resolver)) {}

◆ ~EmbedderEngine()

flutter::EmbedderEngine::~EmbedderEngine ( )
default

Member Function Documentation

◆ CollectShell()

bool flutter::EmbedderEngine::CollectShell ( )

Definition at line 63 of file embedder_engine.cc.

63 {
64 shell_.reset();
65 return IsValid();
66}

References IsValid().

◆ CollectThreadHost()

void flutter::EmbedderEngine::CollectThreadHost ( )

Definition at line 68 of file embedder_engine.cc.

68 {
69 if (!thread_host_) {
70 return;
71 }
72
73 // Once the collected, EmbedderThreadHost::RunnerIsValid will return false for
74 // all runners belonging to this thread host. This must be done with UI task
75 // runner blocked to prevent possible raciness that could happen when
76 // destroying the thread host in the middle of UI task runner execution. This
77 // is not an issue for other runners, because raster task runner should not
78 // have anything scheduled after engine shutdown and platform task runner is
79 // where this method is called from.
80 if (thread_host_->GetTaskRunners().GetUITaskRunner() &&
81 !thread_host_->GetTaskRunners()
82 .GetUITaskRunner()
83 ->RunsTasksOnCurrentThread()) {
84 fml::AutoResetWaitableEvent ui_thread_running;
85 fml::AutoResetWaitableEvent ui_thread_block;
86 fml::AutoResetWaitableEvent ui_thread_finished;
87
88 thread_host_->GetTaskRunners().GetUITaskRunner()->PostTask([&] {
89 ui_thread_running.Signal();
90 ui_thread_block.Wait();
91 ui_thread_finished.Signal();
92 });
93
94 // Wait until the task is running on the UI thread.
95 ui_thread_running.Wait();
96 thread_host_->InvalidateActiveRunners();
97 ui_thread_block.Signal();
98
99 // Needed to keep ui_thread_block in scope until the UI thread execution
100 // finishes.
101 ui_thread_finished.Wait();
102 } else {
103 thread_host_->InvalidateActiveRunners();
104 }
105 thread_host_.reset();
106}

References fml::AutoResetWaitableEvent::Signal(), and fml::AutoResetWaitableEvent::Wait().

◆ DispatchPointerDataPacket()

bool flutter::EmbedderEngine::DispatchPointerDataPacket ( std::unique_ptr< flutter::PointerDataPacket packet)

Definition at line 158 of file embedder_engine.cc.

159 {
160 if (!IsValid() || !packet) {
161 return false;
162 }
163
164 auto platform_view = shell_->GetPlatformView();
165 if (!platform_view) {
166 return false;
167 }
168
169 platform_view->DispatchPointerDataPacket(std::move(packet));
170 return true;
171}
std::unique_ptr< flutter::PlatformViewIOS > platform_view

References IsValid(), and platform_view.

◆ DispatchSemanticsAction()

bool flutter::EmbedderEngine::DispatchSemanticsAction ( int64_t  view_id,
int  node_id,
flutter::SemanticsAction  action,
fml::MallocMapping  args 
)

Definition at line 238 of file embedder_engine.cc.

241 {
242 if (!IsValid()) {
243 return false;
244 }
245 auto platform_view = shell_->GetPlatformView();
246 if (!platform_view) {
247 return false;
248 }
249 platform_view->DispatchSemanticsAction(view_id, node_id, action,
250 std::move(args));
251 return true;
252}
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
G_BEGIN_DECLS FlutterViewId view_id

References action, args, IsValid(), platform_view, and view_id.

Referenced by FlutterEngineSendSemanticsAction().

◆ GetShell()

◆ GetTaskRunners()

const TaskRunners & flutter::EmbedderEngine::GetTaskRunners ( ) const

Definition at line 120 of file embedder_engine.cc.

120 {
121 return task_runners_;
122}

Referenced by flutter::testing::TEST_F().

◆ IsValid()

◆ LaunchShell()

bool flutter::EmbedderEngine::LaunchShell ( )

Definition at line 42 of file embedder_engine.cc.

42 {
43 if (!shell_args_) {
44 FML_DLOG(ERROR) << "Invalid shell arguments.";
45 return false;
46 }
47
48 if (shell_) {
49 FML_DLOG(ERROR) << "Shell already initialized";
50 }
51
52 shell_ = Shell::Create(
53 flutter::PlatformData(), task_runners_, shell_args_->settings,
54 shell_args_->on_create_platform_view, shell_args_->on_create_rasterizer);
55
56 // Reset the args no matter what. They will never be used to initialize a
57 // shell again.
58 shell_args_.reset();
59
60 return IsValid();
61}
static std::unique_ptr< Shell > Create(const PlatformData &platform_data, const TaskRunners &task_runners, Settings settings, const CreateCallback< PlatformView > &on_create_platform_view, const CreateCallback< Rasterizer > &on_create_rasterizer, bool is_gpu_disabled=false)
Creates a shell instance using the provided settings. The callbacks to create the various shell subco...
Definition shell.cc:221
#define FML_DLOG(severity)
Definition logging.h:121

References flutter::Shell::Create(), FML_DLOG, and IsValid().

◆ MarkTextureFrameAvailable()

bool flutter::EmbedderEngine::MarkTextureFrameAvailable ( int64_t  texture)

Definition at line 205 of file embedder_engine.cc.

205 {
206 if (!IsValid()) {
207 return false;
208 }
209 shell_->GetPlatformView()->MarkTextureFrameAvailable(texture);
210 return true;
211}
FlTexture * texture

References IsValid(), and texture.

◆ NotifyCreated()

bool flutter::EmbedderEngine::NotifyCreated ( )

Definition at line 124 of file embedder_engine.cc.

124 {
125 if (!IsValid()) {
126 return false;
127 }
128
129 shell_->GetPlatformView()->NotifyCreated();
130 return true;
131}

References IsValid().

◆ NotifyDestroyed()

bool flutter::EmbedderEngine::NotifyDestroyed ( )

Definition at line 133 of file embedder_engine.cc.

133 {
134 if (!IsValid()) {
135 return false;
136 }
137
138 shell_->GetPlatformView()->NotifyDestroyed();
139
140 return true;
141}

References IsValid().

Referenced by FlutterEngineDeinitialize().

◆ OnVsyncEvent()

bool flutter::EmbedderEngine::OnVsyncEvent ( intptr_t  baton,
fml::TimePoint  frame_start_time,
fml::TimePoint  frame_target_time 
)

Definition at line 254 of file embedder_engine.cc.

256 {
257 if (!IsValid()) {
258 return false;
259 }
260
262 task_runners_, baton, frame_start_time, frame_target_time);
263}
static bool OnEmbedderVsync(const flutter::TaskRunners &task_runners, intptr_t baton, fml::TimePoint frame_start_time, fml::TimePoint frame_target_time)

References IsValid(), and flutter::VsyncWaiterEmbedder::OnEmbedderVsync().

◆ PostRenderThreadTask()

bool flutter::EmbedderEngine::PostRenderThreadTask ( const fml::closure task)

Definition at line 273 of file embedder_engine.cc.

273 {
274 if (!IsValid()) {
275 return false;
276 }
277
278 shell_->GetTaskRunners().GetRasterTaskRunner()->PostTask(task);
279 return true;
280}

References IsValid().

◆ PostTaskOnEngineManagedNativeThreads()

bool flutter::EmbedderEngine::PostTaskOnEngineManagedNativeThreads ( const std::function< void(FlutterNativeThreadType)> &  closure) const

Definition at line 305 of file embedder_engine.cc.

306 {
307 if (!IsValid() || closure == nullptr) {
308 return false;
309 }
310
311 const auto trampoline = [closure](
313 const fml::RefPtr<fml::TaskRunner>& runner) {
314 runner->PostTask([closure, type] { closure(type); });
315 };
316
317 // Post the task to all thread host threads.
318 const auto& task_runners = shell_->GetTaskRunners();
320 task_runners.GetRasterTaskRunner());
321 trampoline(kFlutterNativeThreadTypeWorker, task_runners.GetIOTaskRunner());
322 trampoline(kFlutterNativeThreadTypeUI, task_runners.GetUITaskRunner());
324 task_runners.GetPlatformTaskRunner());
325
326 // Post the task to all worker threads.
327 auto vm = shell_->GetDartVM();
328 vm->GetConcurrentMessageLoop()->PostTaskToAllWorkers(
329 [closure]() { closure(kFlutterNativeThreadTypeWorker); });
330
331 return true;
332}
GLenum type
FlutterNativeThreadType
Definition embedder.h:2404
@ kFlutterNativeThreadTypeWorker
Definition embedder.h:2418
@ kFlutterNativeThreadTypeUI
Definition embedder.h:2415
@ kFlutterNativeThreadTypePlatform
Definition embedder.h:2408
@ kFlutterNativeThreadTypeRender
Definition embedder.h:2412
std::function< void()> closure
Definition closure.h:14

References IsValid(), kFlutterNativeThreadTypePlatform, kFlutterNativeThreadTypeRender, kFlutterNativeThreadTypeUI, kFlutterNativeThreadTypeWorker, and type.

◆ RegisterTexture()

bool flutter::EmbedderEngine::RegisterTexture ( int64_t  texture)

Definition at line 188 of file embedder_engine.cc.

188 {
189 if (!IsValid()) {
190 return false;
191 }
192 shell_->GetPlatformView()->RegisterTexture(
193 external_texture_resolver_->ResolveExternalTexture(texture));
194 return true;
195}

References IsValid(), and texture.

◆ ReloadSystemFonts()

bool flutter::EmbedderEngine::ReloadSystemFonts ( )

Definition at line 265 of file embedder_engine.cc.

265 {
266 if (!IsValid()) {
267 return false;
268 }
269
270 return shell_->ReloadSystemFonts();
271}

References IsValid().

◆ RunRootIsolate()

bool flutter::EmbedderEngine::RunRootIsolate ( )

Definition at line 108 of file embedder_engine.cc.

108 {
109 if (!IsValid() || !run_configuration_.IsValid()) {
110 return false;
111 }
112 shell_->RunEngine(std::move(run_configuration_));
113 return true;
114}
bool IsValid() const
A valid run configuration only guarantees that the engine should be able to find the assets and the i...

References flutter::RunConfiguration::IsValid(), and IsValid().

◆ RunTask()

bool flutter::EmbedderEngine::RunTask ( const FlutterTask task)

Definition at line 282 of file embedder_engine.cc.

282 {
283 // The shell doesn't need to be running or valid for access to the thread
284 // host. This is why there is no `IsValid` check here. This allows embedders
285 // to perform custom task runner interop before the shell is running.
286 if (task == nullptr) {
287 return false;
288 }
289 auto result = thread_host_->PostTask(reinterpret_cast<intptr_t>(task->runner),
290 task->task);
291 // If the UI and platform threads are separate, the microtask queue is
292 // flushed through MessageLoopTaskQueues observer.
293 // If the UI and platform threads are merged, the UI task runner has no
294 // associated task queue, and microtasks need to be flushed manually
295 // after running the task.
296 if (result && shell_ && task_runners_.GetUITaskRunner() &&
297 task_runners_.GetUITaskRunner()->RunsTasksOnCurrentThread() &&
298 !task_runners_.GetUITaskRunner()->GetTaskQueueId().is_valid()) {
299 shell_->FlushMicrotaskQueue();
300 }
301
302 return result;
303}
fml::RefPtr< fml::TaskRunner > GetUITaskRunner() const
bool is_valid() const
virtual bool RunsTasksOnCurrentThread()
virtual TaskQueueId GetTaskQueueId()
FlutterTaskRunner runner
Definition embedder.h:1849
uint64_t task
Definition embedder.h:1850

References fml::TaskRunner::GetTaskQueueId(), flutter::TaskRunners::GetUITaskRunner(), fml::TaskQueueId::is_valid(), FlutterTask::runner, fml::TaskRunner::RunsTasksOnCurrentThread(), and FlutterTask::task.

◆ ScheduleFrame()

bool flutter::EmbedderEngine::ScheduleFrame ( )

Definition at line 334 of file embedder_engine.cc.

334 {
335 if (!IsValid()) {
336 return false;
337 }
338
339 auto platform_view = shell_->GetPlatformView();
340 if (!platform_view) {
341 return false;
342 }
343 platform_view->ScheduleFrame();
344 return true;
345}

References IsValid(), and platform_view.

◆ SendPlatformMessage()

bool flutter::EmbedderEngine::SendPlatformMessage ( std::unique_ptr< PlatformMessage message)

Definition at line 173 of file embedder_engine.cc.

174 {
175 if (!IsValid() || !message) {
176 return false;
177 }
178
179 auto platform_view = shell_->GetPlatformView();
180 if (!platform_view) {
181 return false;
182 }
183
184 platform_view->DispatchPlatformMessage(std::move(message));
185 return true;
186}
G_BEGIN_DECLS GBytes * message

References IsValid(), message, and platform_view.

◆ SetAccessibilityFeatures()

bool flutter::EmbedderEngine::SetAccessibilityFeatures ( int32_t  flags)

Definition at line 226 of file embedder_engine.cc.

226 {
227 if (!IsValid()) {
228 return false;
229 }
230 auto platform_view = shell_->GetPlatformView();
231 if (!platform_view) {
232 return false;
233 }
234 platform_view->SetAccessibilityFeatures(flags);
235 return true;
236}

References IsValid(), and platform_view.

◆ SetSemanticsEnabled()

bool flutter::EmbedderEngine::SetSemanticsEnabled ( bool  enabled)

Definition at line 213 of file embedder_engine.cc.

213 {
214 if (!IsValid()) {
215 return false;
216 }
217
218 auto platform_view = shell_->GetPlatformView();
219 if (!platform_view) {
220 return false;
221 }
222 platform_view->SetSemanticsEnabled(enabled);
223 return true;
224}

References IsValid(), and platform_view.

◆ SetViewportMetrics()

bool flutter::EmbedderEngine::SetViewportMetrics ( int64_t  view_id,
const flutter::ViewportMetrics metrics 
)

Definition at line 143 of file embedder_engine.cc.

145 {
146 if (!IsValid()) {
147 return false;
148 }
149
150 auto platform_view = shell_->GetPlatformView();
151 if (!platform_view) {
152 return false;
153 }
154 platform_view->SetViewportMetrics(view_id, metrics);
155 return true;
156}

References IsValid(), platform_view, and view_id.

◆ UnregisterTexture()

bool flutter::EmbedderEngine::UnregisterTexture ( int64_t  texture)

Definition at line 197 of file embedder_engine.cc.

197 {
198 if (!IsValid()) {
199 return false;
200 }
201 shell_->GetPlatformView()->UnregisterTexture(texture);
202 return true;
203}

References IsValid(), and texture.


The documentation for this class was generated from the following files: