@@ -41,12 +41,6 @@ static DeviceProfile GetDeviceProfile() {
41
41
42
42
TizenEmbedderEngine::TizenEmbedderEngine ()
43
43
: device_profile(GetDeviceProfile()) {
44
- #ifdef TIZEN_RENDERER_EVAS_GL
45
- tizen_renderer = std::make_unique<TizenRendererEvasGL>(*this );
46
- #else
47
- tizen_renderer = std::make_unique<TizenRendererEcoreWl2>(*this );
48
- #endif
49
-
50
44
// Run flutter task on Tizen main loop.
51
45
// Tizen engine has four threads (GPU thread, UI thread, IO thread, platform
52
46
// thread). UI threads need to send flutter task to platform thread.
@@ -58,7 +52,16 @@ TizenEmbedderEngine::TizenEmbedderEngine()
58
52
}
59
53
});
60
54
55
+ messenger = std::make_unique<FlutterDesktopMessenger>();
56
+ messenger->engine = this ;
57
+ message_dispatcher =
58
+ std::make_unique<flutter::IncomingMessageDispatcher>(messenger.get ());
59
+ }
60
+
61
+ void TizenEmbedderEngine::InitializeTizenRenderer () {
61
62
#ifdef TIZEN_RENDERER_EVAS_GL
63
+ tizen_renderer = std::make_unique<TizenRendererEvasGL>(*this );
64
+
62
65
render_loop_ = std::make_unique<TizenRenderEventLoop>(
63
66
std::this_thread::get_id (), // main thread
64
67
[this ](const auto * task) {
@@ -67,14 +70,8 @@ TizenEmbedderEngine::TizenEmbedderEngine()
67
70
}
68
71
},
69
72
tizen_renderer.get ());
70
- #endif
71
-
72
- messenger = std::make_unique<FlutterDesktopMessenger>();
73
- messenger->engine = this ;
74
- message_dispatcher =
75
- std::make_unique<flutter::IncomingMessageDispatcher>(messenger.get ());
76
-
77
- #ifndef TIZEN_RENDERER_EVAS_GL
73
+ #else
74
+ tizen_renderer = std::make_unique<TizenRendererEcoreWl2>(*this );
78
75
tizen_vsync_waiter_ = std::make_unique<TizenVsyncWaiter>(this );
79
76
#endif
80
77
}
@@ -111,7 +108,7 @@ UniqueAotDataPtr LoadAotData(std::string aot_data_path) {
111
108
112
109
bool TizenEmbedderEngine::RunEngine (
113
110
const FlutterEngineProperties& engine_properties) {
114
- if (!tizen_renderer->IsValid ()) {
111
+ if (HasTizenRenderer () && !tizen_renderer->IsValid ()) {
115
112
FT_LOGE (" The display was not valid." );
116
113
return false ;
117
114
}
@@ -138,40 +135,46 @@ bool TizenEmbedderEngine::RunEngine(
138
135
static_cast <TizenEventLoop*>(data)->PostTask (task, target_time_nanos);
139
136
};
140
137
platform_task_runner.identifier = kPlatformTaskRunnerIdentifier ;
141
-
142
- #ifdef TIZEN_RENDERER_EVAS_GL
143
- FlutterTaskRunnerDescription render_task_runner = {};
144
- render_task_runner.struct_size = sizeof (FlutterTaskRunnerDescription);
145
- render_task_runner.user_data = render_loop_.get ();
146
- render_task_runner.runs_task_on_current_thread_callback =
147
- [](void * data) -> bool {
148
- return static_cast <TizenEventLoop*>(data)->RunsTasksOnCurrentThread ();
149
- };
150
- render_task_runner.post_task_callback =
151
- [](FlutterTask task, uint64_t target_time_nanos, void * data) -> void {
152
- static_cast <TizenEventLoop*>(data)->PostTask (task, target_time_nanos);
153
- };
154
- render_task_runner.identifier = kRenderTaskRunnerIdentifier ;
155
- #endif
156
-
157
138
FlutterCustomTaskRunners custom_task_runners = {};
158
139
custom_task_runners.struct_size = sizeof (FlutterCustomTaskRunners);
159
140
custom_task_runners.platform_task_runner = &platform_task_runner;
141
+
160
142
#ifdef TIZEN_RENDERER_EVAS_GL
161
- custom_task_runners.render_task_runner = &render_task_runner;
143
+ if (HasTizenRenderer ()) {
144
+ FlutterTaskRunnerDescription render_task_runner = {};
145
+ render_task_runner.struct_size = sizeof (FlutterTaskRunnerDescription);
146
+ render_task_runner.user_data = render_loop_.get ();
147
+ render_task_runner.runs_task_on_current_thread_callback =
148
+ [](void * data) -> bool {
149
+ return static_cast <TizenEventLoop*>(data)->RunsTasksOnCurrentThread ();
150
+ };
151
+ render_task_runner.post_task_callback =
152
+ [](FlutterTask task, uint64_t target_time_nanos, void * data) -> void {
153
+ static_cast <TizenEventLoop*>(data)->PostTask (task, target_time_nanos);
154
+ };
155
+ render_task_runner.identifier = kRenderTaskRunnerIdentifier ;
156
+ custom_task_runners.render_task_runner = &render_task_runner;
157
+ }
162
158
#endif
163
159
164
160
FlutterRendererConfig config = {};
165
- config.type = kOpenGL ;
166
- config.open_gl .struct_size = sizeof (config.open_gl );
167
- config.open_gl .make_current = MakeContextCurrent;
168
- config.open_gl .make_resource_current = MakeResourceCurrent;
169
- config.open_gl .clear_current = ClearContext;
170
- config.open_gl .present = Present;
171
- config.open_gl .fbo_callback = GetActiveFbo;
172
- config.open_gl .surface_transformation = Transformation;
173
- config.open_gl .gl_proc_resolver = GlProcResolver;
174
- config.open_gl .gl_external_texture_frame_callback = OnAcquireExternalTexture;
161
+ if (HasTizenRenderer ()) {
162
+ config.type = kOpenGL ;
163
+ config.open_gl .struct_size = sizeof (config.open_gl );
164
+ config.open_gl .make_current = MakeContextCurrent;
165
+ config.open_gl .make_resource_current = MakeResourceCurrent;
166
+ config.open_gl .clear_current = ClearContext;
167
+ config.open_gl .present = Present;
168
+ config.open_gl .fbo_callback = GetActiveFbo;
169
+ config.open_gl .surface_transformation = Transformation;
170
+ config.open_gl .gl_proc_resolver = GlProcResolver;
171
+ config.open_gl .gl_external_texture_frame_callback =
172
+ OnAcquireExternalTexture;
173
+ } else {
174
+ config.type = kSoftware ;
175
+ config.software .struct_size = sizeof (config.software );
176
+ config.software .surface_present_callback = SurfacePresentCallback;
177
+ }
175
178
176
179
FlutterProjectArgs args = {};
177
180
args.struct_size = sizeof (FlutterProjectArgs);
@@ -181,8 +184,11 @@ bool TizenEmbedderEngine::RunEngine(
181
184
args.command_line_argv = &argv[0 ];
182
185
args.platform_message_callback = OnFlutterPlatformMessage;
183
186
args.custom_task_runners = &custom_task_runners;
187
+
184
188
#ifndef TIZEN_RENDERER_EVAS_GL
185
- args.vsync_callback = OnVsyncCallback;
189
+ if (HasTizenRenderer ()) {
190
+ args.vsync_callback = OnVsyncCallback;
191
+ }
186
192
#endif
187
193
188
194
if (FlutterEngineRunsAOTCompiledDartCode ()) {
@@ -203,36 +209,40 @@ bool TizenEmbedderEngine::RunEngine(
203
209
return false ;
204
210
}
205
211
206
- std::unique_ptr<FlutterTextureRegistrar> textures =
207
- std::make_unique<FlutterTextureRegistrar>();
208
- textures->flutter_engine = flutter_engine;
209
212
plugin_registrar_ = std::make_unique<FlutterDesktopPluginRegistrar>();
210
213
plugin_registrar_->engine = this ;
211
- plugin_registrar_->texture_registrar = std::move (textures);
212
214
213
215
internal_plugin_registrar_ =
214
216
std::make_unique<flutter::PluginRegistrar>(plugin_registrar_.get ());
215
217
216
- key_event_channel = std::make_unique<KeyEventChannel>(
217
- internal_plugin_registrar_->messenger ());
218
- navigation_channel = std::make_unique<NavigationChannel>(
219
- internal_plugin_registrar_->messenger ());
220
218
platform_channel = std::make_unique<PlatformChannel>(
221
219
internal_plugin_registrar_->messenger ());
222
220
settings_channel = std::make_unique<SettingsChannel>(
223
221
internal_plugin_registrar_->messenger ());
224
- text_input_channel = std::make_unique<TextInputChannel>(
225
- internal_plugin_registrar_->messenger (), this );
226
222
localization_channel = std::make_unique<LocalizationChannel>(flutter_engine);
227
223
localization_channel->SendLocales ();
228
224
lifecycle_channel = std::make_unique<LifecycleChannel>(flutter_engine);
229
- platform_view_channel = std::make_unique<PlatformViewChannel>(
230
- internal_plugin_registrar_->messenger (), this );
231
225
232
- key_event_handler_ = std::make_unique<KeyEventHandler>(this );
233
- touch_event_handler_ = std::make_unique<TouchEventHandler>(this );
226
+ if (HasTizenRenderer ()) {
227
+ std::unique_ptr<FlutterTextureRegistrar> textures =
228
+ std::make_unique<FlutterTextureRegistrar>();
229
+ textures->flutter_engine = flutter_engine;
230
+ plugin_registrar_->texture_registrar = std::move (textures);
231
+
232
+ key_event_channel = std::make_unique<KeyEventChannel>(
233
+ internal_plugin_registrar_->messenger ());
234
+ navigation_channel = std::make_unique<NavigationChannel>(
235
+ internal_plugin_registrar_->messenger ());
236
+ text_input_channel = std::make_unique<TextInputChannel>(
237
+ internal_plugin_registrar_->messenger (), this );
238
+ platform_view_channel = std::make_unique<PlatformViewChannel>(
239
+ internal_plugin_registrar_->messenger (), this );
240
+ key_event_handler_ = std::make_unique<KeyEventHandler>(this );
241
+ touch_event_handler_ = std::make_unique<TouchEventHandler>(this );
242
+
243
+ SetWindowOrientation (0 );
244
+ }
234
245
235
- SetWindowOrientation (0 );
236
246
return true ;
237
247
}
238
248
@@ -394,6 +404,14 @@ FlutterDesktopMessage TizenEmbedderEngine::ConvertToDesktopMessage(
394
404
return message;
395
405
}
396
406
407
+ bool TizenEmbedderEngine::SurfacePresentCallback (void * user_data,
408
+ const void * allocation,
409
+ size_t row_bytes,
410
+ size_t height) {
411
+ FT_LOGD (" SurfacePresentCallback" );
412
+ return true ;
413
+ }
414
+
397
415
bool TizenEmbedderEngine::MakeContextCurrent (void * user_data) {
398
416
return reinterpret_cast <TizenEmbedderEngine*>(user_data)
399
417
->tizen_renderer ->OnMakeCurrent ();
@@ -427,3 +445,7 @@ void* TizenEmbedderEngine::GlProcResolver(void* user_data, const char* name) {
427
445
return reinterpret_cast <TizenEmbedderEngine*>(user_data)
428
446
->tizen_renderer ->OnProcResolver (name);
429
447
}
448
+
449
+ bool TizenEmbedderEngine::HasTizenRenderer () {
450
+ return tizen_renderer != nullptr ;
451
+ }
0 commit comments