Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
switches.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <algorithm>
6#include <iomanip>
7#include <iostream>
8#include <iterator>
9#include <sstream>
10#include <string>
11
13#include "flutter/fml/paths.h"
15
16// This will include switch_defs.h once to get the default enum definition.
18
19#undef FLUTTER_SHELL_COMMON_SWITCH_DEFS_H_
20
21struct SwitchDesc {
22 flutter::Switch sw;
23 const std::string_view flag;
24 const char* help;
25};
26
27#undef DEF_SWITCHES_START
28#undef DEF_SWITCH
29#undef DEF_SWITCHES_END
30
31// clang-format off
32#define DEF_SWITCHES_START static const struct SwitchDesc gSwitchDescs[] = {
33#define DEF_SWITCH(p_swtch, p_flag, p_help) \
34 { flutter::Switch:: p_swtch, p_flag, p_help },
35#define DEF_SWITCHES_END };
36// clang-format on
37
38// List of common and safe VM flags to allow to be passed directly to the VM.
39#if FLUTTER_RELEASE
40
41// clang-format off
42static const std::string kAllowedDartFlags[] = {
43 "--enable-isolate-groups",
44 "--no-enable-isolate-groups",
45};
46// clang-format on
47
48#else
49
50// clang-format off
51static const std::string kAllowedDartFlags[] = {
52 "--enable-isolate-groups",
53 "--no-enable-isolate-groups",
54 "--enable_mirrors",
55 "--enable-service-port-fallback",
56 "--max_profile_depth",
57 "--profile_period",
58 "--random_seed",
59 "--sample-buffer-duration",
60 "--trace-kernel",
61 "--trace-reload",
62 "--trace-reload-verbose",
63 "--write-service-info",
64 "--max_subtype_cache_entries",
65 "--enable-asserts",
66};
67// clang-format on
68
69#endif // FLUTTER_RELEASE
70
71// Include switch_defs.h again for the struct definition.
73
74// Define symbols for the ICU data that is linked into the Flutter library on
75// Android. This is a workaround for crashes seen when doing dynamic lookups
76// of the engine's own symbols on some older versions of Android.
77#if FML_OS_ANDROID
78extern uint8_t _binary_icudtl_dat_start[];
79extern size_t _binary_icudtl_dat_size;
80
81static std::unique_ptr<fml::Mapping> GetICUStaticMapping() {
82 return std::make_unique<fml::NonOwnedMapping>(_binary_icudtl_dat_start,
83 _binary_icudtl_dat_size);
84}
85#endif
86
87namespace flutter {
88
89void PrintUsage(const std::string& executable_name) {
90 std::cerr << std::endl << " " << executable_name << std::endl << std::endl;
91
92 std::cerr << "Versions: " << std::endl << std::endl;
93
94 std::cerr << "Flutter Engine Version: " << GetFlutterEngineVersion()
95 << std::endl;
96
97 std::cerr << "Flutter Content Hash: " << GetFlutterContentHash() << std::endl;
98
99 std::cerr << "Skia Version: " << GetSkiaVersion() << std::endl;
100
101 std::cerr << "Dart Version: " << GetDartVersion() << std::endl << std::endl;
102
103 std::cerr << "Available Flags:" << std::endl;
104
105 const uint32_t column_width = 80;
106
107 const uint32_t flags_count = static_cast<uint32_t>(Switch::Sentinel);
108
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);
113 }
114
115 const uint32_t help_width = column_width - max_width - 3;
116
117 std::cerr << std::string(column_width, '-') << std::endl;
118 for (uint32_t i = 0; i < flags_count; i++) {
119 auto desc = gSwitchDescs[i];
120
121 std::cerr << std::setw(max_width)
122 << std::string("--") +
123 std::string{desc.flag.data(), desc.flag.size()}
124 << " : ";
125
126 std::istringstream stream(desc.help);
127 int32_t remaining = help_width;
128
129 std::string word;
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;
136 } else {
137 std::cerr << word << " ";
138 }
139 }
140
141 std::cerr << std::endl;
142 }
143 std::cerr << std::string(column_width, '-') << std::endl;
144}
145
146const std::string_view FlagForSwitch(Switch swtch) {
147 for (uint32_t i = 0; i < static_cast<uint32_t>(Switch::Sentinel); i++) {
148 if (gSwitchDescs[i].sw == swtch) {
149 return gSwitchDescs[i].flag;
150 }
151 }
152 return std::string_view();
153}
154
155static std::vector<std::string> ParseCommaDelimited(const std::string& input) {
156 std::istringstream ss(input);
157 std::vector<std::string> result;
158 std::string token;
159 while (std::getline(ss, token, ',')) {
160 result.push_back(token);
161 }
162 return result;
163}
164
165static bool IsAllowedDartVMFlag(const std::string& flag) {
166 for (uint32_t i = 0; i < std::size(kAllowedDartFlags); ++i) {
167 const std::string& allowed = kAllowedDartFlags[i];
168 // Check that the prefix of the flag matches one of the allowed flags. This
169 // is to handle cases where flags take arguments, such as in
170 // "--max_profile_depth 1".
171 //
172 // We don't need to worry about cases like "--safe --sneaky_dangerous" as
173 // the VM will discard these as a single unrecognized flag.
174 if (flag.length() >= allowed.length() &&
175 std::equal(allowed.begin(), allowed.end(), flag.begin())) {
176 return true;
177 }
178 }
179 return false;
180}
181
182template <typename T>
183static bool GetSwitchValue(const fml::CommandLine& command_line,
184 Switch sw,
185 T* result) {
186 std::string switch_string;
187
188 if (!command_line.GetOptionValue(FlagForSwitch(sw), &switch_string)) {
189 return false;
190 }
191
192 std::stringstream stream(switch_string);
193 T value = 0;
194 if (stream >> value) {
195 *result = value;
196 return true;
197 }
198
199 return false;
200}
201
202std::unique_ptr<fml::Mapping> GetSymbolMapping(
203 const std::string& symbol_prefix,
204 const std::string& native_lib_path) {
205 const uint8_t* mapping = nullptr;
206 intptr_t size;
207
208 auto lookup_symbol = [&mapping, &size, symbol_prefix](
209 const fml::RefPtr<fml::NativeLibrary>& library) {
210 mapping = library->ResolveSymbol((symbol_prefix + "_start").c_str());
211 size = reinterpret_cast<intptr_t>(
212 library->ResolveSymbol((symbol_prefix + "_size").c_str()));
213 };
214
217 lookup_symbol(library);
218
219 if (!(mapping && size)) {
220 // Symbol lookup for the current process fails on some devices. As a
221 // fallback, try doing the lookup based on the path to the Flutter library.
222 library = fml::NativeLibrary::Create(native_lib_path.c_str());
223 lookup_symbol(library);
224 }
225
226 FML_CHECK(mapping && size) << "Unable to resolve symbols: " << symbol_prefix;
227 return std::make_unique<fml::NonOwnedMapping>(mapping, size);
228}
229
231 bool require_merged_platform_ui_thread) {
232 Settings settings = {};
233
234 // Set executable name.
235 if (command_line.has_argv0()) {
236 settings.executable_name = command_line.argv0();
237 }
238
239 // Enable the VM Service
240 settings.enable_vm_service =
241 !command_line.HasOption(FlagForSwitch(Switch::DisableVMService));
242
243 // Enable mDNS VM Service Publication
244 settings.enable_vm_service_publication = !command_line.HasOption(
245 FlagForSwitch(Switch::DisableVMServicePublication));
246
247 // Set VM Service Host
248 if (command_line.HasOption(FlagForSwitch(Switch::DeviceVMServiceHost))) {
249 command_line.GetOptionValue(FlagForSwitch(Switch::DeviceVMServiceHost),
250 &settings.vm_service_host);
251 }
252 // Default the VM Service port based on --ipv6 if not set.
253 if (settings.vm_service_host.empty()) {
254 settings.vm_service_host =
255 command_line.HasOption(FlagForSwitch(Switch::IPv6)) ? "::1"
256 : "127.0.0.1";
257 }
258
259 // Set VM Service Port
260 if (command_line.HasOption(FlagForSwitch(Switch::DeviceVMServicePort))) {
261 if (!GetSwitchValue(command_line, Switch::DeviceVMServicePort,
262 &settings.vm_service_port)) {
263 FML_LOG(INFO)
264 << "VM Service port specified was malformed. Will default to "
265 << settings.vm_service_port;
266 }
267 }
268
269 settings.may_insecurely_connect_to_all_domains = !command_line.HasOption(
270 FlagForSwitch(Switch::DisallowInsecureConnections));
271
272 command_line.GetOptionValue(FlagForSwitch(Switch::DomainNetworkPolicy),
273 &settings.domain_network_policy);
274
275 // Disable need for authentication codes for VM service communication, if
276 // specified.
278 command_line.HasOption(FlagForSwitch(Switch::DisableServiceAuthCodes));
279
280 // Disable WebSocket origin checks for the VM service, if specified.
282 command_line.HasOption(FlagForSwitch(Switch::DisableServiceOriginCheck));
283
284 // Allow fallback to automatic port selection if binding to a specified port
285 // fails.
287 command_line.HasOption(FlagForSwitch(Switch::EnableServicePortFallback));
288
289 // Checked mode overrides.
290 settings.disable_dart_asserts =
291 command_line.HasOption(FlagForSwitch(Switch::DisableDartAsserts));
292
293 settings.start_paused =
294 command_line.HasOption(FlagForSwitch(Switch::StartPaused));
295
296 settings.enable_checked_mode =
297 command_line.HasOption(FlagForSwitch(Switch::EnableCheckedMode));
298
299 settings.enable_dart_profiling =
300 command_line.HasOption(FlagForSwitch(Switch::EnableDartProfiling));
301
302 settings.profile_startup =
303 command_line.HasOption(FlagForSwitch(Switch::ProfileStartup));
304
306 command_line.HasOption(FlagForSwitch(Switch::EnableSoftwareRendering));
307
308 settings.endless_trace_buffer =
309 command_line.HasOption(FlagForSwitch(Switch::EndlessTraceBuffer));
310
311 settings.trace_startup =
312 command_line.HasOption(FlagForSwitch(Switch::TraceStartup));
313
314 settings.enable_serial_gc =
315 command_line.HasOption(FlagForSwitch(Switch::EnableSerialGC));
316
317#if !FLUTTER_RELEASE
318 settings.trace_skia = true;
319
320 if (command_line.HasOption(FlagForSwitch(Switch::TraceSkia))) {
321 // If --trace-skia is specified, then log all Skia events.
322 settings.trace_skia_allowlist.reset();
323 } else {
324 std::string trace_skia_allowlist;
325 command_line.GetOptionValue(FlagForSwitch(Switch::TraceSkiaAllowlist),
326 &trace_skia_allowlist);
327 if (trace_skia_allowlist.size()) {
328 settings.trace_skia_allowlist = ParseCommaDelimited(trace_skia_allowlist);
329 } else {
330 settings.trace_skia_allowlist = {"skia.shaders"};
331 }
332 }
333#endif // !FLUTTER_RELEASE
334
335 std::string trace_allowlist;
336 command_line.GetOptionValue(FlagForSwitch(Switch::TraceAllowlist),
337 &trace_allowlist);
338 settings.trace_allowlist = ParseCommaDelimited(trace_allowlist);
339
340 settings.trace_systrace =
341 command_line.HasOption(FlagForSwitch(Switch::TraceSystrace));
342
343 command_line.GetOptionValue(FlagForSwitch(Switch::TraceToFile),
344 &settings.trace_to_file);
345
346 settings.profile_microtasks =
347 command_line.HasOption(FlagForSwitch(Switch::ProfileMicrotasks));
348
350 command_line.HasOption(FlagForSwitch(Switch::SkiaDeterministicRendering));
351
352 settings.verbose_logging =
353 command_line.HasOption(FlagForSwitch(Switch::VerboseLogging));
354
355 command_line.GetOptionValue(FlagForSwitch(Switch::FlutterAssetsDir),
356 &settings.assets_path);
357
358 std::vector<std::string_view> aot_shared_library_name =
359 command_line.GetOptionValues(FlagForSwitch(Switch::AotSharedLibraryName));
360
361 std::vector<std::string_view> vmservice_shared_library_name =
362 command_line.GetOptionValues(
363 FlagForSwitch(Switch::AotVMServiceSharedLibraryName));
364 for (auto path : vmservice_shared_library_name) {
365 settings.vmservice_snapshot_library_path.emplace_back(path);
366 }
367
368 std::string snapshot_asset_path;
369 command_line.GetOptionValue(FlagForSwitch(Switch::SnapshotAssetPath),
370 &snapshot_asset_path);
371
372 std::string vm_snapshot_data_filename;
373 command_line.GetOptionValue(FlagForSwitch(Switch::VmSnapshotData),
374 &vm_snapshot_data_filename);
375
376 command_line.GetOptionValue(FlagForSwitch(Switch::Route), &settings.route);
377
378 std::string vm_snapshot_instr_filename;
379 command_line.GetOptionValue(FlagForSwitch(Switch::VmSnapshotInstructions),
380 &vm_snapshot_instr_filename);
381
382 std::string isolate_snapshot_data_filename;
383 command_line.GetOptionValue(FlagForSwitch(Switch::IsolateSnapshotData),
384 &isolate_snapshot_data_filename);
385
386 std::string isolate_snapshot_instr_filename;
387 command_line.GetOptionValue(
388 FlagForSwitch(Switch::IsolateSnapshotInstructions),
389 &isolate_snapshot_instr_filename);
390
391 if (!aot_shared_library_name.empty()) {
392 for (std::string_view name : aot_shared_library_name) {
393 settings.application_library_paths.emplace_back(name);
394 }
395 } else if (!snapshot_asset_path.empty()) {
396 settings.vm_snapshot_data_path =
397 fml::paths::JoinPaths({snapshot_asset_path, vm_snapshot_data_filename});
399 {snapshot_asset_path, vm_snapshot_instr_filename});
401 {snapshot_asset_path, isolate_snapshot_data_filename});
403 {snapshot_asset_path, isolate_snapshot_instr_filename});
404 }
405
406 command_line.GetOptionValue(FlagForSwitch(Switch::CacheDirPath),
407 &settings.temp_directory_path);
408
409 bool leak_vm = "true" == command_line.GetOptionValueWithDefault(
410 FlagForSwitch(Switch::LeakVM), "true");
411 settings.leak_vm = leak_vm;
412
413 if (settings.icu_initialization_required) {
414 command_line.GetOptionValue(FlagForSwitch(Switch::ICUDataFilePath),
415 &settings.icu_data_path);
416 if (command_line.HasOption(FlagForSwitch(Switch::ICUSymbolPrefix))) {
417 std::string icu_symbol_prefix, native_lib_path;
418 command_line.GetOptionValue(FlagForSwitch(Switch::ICUSymbolPrefix),
419 &icu_symbol_prefix);
420 command_line.GetOptionValue(FlagForSwitch(Switch::ICUNativeLibPath),
421 &native_lib_path);
422
423#if FML_OS_ANDROID
424 settings.icu_mapper = GetICUStaticMapping;
425#else
426 settings.icu_mapper = [icu_symbol_prefix, native_lib_path] {
427 return GetSymbolMapping(icu_symbol_prefix, native_lib_path);
428 };
429#endif
430 }
431 }
432
433 settings.use_test_fonts =
434 command_line.HasOption(FlagForSwitch(Switch::UseTestFonts));
435 settings.use_asset_fonts =
436 !command_line.HasOption(FlagForSwitch(Switch::DisableAssetFonts));
437
438#if FML_OS_IOS || FML_OS_IOS_SIMULATOR || SLIMPELLER
439// On these configurations, the Impeller flags are completely ignored with the
440// default taking hold.
441#else // FML_OS_IOS && !FML_OS_IOS_SIMULATOR
442 {
443 std::string enable_impeller_value;
444 if (command_line.GetOptionValue(FlagForSwitch(Switch::EnableImpeller),
445 &enable_impeller_value)) {
446 settings.enable_impeller =
447 enable_impeller_value.empty() || "true" == enable_impeller_value;
448 }
449 }
450#endif // FML_OS_IOS && !FML_OS_IOS_SIMULATOR
451
452 {
453 std::string impeller_backend_value;
454 if (command_line.GetOptionValue(FlagForSwitch(Switch::ImpellerBackend),
455 &impeller_backend_value)) {
456 if (!impeller_backend_value.empty()) {
457 settings.requested_rendering_backend = impeller_backend_value;
458 }
459 }
460 }
461
462 settings.enable_vulkan_validation =
463 command_line.HasOption(FlagForSwitch(Switch::EnableVulkanValidation));
465 command_line.HasOption(FlagForSwitch(Switch::EnableOpenGLGPUTracing));
467 command_line.HasOption(FlagForSwitch(Switch::EnableVulkanGPUTracing));
468
469 settings.enable_embedder_api =
470 command_line.HasOption(FlagForSwitch(Switch::EnableEmbedderAPI));
471
472 settings.prefetched_default_font_manager = command_line.HasOption(
473 FlagForSwitch(Switch::PrefetchedDefaultFontManager));
474
475 std::string all_dart_flags;
476 if (command_line.GetOptionValue(FlagForSwitch(Switch::DartFlags),
477 &all_dart_flags)) {
478 // Assume that individual flags are comma separated.
479 std::vector<std::string> flags = ParseCommaDelimited(all_dart_flags);
480 for (const auto& flag : flags) {
481 if (!IsAllowedDartVMFlag(flag)) {
482 FML_LOG(FATAL) << "Encountered disallowed Dart VM flag: " << flag;
483 }
484 settings.dart_flags.push_back(flag);
485 }
486 }
487
488#if !FLUTTER_RELEASE
489 command_line.GetOptionValue(FlagForSwitch(Switch::LogTag), &settings.log_tag);
490#endif
491
493 command_line.HasOption(FlagForSwitch(Switch::DumpSkpOnShaderCompilation));
494
495 settings.cache_sksl =
496 command_line.HasOption(FlagForSwitch(Switch::CacheSkSL));
497
498 settings.purge_persistent_cache =
499 command_line.HasOption(FlagForSwitch(Switch::PurgePersistentCache));
500
501 if (command_line.HasOption(FlagForSwitch(Switch::OldGenHeapSize))) {
502 std::string old_gen_heap_size;
503 command_line.GetOptionValue(FlagForSwitch(Switch::OldGenHeapSize),
504 &old_gen_heap_size);
505 settings.old_gen_heap_size = std::stoi(old_gen_heap_size);
506 }
507
508 if (command_line.HasOption(
509 FlagForSwitch(Switch::ResourceCacheMaxBytesThreshold))) {
510 std::string resource_cache_max_bytes_threshold;
511 command_line.GetOptionValue(
512 FlagForSwitch(Switch::ResourceCacheMaxBytesThreshold),
513 &resource_cache_max_bytes_threshold);
515 std::stoi(resource_cache_max_bytes_threshold);
516 }
517
518 settings.enable_platform_isolates =
519 command_line.HasOption(FlagForSwitch(Switch::EnablePlatformIsolates));
520
521 settings.enable_surface_control = command_line.HasOption(
522 FlagForSwitch(Switch::EnableAndroidHcppAndSurfaceControl));
523
524 constexpr std::string_view kMergedThreadEnabled = "enabled";
525 constexpr std::string_view kMergedThreadDisabled = "disabled";
526 constexpr std::string_view kMergedThreadMergeAfterLaunch = "mergeAfterLaunch";
527 if (command_line.HasOption(
528 FlagForSwitch(Switch::DisableMergedPlatformUIThread))) {
529 FML_CHECK(!require_merged_platform_ui_thread)
530 << "This platform does not support the "
531 << FlagForSwitch(Switch::DisableMergedPlatformUIThread) << " flag";
532
535 } else if (command_line.HasOption(
536 FlagForSwitch(Switch::MergedPlatformUIThread))) {
537 std::string merged_platform_ui;
538 command_line.GetOptionValue(FlagForSwitch(Switch::MergedPlatformUIThread),
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 "
546 << FlagForSwitch(Switch::MergedPlatformUIThread) << "="
547 << kMergedThreadDisabled << " flag";
548
551 } else if (merged_platform_ui == kMergedThreadMergeAfterLaunch) {
554 }
555 }
556
557 settings.enable_flutter_gpu =
558 command_line.HasOption(FlagForSwitch(Switch::EnableFlutterGPU));
560 command_line.HasOption(FlagForSwitch(Switch::ImpellerLazyShaderMode));
561 settings.impeller_use_sdfs =
562 command_line.HasOption(FlagForSwitch(Switch::ImpellerUseSDFs));
563
564 return settings;
565}
566
567} // namespace flutter
const std::string & argv0() const
std::vector< std::string_view > GetOptionValues(std::string_view name) const
std::string GetOptionValueWithDefault(std::string_view name, std::string_view default_value) const
bool HasOption(std::string_view name, size_t *index=nullptr) const
bool GetOptionValue(std::string_view name, std::string *value) const
bool has_argv0() const
static fml::RefPtr< NativeLibrary > CreateForCurrentProcess()
static fml::RefPtr< NativeLibrary > Create(const char *path)
static int input(yyscan_t yyscanner)
int32_t value
void PrintUsage()
Definition main.cc:159
#define FML_LOG(severity)
Definition logging.h:101
#define FML_CHECK(condition)
Definition logging.h:104
const char * GetDartVersion()
Definition version.cc:23
const char * GetSkiaVersion()
Definition version.cc:19
static bool IsAllowedDartVMFlag(const std::string &flag)
Definition switches.cc:165
static bool GetSwitchValue(const fml::CommandLine &command_line, Switch sw, T *result)
Definition switches.cc:183
it will be possible to load the file into Perfetto s trace viewer use test Running tests that layout and measure text will not yield consistent results across various platforms Enabling this option will make font resolution default to the Ahem test font on all disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition switch_defs.h:52
const char * GetFlutterEngineVersion()
Definition version.cc:11
DEF_SWITCHES_START aot vmservice shared library name
Definition switch_defs.h:27
Settings SettingsFromCommandLine(const fml::CommandLine &command_line, bool require_merged_platform_ui_thread)
Definition switches.cc:230
static std::vector< std::string > ParseCommaDelimited(const std::string &input)
Definition switches.cc:155
const char * GetFlutterContentHash()
Definition version.cc:15
std::unique_ptr< fml::Mapping > GetSymbolMapping(const std::string &symbol_prefix, const std::string &native_lib_path)
Definition switches.cc:202
const std::string_view FlagForSwitch(Switch swtch)
Definition switches.cc:146
std::string JoinPaths(std::initializer_list< std::string > components)
Definition paths.cc:14
static const std::string kAllowedDartFlags[]
Definition switches.cc:51
const std::string_view flag
Definition switches.cc:23
flutter::Switch sw
Definition switches.cc:22
const char * help
Definition switches.cc:24
bool prefetched_default_font_manager
Definition settings.h:218
bool enable_embedder_api
Definition settings.h:363
bool disable_service_origin_check
Definition settings.h:205
std::vector< std::string > vmservice_snapshot_library_path
Definition settings.h:138
bool enable_software_rendering
Definition settings.h:320
bool icu_initialization_required
Definition settings.h:329
bool endless_trace_buffer
Definition settings.h:159
std::string vm_snapshot_instr_path
Definition settings.h:117
bool impeller_enable_lazy_shader_mode
Definition settings.h:242
bool disable_service_auth_codes
Definition settings.h:202
std::string temp_directory_path
Definition settings.h:144
bool enable_opengl_gpu_tracing
Definition settings.h:259
std::string assets_path
Definition settings.h:336
bool enable_dart_profiling
Definition settings.h:160
MergedPlatformUIThread merged_platform_ui_thread
Definition settings.h:382
bool skia_deterministic_rendering_on_cpu
Definition settings.h:321
bool purge_persistent_cache
Definition settings.h:158
bool enable_vulkan_gpu_tracing
Definition settings.h:262
std::vector< std::string > trace_allowlist
Definition settings.h:150
bool enable_flutter_gpu
Definition settings.h:236
bool enable_surface_control
Definition settings.h:239
std::string vm_service_host
Definition settings.h:193
bool enable_vulkan_validation
Definition settings.h:255
MappingCallback icu_mapper
Definition settings.h:331
bool dump_skp_on_shader_compilation
Definition settings.h:156
std::string log_tag
Definition settings.h:323
bool profile_microtasks
Definition settings.h:164
std::string isolate_snapshot_data_path
Definition settings.h:120
uint32_t vm_service_port
Definition settings.h:198
std::vector< std::string > dart_flags
Definition settings.h:145
bool may_insecurely_connect_to_all_domains
Definition settings.h:167
std::string route
Definition settings.h:125
bool enable_checked_mode
Definition settings.h:147
std::string executable_name
Definition settings.h:180
bool enable_service_port_fallback
Definition settings.h:209
bool enable_vm_service_publication
Definition settings.h:190
std::optional< std::vector< std::string > > trace_skia_allowlist
Definition settings.h:151
std::optional< std::string > requested_rendering_backend
Definition settings.h:251
std::string icu_data_path
Definition settings.h:330
bool enable_platform_isolates
Definition settings.h:368
std::string trace_to_file
Definition settings.h:154
bool disable_dart_asserts
Definition settings.h:162
std::string vm_snapshot_data_path
Definition settings.h:115
int64_t old_gen_heap_size
Definition settings.h:355
std::string isolate_snapshot_instr_path
Definition settings.h:122
size_t resource_cache_max_bytes_threshold
Definition settings.h:358
std::string domain_network_policy
Definition settings.h:169
std::vector< std::string > application_library_paths
Definition settings.h:134