Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 43fe73d

Browse files
committed
Remove FlTaskExecutor
1 parent 2e7b872 commit 43fe73d

File tree

4 files changed

+39
-19
lines changed

4 files changed

+39
-19
lines changed

shell/platform/linux/fl_engine.cc

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -350,15 +350,10 @@ G_MODULE_EXPORT FlEngine* fl_engine_new_headless(FlDartProject* project) {
350350
return fl_engine_new(project, FL_RENDERER(renderer));
351351
}
352352

353-
static void fl_engine_execute_task(FlutterTask task, gpointer user_data) {
354-
FlEngine* self = FL_ENGINE(user_data);
355-
self->embedder_api.RunTask(self->engine, &task);
356-
}
357-
358353
gboolean fl_engine_start(FlEngine* self, GError** error) {
359354
g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
360355

361-
self->task_runner = fl_task_runner_new(fl_engine_execute_task, self);
356+
self->task_runner = fl_task_runner_new(self);
362357

363358
FlutterRendererConfig config = {};
364359
config.type = kOpenGL;
@@ -677,3 +672,7 @@ FlTaskRunner* fl_engine_get_task_runner(FlEngine* self) {
677672
g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
678673
return self->task_runner;
679674
}
675+
676+
void fl_engine_execute_task(FlEngine* self, FlutterTask* task) {
677+
self->embedder_api.RunTask(self->engine, task);
678+
}

shell/platform/linux/fl_engine_private.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,15 @@ GBytes* fl_engine_send_platform_message_finish(FlEngine* engine,
236236
*/
237237
FlTaskRunner* fl_engine_get_task_runner(FlEngine* engine);
238238

239+
/**
240+
* fl_engine_execute_task:
241+
* @engine: an #FlEngine.
242+
* @task: a #FlutterTask to execute.
243+
*
244+
* Executes given Flutter task.
245+
*/
246+
void fl_engine_execute_task(FlEngine* engine, FlutterTask* task);
247+
239248
G_END_DECLS
240249

241250
#endif // FLUTTER_SHELL_PLATFORM_LINUX_FL_ENGINE_PRIVATE_H_

shell/platform/linux/fl_task_runner.cc

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
// found in the LICENSE file.
44

55
#include "flutter/shell/platform/linux/fl_task_runner.h"
6+
#include "flutter/shell/platform/linux/fl_engine_private.h"
67

78
static constexpr int kMicrosecondsPerNanosecond = 1000;
89
static constexpr int kMillisecondsPerMicrosecond = 1000;
910

1011
struct _FlTaskRunner {
1112
GObject parent_instance;
1213

13-
FlTaskExecutor executor;
14-
gpointer executor_user_data;
14+
FlEngine* engine;
1515

1616
GMutex mutex;
1717
GCond cond;
@@ -42,13 +42,24 @@ static void fl_task_runner_init(FlTaskRunner* self) {
4242
g_cond_init(&self->cond);
4343
}
4444

45+
static void engine_weak_notify_cb(gpointer user_data,
46+
GObject* where_the_object_was) {
47+
FlTaskRunner* self = FL_TASK_RUNNER(user_data);
48+
self->engine = nullptr;
49+
}
50+
4551
void fl_task_runner_dispose(GObject* object) {
4652
FlTaskRunner* self = FL_TASK_RUNNER(object);
4753

4854
// this should never happen because the task runner is retained while blocking
4955
// main thread
5056
g_assert(!self->blocking_main_thread);
5157

58+
if (self->engine != nullptr) {
59+
g_object_weak_unref(G_OBJECT(self->engine), engine_weak_notify_cb, self);
60+
self->engine = nullptr;
61+
}
62+
5263
g_mutex_clear(&self->mutex);
5364
g_cond_clear(&self->cond);
5465

@@ -60,12 +71,11 @@ void fl_task_runner_dispose(GObject* object) {
6071
G_OBJECT_CLASS(fl_task_runner_parent_class)->dispose(object);
6172
}
6273

63-
FlTaskRunner* fl_task_runner_new(FlTaskExecutor executor,
64-
gpointer executor_user_data) {
74+
FlTaskRunner* fl_task_runner_new(FlEngine* engine) {
6575
FlTaskRunner* res =
6676
FL_TASK_RUNNER(g_object_new(fl_task_runner_get_type(), nullptr));
67-
res->executor = executor;
68-
res->executor_user_data = executor_user_data;
77+
res->engine = engine;
78+
g_object_weak_ref(G_OBJECT(engine), engine_weak_notify_cb, res);
6979
return res;
7080
}
7181

@@ -91,11 +101,13 @@ static void fl_task_runner_process_expired_tasks_locked(FlTaskRunner* self) {
91101

92102
g_mutex_unlock(&self->mutex);
93103

94-
l = expired_tasks;
95-
while (l != nullptr && !self->stopped) {
96-
FlTaskRunnerTask* task = static_cast<FlTaskRunnerTask*>(l->data);
97-
self->executor(task->task, self->executor_user_data);
98-
l = l->next;
104+
if (self->engine) {
105+
l = expired_tasks;
106+
while (l != nullptr && !self->stopped) {
107+
FlTaskRunnerTask* task = static_cast<FlTaskRunnerTask*>(l->data);
108+
fl_engine_execute_task(self->engine, &task->task);
109+
l = l->next;
110+
}
99111
}
100112

101113
g_list_free_full(expired_tasks, g_free);

shell/platform/linux/fl_task_runner.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <glib-object.h>
99

1010
#include "flutter/shell/platform/embedder/embedder.h"
11+
#include "flutter/shell/platform/linux/public/flutter_linux/fl_engine.h"
1112

1213
G_BEGIN_DECLS
1314

@@ -24,8 +25,7 @@ typedef void (*FlTaskExecutor)(FlutterTask task, gpointer user_data);
2425
*
2526
* Returns: an #FlTaskRunner.
2627
*/
27-
FlTaskRunner* fl_task_runner_new(FlTaskExecutor executor,
28-
gpointer executor_user_data);
28+
FlTaskRunner* fl_task_runner_new(FlEngine* engine);
2929

3030
/**
3131
* fl_task_runner_post_task:

0 commit comments

Comments
 (0)