Skip to content

Commit 8fa1ff2

Browse files
authored
Implement merged UI and platform thread (#104)
1 parent 5970495 commit 8fa1ff2

File tree

6 files changed

+38
-2
lines changed

6 files changed

+38
-2
lines changed

flutter/shell/platform/tizen/flutter_project_bundle.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ FlutterProjectBundle::FlutterProjectBundle(
5050
std::string(properties.dart_entrypoint_argv[i]));
5151
}
5252

53+
ui_thread_policy_ =
54+
static_cast<FlutterUIThreadPolicy>(properties.ui_thread_policy);
55+
5356
// Resolve any relative paths.
5457
if (assets_path_.is_relative() || icu_path_.is_relative() ||
5558
(!aot_library_path_.empty() && aot_library_path_.is_relative())) {

flutter/shell/platform/tizen/flutter_project_bundle.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ namespace flutter {
1818
using UniqueAotDataPtr =
1919
std::unique_ptr<_FlutterEngineAOTData, FlutterEngineCollectAOTDataFnPtr>;
2020

21+
enum class FlutterUIThreadPolicy {
22+
kDefault,
23+
kRunOnPlatformThread,
24+
kRunOnSeparateThread,
25+
};
26+
2127
// The data associated with a Flutter project needed to run it in an engine.
2228
class FlutterProjectBundle {
2329
public:
@@ -67,6 +73,9 @@ class FlutterProjectBundle {
6773
return dart_entrypoint_arguments_;
6874
}
6975

76+
// Returns thread policy for running the UI isolate.
77+
FlutterUIThreadPolicy ui_thread_policy() { return ui_thread_policy_; }
78+
7079
private:
7180
std::filesystem::path assets_path_;
7281
std::filesystem::path icu_path_;
@@ -80,6 +89,9 @@ class FlutterProjectBundle {
8089

8190
// Dart entrypoint arguments.
8291
std::vector<std::string> dart_entrypoint_arguments_;
92+
93+
// Thread policy for running the UI isolate.
94+
FlutterUIThreadPolicy ui_thread_policy_;
8395
};
8496

8597
} // namespace flutter

flutter/shell/platform/tizen/flutter_tizen_engine.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,11 @@ bool FlutterTizenEngine::RunEngine() {
177177
custom_task_runners.render_task_runner = &render_task_runner;
178178
}
179179

180+
if (project_->ui_thread_policy() !=
181+
FlutterUIThreadPolicy::kRunOnSeparateThread) {
182+
custom_task_runners.ui_task_runner = &platform_task_runner;
183+
}
184+
180185
FlutterProjectArgs args = {};
181186
args.struct_size = sizeof(FlutterProjectArgs);
182187
args.assets_path = assets_path_string.c_str();

flutter/shell/platform/tizen/flutter_tizen_engine_unittest.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ class FlutterTizenEngineTest : public ::testing::Test {
2323
engine_prop.assets_path = "/foo/flutter_assets";
2424
engine_prop.icu_data_path = "/foo/icudtl.dat";
2525
engine_prop.aot_library_path = "/foo/libapp.so";
26+
engine_prop.ui_thread_policy =
27+
FlutterDesktopUIThreadPolicy::kRunOnPlatformThread;
2628

2729
FlutterProjectBundle project(engine_prop);
2830
auto engine = std::make_unique<FlutterTizenEngine>(project);
@@ -64,6 +66,8 @@ TEST_F(FlutterTizenEngineTest, RunDoesExpectedInitialization) {
6466
EXPECT_EQ(args->dart_entrypoint_argc, 0);
6567
EXPECT_NE(args->platform_message_callback, nullptr);
6668
EXPECT_NE(args->custom_task_runners, nullptr);
69+
EXPECT_EQ(args->custom_task_runners->platform_task_runner,
70+
args->custom_task_runners->ui_task_runner);
6771
EXPECT_EQ(args->custom_dart_entrypoint, nullptr);
6872

6973
return kSuccess;

flutter/shell/platform/tizen/public/flutter_tizen.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,16 @@ typedef enum {
4545
kHDMI,
4646
} FlutterDesktopExternalOutputType;
4747

48+
// Configures the thread policy for running the UI isolate.
49+
typedef enum {
50+
// Default value. Currently run the UI isolate on platform thread.
51+
kDefault,
52+
// Run the UI isolate on platform thread.
53+
kRunOnPlatformThread,
54+
// Run the UI isolate on a separate thread.
55+
kRunOnSeparateThread,
56+
} FlutterDesktopUIThreadPolicy;
57+
4858
// Properties for configuring the initial settings of a Flutter window.
4959
typedef struct {
5060
// The x-coordinate of the top left corner of the window.
@@ -104,6 +114,8 @@ typedef struct {
104114
// Array of Dart entrypoint arguments. This is deep copied during the call
105115
// to FlutterDesktopRunEngine.
106116
const char** dart_entrypoint_argv;
117+
// Policy for the thread that runs UI isolate.
118+
FlutterDesktopUIThreadPolicy ui_thread_policy;
107119
} FlutterDesktopEngineProperties;
108120

109121
// ========== Engine ==========

tools/generate_sysroot.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@ def generate_sysroot(sysroot: Path, api_version: float, arch: str, quiet=False):
144144
sys.exit('Unknown arch: ' + arch)
145145

146146
if api_version >= 10.0:
147-
base_repo = 'http://download.tizen.org/snapshots/TIZEN/Tizen/Tizen-Base/reference/repos/standard/packages/'
148-
unified_repo = 'http://download.tizen.org/snapshots/TIZEN/Tizen/Tizen-Unified/reference/repos//{}/packages'.format(
147+
base_repo = 'http://download.tizen.org/snapshots/TIZEN/Tizen/Tizen-Base/reference/repos/standard/packages'
148+
unified_repo = 'http://download.tizen.org/snapshots/TIZEN/Tizen/Tizen-Unified/reference/repos/{}/packages'.format(
149149
target)
150150
else:
151151
base_repo = 'http://download.tizen.org/snapshots/TIZEN/Tizen-{}/Tizen-{}-Base/reference/repos/standard/packages'.format(

0 commit comments

Comments
 (0)