Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
dart_project.h
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#ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_CLIENT_WRAPPER_INCLUDE_FLUTTER_DART_PROJECT_H_
6#define FLUTTER_SHELL_PLATFORM_WINDOWS_CLIENT_WRAPPER_INCLUDE_FLUTTER_DART_PROJECT_H_
7
8#include <string>
9#include <vector>
10
11namespace flutter {
12
13// Configures how the Flutter engine selects a GPU.
14enum class GpuPreference {
15 // No preference.
17 // Prefer energy efficiency over performance, such as an integrated GPU.
18 // This falls back to a high performance GPU if no low power GPU is
19 // available.
21 // Prefer performance over energy efficiency, such as a discrete GPU or
22 // dedicated GPU.
23 // This falls back to a low power GPU if no high performance GPU is available.
25};
26
27// Configures the thread policy for running the UI isolate.
28enum class UIThreadPolicy {
29 // Default value. Currently will run the UI isolate on separate thread,
30 // later will be changed to running the UI isolate on platform thread.
31 Default,
32 // Run the UI isolate on platform thread.
34 // Run the UI isolate on a separate thread.
36};
37
38// Configures the accessibility implementation used by Flutter.
40 // Default value. Flutter will automatically select the best available
41 // implementation.
42 Default,
43 // Use the IAccessible implementation.
45 // Use the experimental IAccessibleEx implementation.
47};
48
49// Configures the Impeller enablement switch.
50enum class ImpellerSwitch {
51 // Use the default Impeller enablement behavior.
52 Default,
53 // Enable Impeller.
54 Enabled,
55 // Disable Impeller.
57};
58
59// A set of Flutter and Dart assets used to initialize a Flutter engine.
61 public:
62 // Creates a DartProject from a series of absolute paths.
63 // The three paths are:
64 // - assets_path: Path to the assets directory as built by the Flutter tool.
65 // - icu_data_path: Path to the icudtl.dat file.
66 // - aot_library_path: Path to the AOT snapshot file.
67 //
68 // The paths may either be absolute or relative to the directory containing
69 // the running executable.
70 explicit DartProject(const std::wstring& assets_path,
71 const std::wstring& icu_data_path,
72 const std::wstring& aot_library_path) {
73 assets_path_ = assets_path;
74 icu_data_path_ = icu_data_path;
75 aot_library_path_ = aot_library_path;
76 }
77
78 // Creates a DartProject from a directory path. The directory should contain
79 // the following top-level items:
80 // - icudtl.dat (provided as a resource by the Flutter tool)
81 // - flutter_assets (as built by the Flutter tool)
82 // - app.so, for an AOT build (as built by the Flutter tool)
83 //
84 // The path can either be absolute, or relative to the directory containing
85 // the running executable.
86 explicit DartProject(const std::wstring& path) {
87 assets_path_ = path + L"\\flutter_assets";
88 icu_data_path_ = path + L"\\icudtl.dat";
89 aot_library_path_ = path + L"\\app.so";
90 }
91
92 ~DartProject() = default;
93
94 // Sets the Dart entrypoint to the specified value.
95 //
96 // If not set, the default entrypoint (main) is used. Custom Dart entrypoints
97 // must be decorated with `@pragma('vm:entry-point')`.
98 void set_dart_entrypoint(const std::string& entrypoint) {
99 if (entrypoint.empty()) {
100 return;
101 }
102 dart_entrypoint_ = entrypoint;
103 }
104
105 // Returns the Dart entrypoint.
106 const std::string& dart_entrypoint() const { return dart_entrypoint_; }
107
108 // Sets the command line arguments that should be passed to the Dart
109 // entrypoint.
110 void set_dart_entrypoint_arguments(std::vector<std::string> arguments) {
111 dart_entrypoint_arguments_ = std::move(arguments);
112 }
113
114 // Returns any command line arguments that should be passed to the Dart
115 // entrypoint.
116 const std::vector<std::string>& dart_entrypoint_arguments() const {
117 return dart_entrypoint_arguments_;
118 }
119
120 // Sets the GPU usage preference for flutter engine.
122 gpu_preference_ = gpu_preference;
123 }
124
125 // Returns the project's GPU preference.
126 // Defaults to NoPreference.
127 GpuPreference gpu_preference() const { return gpu_preference_; }
128
129 // Sets the thread policy for UI isolate.
131 ui_thread_policy_ = policy;
132 }
133
134 // Returns the policy for UI isolate.
135 // Defaults to UIThreadPolicy::Default.
136 UIThreadPolicy ui_thread_policy() const { return ui_thread_policy_; }
137
138 // Sets the accessibility implementation used by Flutter.
142
143 // Returns the accessibility implementation used by Flutter.
144 // Defaults to AccessibilityMode::Defaults.
145 AccessibilityMode accessibility_mode() const { return accessibility_mode_; }
146
147 // Sets the Impeller enablement switch.
151
152 // Returns the Impeller enablement switch.
153 // Defaults to ImpellerSwitch::Default.
154 ImpellerSwitch impeller_switch() const { return impeller_switch_; }
155
156 private:
157 // Accessors for internals are private, so that they can be changed if more
158 // flexible options for project structures are needed later without it
159 // being a breaking change. Provide access to internal classes that need
160 // them.
161 friend class FlutterEngine;
163 friend class DartProjectTest;
164
165 const std::wstring& assets_path() const { return assets_path_; }
166 const std::wstring& icu_data_path() const { return icu_data_path_; }
167 const std::wstring& aot_library_path() const { return aot_library_path_; }
168
169 // The path to the assets directory.
170 std::wstring assets_path_;
171 // The path to the ICU data.
172 std::wstring icu_data_path_;
173 // The path to the AOT library. This will always return a path, but non-AOT
174 // builds will not be expected to actually have a library at that path.
175 std::wstring aot_library_path_;
176 // The Dart entrypoint to launch.
177 std::string dart_entrypoint_;
178 // The list of arguments to pass through to the Dart entrypoint.
179 std::vector<std::string> dart_entrypoint_arguments_;
180 // The preference for GPU to be used by flutter engine.
182 // Thread policy for UI isolate.
183 UIThreadPolicy ui_thread_policy_ = UIThreadPolicy::Default;
184 // The accessibility implementation used by Flutter.
185 AccessibilityMode accessibility_mode_ = AccessibilityMode::Default;
186 // The Impeller enablement switch.
187 ImpellerSwitch impeller_switch_ = ImpellerSwitch::Default;
188};
189
190} // namespace flutter
191
192#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_CLIENT_WRAPPER_INCLUDE_FLUTTER_DART_PROJECT_H_
void set_dart_entrypoint(const std::string &entrypoint)
void set_ui_thread_policy(UIThreadPolicy policy)
void set_gpu_preference(GpuPreference gpu_preference)
DartProject(const std::wstring &assets_path, const std::wstring &icu_data_path, const std::wstring &aot_library_path)
const std::vector< std::string > & dart_entrypoint_arguments() const
const std::string & dart_entrypoint() const
DartProject(const std::wstring &path)
AccessibilityMode accessibility_mode() const
void set_dart_entrypoint_arguments(std::vector< std::string > arguments)
UIThreadPolicy ui_thread_policy() const
void set_impeller_switch(ImpellerSwitch impeller_switch)
void set_accessibility_mode(AccessibilityMode accessibility_mode)
GpuPreference gpu_preference() const
ImpellerSwitch impeller_switch() const
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
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 policy