90 std::cerr << std::endl <<
" " << executable_name << std::endl << std::endl;
92 std::cerr <<
"Versions: " << std::endl << std::endl;
101 std::cerr <<
"Dart Version: " <<
GetDartVersion() << std::endl << std::endl;
103 std::cerr <<
"Available Flags:" << std::endl;
105 const uint32_t column_width = 80;
107 const uint32_t flags_count =
static_cast<uint32_t
>(Switch::Sentinel);
109 uint32_t max_width = 2;
110 for (uint32_t
i = 0;
i < flags_count;
i++) {
111 auto desc = gSwitchDescs[
i];
112 max_width = std::max<uint32_t>(desc.flag.size() + 2, max_width);
115 const uint32_t help_width = column_width - max_width - 3;
117 std::cerr << std::string(column_width,
'-') << std::endl;
118 for (uint32_t
i = 0;
i < flags_count;
i++) {
119 auto desc = gSwitchDescs[
i];
121 std::cerr << std::setw(max_width)
122 << std::string(
"--") +
123 std::string{desc.flag.data(), desc.flag.size()}
126 std::istringstream stream(desc.help);
127 int32_t remaining = help_width;
130 while (stream >> word && remaining > 0) {
131 remaining -= (word.size() + 1);
132 if (remaining <= 0) {
133 std::cerr << std::endl
134 << std::string(max_width,
' ') <<
" " << word <<
" ";
135 remaining = help_width;
137 std::cerr << word <<
" ";
141 std::cerr << std::endl;
143 std::cerr << std::string(column_width,
'-') << std::endl;
231 bool require_merged_platform_ui_thread) {
264 <<
"VM Service port specified was malformed. Will default to "
324 std::string trace_skia_allowlist;
326 &trace_skia_allowlist);
327 if (trace_skia_allowlist.size()) {
335 std::string trace_allowlist;
358 std::vector<std::string_view> aot_shared_library_name =
361 std::vector<std::string_view> vmservice_shared_library_name =
364 for (
auto path : vmservice_shared_library_name) {
368 std::string snapshot_asset_path;
370 &snapshot_asset_path);
372 std::string vm_snapshot_data_filename;
374 &vm_snapshot_data_filename);
378 std::string vm_snapshot_instr_filename;
380 &vm_snapshot_instr_filename);
382 std::string isolate_snapshot_data_filename;
384 &isolate_snapshot_data_filename);
386 std::string isolate_snapshot_instr_filename;
389 &isolate_snapshot_instr_filename);
391 if (!aot_shared_library_name.empty()) {
392 for (std::string_view
name : aot_shared_library_name) {
395 }
else if (!snapshot_asset_path.empty()) {
399 {snapshot_asset_path, vm_snapshot_instr_filename});
401 {snapshot_asset_path, isolate_snapshot_data_filename});
403 {snapshot_asset_path, isolate_snapshot_instr_filename});
417 std::string icu_symbol_prefix, native_lib_path;
426 settings.
icu_mapper = [icu_symbol_prefix, native_lib_path] {
438#if FML_OS_IOS || FML_OS_IOS_SIMULATOR || SLIMPELLER
443 std::string enable_impeller_value;
445 &enable_impeller_value)) {
447 enable_impeller_value.empty() ||
"true" == enable_impeller_value;
453 std::string impeller_backend_value;
455 &impeller_backend_value)) {
456 if (!impeller_backend_value.empty()) {
475 std::string all_dart_flags;
480 for (
const auto& flag : flags) {
482 FML_LOG(FATAL) <<
"Encountered disallowed Dart VM flag: " << flag;
502 std::string old_gen_heap_size;
510 std::string resource_cache_max_bytes_threshold;
513 &resource_cache_max_bytes_threshold);
515 std::stoi(resource_cache_max_bytes_threshold);
524 constexpr std::string_view kMergedThreadEnabled =
"enabled";
525 constexpr std::string_view kMergedThreadDisabled =
"disabled";
526 constexpr std::string_view kMergedThreadMergeAfterLaunch =
"mergeAfterLaunch";
529 FML_CHECK(!require_merged_platform_ui_thread)
530 <<
"This platform does not support the "
531 <<
FlagForSwitch(Switch::DisableMergedPlatformUIThread) <<
" flag";
537 std::string merged_platform_ui;
539 &merged_platform_ui);
540 if (merged_platform_ui == kMergedThreadEnabled) {
543 }
else if (merged_platform_ui == kMergedThreadDisabled) {
544 FML_CHECK(!require_merged_platform_ui_thread)
545 <<
"This platform does not support the "
547 << kMergedThreadDisabled <<
" flag";
551 }
else if (merged_platform_ui == kMergedThreadMergeAfterLaunch) {