Skip to content

Commit d28275e

Browse files
authored
Support Tizen 4.0 (#23)
* Support Tizen 4.0 1.Add build arg(tizen-sdk-4) for tizen4.0. 2.Because Tizen4 only support ecore_wl, but tizen5,tizen6 only support ecore_wl2. so implement tizen_render_ecore_wl for tizen4 and tizen_render_ecore_wl2 for tizen5 and tizen6. * Add destory vblank method 1.If create tdm vblank failed, need destory vblank or tdm client. 2.Before request vblank, need check the thread is marked pending cancellation. * Format code according to review opinions
1 parent 8099f35 commit d28275e

23 files changed

+860
-826
lines changed

shell/platform/tizen/BUILD.gn

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# Copyright 2013 The Flutter Authors. All rights reserved.
33
# Use of this source code is governed by a BSD-style license that can be
44
# found in the LICENSE file.
5+
import("//flutter/shell/platform/tizen/config.gni")
56

67
_public_headers = [ "public/flutter_tizen.h" ]
78

@@ -43,10 +44,8 @@ source_set("flutter_tizen") {
4344
"key_event_handler.cc",
4445
"tizen_embedder_engine.cc",
4546
"tizen_event_loop.cc",
46-
"tizen_surface.cc",
47-
"tizen_surface_gl.cc",
47+
"tizen_renderer.cc",
4848
"tizen_vsync_waiter.cc",
49-
"tizen_native_window.cc",
5049
"touch_event_handler.cc",
5150
]
5251

@@ -72,6 +71,7 @@ source_set("flutter_tizen") {
7271
"$custom_sysroot/usr/include/ecore-imf-1",
7372
"$custom_sysroot/usr/include/ecore-imf-evas-1",
7473
"$custom_sysroot/usr/include/ecore-input-1",
74+
"$custom_sysroot/usr/include/ecore-wayland-1",
7575
"$custom_sysroot/usr/include/ecore-wl2-1",
7676
"$custom_sysroot/usr/include/efl-1",
7777
"$custom_sysroot/usr/include/eina-1",
@@ -80,6 +80,7 @@ source_set("flutter_tizen") {
8080
"$custom_sysroot/usr/include/eo-1",
8181
"$custom_sysroot/usr/include/evas-1",
8282
"$custom_sysroot/usr/include/system",
83+
"$custom_sysroot/usr/include/wayland-extension"
8384
]
8485

8586
lib_dirs = [ "$custom_sysroot/usr/lib" ]
@@ -98,14 +99,22 @@ source_set("flutter_tizen") {
9899
"ecore",
99100
"ecore_imf",
100101
"ecore_input",
101-
"ecore_wl2",
102102
"EGL",
103103
"evas",
104104
"GLESv2",
105105
"tbm",
106106
"tdm-client",
107107
"wayland-client",
108108
]
109+
110+
if (tizen_sdk_4) {
111+
sources += [ "tizen_renderer_ecore_wl.cc" ]
112+
libs += [ "ecore_wayland", "wayland-egl" ]
113+
defines = [ "FLUTTER_TIZEN_4" ]
114+
} else {
115+
sources += [ "tizen_renderer_ecore_wl2.cc" ]
116+
libs += [ "ecore_wl2" ]
117+
}
109118
}
110119

111120
copy("publish_headers_tizen") {

shell/platform/tizen/channels/text_input_channel.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,13 @@ void TextInputChannel::InputPanelStateChangedCallback(
108108
[](void* data) -> Eina_Bool {
109109
TextInputChannel* self = (TextInputChannel*)data;
110110
auto window_geometry =
111-
self->engine_->tizen_native_window->GetGeometry();
111+
self->engine_->tizen_renderer->GetGeometry();
112112
int32_t surface_w = window_geometry.w;
113113
int32_t surface_h =
114114
window_geometry.h - self->current_keyboard_geometry_.h;
115115

116-
self->engine_->tizen_native_window->GetTizenNativeEGLWindow()
117-
->ResizeWithRotation(0, 0, surface_w, surface_h, 0);
116+
self->engine_->tizen_renderer->ResizeWithRotation(0, 0, surface_w,
117+
surface_h, 0);
118118
if (self->rotation == 90 || self->rotation == 270) {
119119
self->engine_->SendWindowMetrics(surface_h, surface_w, 0);
120120
} else {
@@ -298,10 +298,8 @@ TextInputChannel::TextInputChannel(flutter::BinaryMessenger* messenger,
298298
imf_context_ = ecore_imf_context_add(GetImfMethod());
299299
}
300300
if (imf_context_) {
301-
Ecore_Wl2_Window* ecoreWindow =
302-
engine_->tizen_native_window->GetWindowHandle();
303301
ecore_imf_context_client_window_set(
304-
imf_context_, (void*)ecore_wl2_window_id_get(ecoreWindow));
302+
imf_context_, (void*)engine_->tizen_renderer->GetEcoreWindowId());
305303
RegisterIMFCallback();
306304
} else {
307305
FT_LOGE("Failed to create imfContext");
@@ -456,7 +454,9 @@ bool TextInputChannel::FilterEvent(Ecore_Event_Key* keyDownEvent) {
456454
ecore_device_class_get(keyDownEvent->dev));
457455
ecoreKeyDownEvent.dev_subclass = EoreDeviceSubClassToEcoreIMFDeviceSubClass(
458456
ecore_device_subclass_get(keyDownEvent->dev));
457+
#ifndef FLUTTER_TIZEN_4
459458
ecoreKeyDownEvent.keycode = keyDownEvent->keycode;
459+
#endif
460460

461461
bool isIME = strcmp(device, "ime") == 0;
462462
if (isIME && strcmp(keyDownEvent->key, "Select") == 0) {
@@ -612,15 +612,15 @@ void TextInputChannel::HideSoftwareKeyboard() {
612612

613613
if (engine_->device_profile ==
614614
"mobile") { // FIXME : Needs improvement on other devices.
615-
auto window_geometry = engine_->tizen_native_window->GetGeometry();
615+
auto window_geometry = engine_->tizen_renderer->GetGeometry();
616616

617617
if (rotation == 90 || rotation == 270) {
618618
engine_->SendWindowMetrics(window_geometry.h, window_geometry.w, 0);
619619
} else {
620620
engine_->SendWindowMetrics(window_geometry.w, window_geometry.h, 0);
621621
}
622-
engine_->tizen_native_window->GetTizenNativeEGLWindow()
623-
->ResizeWithRotation(0, 0, window_geometry.w, window_geometry.h, 0);
622+
engine_->tizen_renderer->ResizeWithRotation(0, 0, window_geometry.w,
623+
window_geometry.h, 0);
624624
ecore_timer_add(
625625
0.05,
626626
[](void* data) -> Eina_Bool {

shell/platform/tizen/channels/text_input_channel.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#define EFL_BETA_API_SUPPORT
99
#include <Ecore_IMF.h>
1010
#include <Ecore_Input.h>
11-
#include <Ecore_Wl2.h>
1211

1312
#include <string>
1413

shell/platform/tizen/config.gni

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ declare_args() {
1010
# as an extra build artifact with this flag. The native toolkit shell will
1111
# still be built as well.
1212
build_tizen_shell = false
13+
tizen_sdk_4 = false
1314
}

shell/platform/tizen/flutter_tizen.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "public/flutter_tizen.h"
77

88
#include <inttypes.h>
9+
#include <unistd.h>
910

1011
#include "flutter/shell/platform/common/cpp/client_wrapper/include/flutter/plugin_registrar.h"
1112
#include "flutter/shell/platform/common/cpp/client_wrapper/include/flutter/standard_message_codec.h"

shell/platform/tizen/tizen_embedder_engine.cc

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,15 @@ static double GetDeviceDpi() {
3535
TizenEmbedderEngine::TizenEmbedderEngine(
3636
const FlutterWindowProperties& window_properties)
3737
: device_profile(GetDeviceProfile()), device_dpi(GetDeviceDpi()) {
38-
tizen_native_window = std::make_shared<TizenNativeWindow>(
38+
#ifdef FLUTTER_TIZEN_4
39+
tizen_renderer = std::make_unique<TizenRendererEcoreWl>(
3940
window_properties.x, window_properties.y, window_properties.width,
4041
window_properties.height);
41-
tizen_surface = std::make_unique<TizenSurfaceGL>(tizen_native_window);
42+
#else
43+
tizen_renderer = std::make_unique<TizenRendererEcoreWl2>(
44+
window_properties.x, window_properties.y, window_properties.width,
45+
window_properties.height);
46+
#endif
4247

4348
// Run flutter task on Tizen main loop.
4449
// Tizen engine has four threads (GPU thread, UI thread, IO thread, platform
@@ -61,8 +66,7 @@ TizenEmbedderEngine::TizenEmbedderEngine(
6166

6267
TizenEmbedderEngine::~TizenEmbedderEngine() {
6368
FT_LOGD("Destroy");
64-
tizen_surface = nullptr;
65-
tizen_native_window = nullptr;
69+
tizen_renderer = nullptr;
6670
}
6771

6872
// Attempts to load AOT data from the given path, which must be absolute and
@@ -92,7 +96,7 @@ UniqueAotDataPtr LoadAotData(std::string aot_data_path) {
9296

9397
bool TizenEmbedderEngine::RunEngine(
9498
const FlutterEngineProperties& engine_properties) {
95-
if (!tizen_surface->IsValid()) {
99+
if (!tizen_renderer->IsValid()) {
96100
FT_LOGE("The display was not valid.");
97101
return false;
98102
}
@@ -262,13 +266,13 @@ void TizenEmbedderEngine::SendWindowMetrics(int32_t width, int32_t height,
262266
// This must be called at least once in order to initialize the value of
263267
// transformation_.
264268
void TizenEmbedderEngine::SetWindowOrientation(int32_t degree) {
265-
if (!tizen_surface) {
269+
if (!tizen_renderer) {
266270
return;
267271
}
268272

269273
// Compute renderer transformation based on the angle of rotation.
270274
double rad = (360 - degree) * M_PI / 180;
271-
auto geometry = tizen_native_window->GetGeometry();
275+
auto geometry = tizen_renderer->GetGeometry();
272276
double width = geometry.w;
273277
double height = geometry.h;
274278

@@ -331,11 +335,7 @@ void TizenEmbedderEngine::OnFlutterPlatformMessage(
331335
void TizenEmbedderEngine::OnVsyncCallback(void* user_data, intptr_t baton) {
332336
TizenEmbedderEngine* tizen_embedder_engine =
333337
reinterpret_cast<TizenEmbedderEngine*>(user_data);
334-
if (tizen_embedder_engine->tizen_vsync_waiter_->IsValid()) {
335-
tizen_embedder_engine->tizen_vsync_waiter_->AsyncWaitForVsync(baton);
336-
return;
337-
}
338-
FT_ASSERT_NOT_REACHED();
338+
tizen_embedder_engine->tizen_vsync_waiter_->AsyncWaitForVsync(baton);
339339
}
340340

341341
// Converts a FlutterPlatformMessage to an equivalent FlutterDesktopMessage.
@@ -352,27 +352,27 @@ FlutterDesktopMessage TizenEmbedderEngine::ConvertToDesktopMessage(
352352

353353
bool TizenEmbedderEngine::MakeContextCurrent(void* user_data) {
354354
return reinterpret_cast<TizenEmbedderEngine*>(user_data)
355-
->tizen_surface->OnMakeCurrent();
355+
->tizen_renderer->OnMakeCurrent();
356356
}
357357

358358
bool TizenEmbedderEngine::ClearContext(void* user_data) {
359359
return reinterpret_cast<TizenEmbedderEngine*>(user_data)
360-
->tizen_surface->OnClearCurrent();
360+
->tizen_renderer->OnClearCurrent();
361361
}
362362

363363
bool TizenEmbedderEngine::Present(void* user_data) {
364364
return reinterpret_cast<TizenEmbedderEngine*>(user_data)
365-
->tizen_surface->OnPresent();
365+
->tizen_renderer->OnPresent();
366366
}
367367

368368
bool TizenEmbedderEngine::MakeResourceCurrent(void* user_data) {
369369
return reinterpret_cast<TizenEmbedderEngine*>(user_data)
370-
->tizen_surface->OnMakeResourceCurrent();
370+
->tizen_renderer->OnMakeResourceCurrent();
371371
}
372372

373373
uint32_t TizenEmbedderEngine::GetActiveFbo(void* user_data) {
374374
return reinterpret_cast<TizenEmbedderEngine*>(user_data)
375-
->tizen_surface->OnGetFBO();
375+
->tizen_renderer->OnGetFBO();
376376
}
377377

378378
FlutterTransformation TizenEmbedderEngine::Transformation(void* user_data) {
@@ -381,5 +381,5 @@ FlutterTransformation TizenEmbedderEngine::Transformation(void* user_data) {
381381

382382
void* TizenEmbedderEngine::GlProcResolver(void* user_data, const char* name) {
383383
return reinterpret_cast<TizenEmbedderEngine*>(user_data)
384-
->tizen_surface->OnProcResolver(name);
384+
->tizen_renderer->OnProcResolver(name);
385385
}

shell/platform/tizen/tizen_embedder_engine.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,12 @@
2323
#include "flutter/shell/platform/tizen/public/flutter_texture_registrar.h"
2424
#include "flutter/shell/platform/tizen/public/flutter_tizen.h"
2525
#include "flutter/shell/platform/tizen/tizen_event_loop.h"
26-
#include "flutter/shell/platform/tizen/tizen_surface.h"
27-
#include "flutter/shell/platform/tizen/tizen_surface_gl.h"
26+
#include "flutter/shell/platform/tizen/tizen_renderer.h"
27+
#ifdef FLUTTER_TIZEN_4
28+
#include "flutter/shell/platform/tizen/tizen_renderer_ecore_wl.h"
29+
#else
30+
#include "flutter/shell/platform/tizen/tizen_renderer_ecore_wl2.h"
31+
#endif
2832
#include "flutter/shell/platform/tizen/tizen_vsync_waiter.h"
2933
#include "flutter/shell/platform/tizen/touch_event_handler.h"
3034

@@ -94,8 +98,7 @@ class TizenEmbedderEngine {
9498
std::unique_ptr<flutter::IncomingMessageDispatcher> message_dispatcher;
9599

96100
// The interface between the Flutter rasterizer and the platform.
97-
std::unique_ptr<TizenSurface> tizen_surface;
98-
std::shared_ptr<TizenNativeWindow> tizen_native_window;
101+
std::unique_ptr<TizenRenderer> tizen_renderer;
99102

100103
// The system channels for communicating between Flutter and the platform.
101104
std::unique_ptr<KeyEventChannel> key_event_channel;

0 commit comments

Comments
 (0)