// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef FLUTTER_COMMON_SETTINGS_H_ #define FLUTTER_COMMON_SETTINGS_H_ #include #include #include #include #include #include "flutter/fml/closure.h" #include "flutter/fml/mapping.h" #include "flutter/fml/unique_fd.h" namespace flutter { using TaskObserverAdd = std::function; using TaskObserverRemove = std::function; using UnhandledExceptionCallback = std::function; // TODO(chinmaygarde): Deprecate all the "path" struct members in favor of the // callback that generates the mapping from these paths. // https://github.com/flutter/flutter/issues/26783 using MappingCallback = std::function(void)>; using MappingsCallback = std::function>(void)>; struct Settings { Settings(); Settings(const Settings& other); ~Settings(); // VM settings std::string vm_snapshot_data_path; // deprecated MappingCallback vm_snapshot_data; std::string vm_snapshot_instr_path; // deprecated MappingCallback vm_snapshot_instr; std::string isolate_snapshot_data_path; // deprecated MappingCallback isolate_snapshot_data; std::string isolate_snapshot_instr_path; // deprecated MappingCallback isolate_snapshot_instr; // Returns the Mapping to a kernel buffer which contains sources for dart:* // libraries. MappingCallback dart_library_sources_kernel; std::string application_library_path; std::string application_kernel_asset; // deprecated std::string application_kernel_list_asset; // deprecated MappingsCallback application_kernels; std::string temp_directory_path; std::vector dart_flags; // Isolate settings bool start_paused = false; bool trace_skia = false; bool trace_startup = false; bool trace_systrace = false; bool dump_skp_on_shader_compilation = false; bool endless_trace_buffer = false; bool enable_dart_profiling = false; bool disable_dart_asserts = false; // Used as the script URI in debug messages. Does not affect how the Dart code // is executed. std::string advisory_script_uri = "main.dart"; // Used as the script entrypoint in debug messages. Does not affect how the // Dart code is executed. std::string advisory_script_entrypoint = "main"; // Observatory settings bool enable_observatory = false; // Port on target will be auto selected by the OS. A message will be printed // on the target with the port after it has been selected. uint32_t observatory_port = 0; bool ipv6 = false; // Determines whether an authentication code is required to communicate with // the VM service. bool disable_service_auth_codes = true; // Font settings bool use_test_fonts = false; // All shells in the process share the same VM. The last shell to shutdown // should typically shut down the VM as well. However, applications depend on // the behavior of "warming-up" the VM by creating a shell that does not do // anything. This used to work earlier when the VM could not be shut down (and // hence never was). Shutting down the VM now breaks such assumptions in // existing embedders. To keep this behavior consistent and allow existing // embedders the chance to migrate, this flag defaults to true. Any shell // launched with this flag set to true will leak the VM in the process. There // is no way to shut down the VM once such a shell has been started. All // shells in the platform (via their embedding APIs) should cooperate to make // sure this flag is never set if they want the VM to shutdown and free all // associated resources. bool leak_vm = true; // Engine settings TaskObserverAdd task_observer_add; TaskObserverRemove task_observer_remove; // The main isolate is current when this callback is made. This is a good spot // to perform native Dart bindings for libraries not built in. fml::closure root_isolate_create_callback; fml::closure isolate_create_callback; // The isolate is not current and may have already been destroyed when this // call is made. fml::closure root_isolate_shutdown_callback; fml::closure isolate_shutdown_callback; // The callback made on the UI thread in an isolate scope when the engine // detects that the framework is idle. The VM also uses this time to perform // tasks suitable when idling. Due to this, embedders are still advised to be // as fast as possible in returning from this callback. Long running // operations in this callback do have the capability of introducing jank. std::function idle_notification_callback; // A callback given to the embedder to react to unhandled exceptions in the // running Flutter application. This callback is made on an internal engine // managed thread and embedders must re-thread as necessary. Performing // blocking calls in this callback will cause applications to jank. UnhandledExceptionCallback unhandled_exception_callback; bool enable_software_rendering = false; bool skia_deterministic_rendering_on_cpu = false; bool verbose_logging = false; std::string log_tag = "flutter"; MappingCallback icu_mapper; // Assets settings fml::UniqueFD::element_type assets_dir = fml::UniqueFD::traits_type::InvalidValue(); std::string assets_path; }; } // namespace flutter #endif // FLUTTER_COMMON_SETTINGS_H_