Flutter Engine
The Flutter Engine
Public Member Functions | List of all members
flutter::PlatformConfiguration Class Referencefinal

A class for holding and distributing platform-level information to and from the Dart code in Flutter's framework. More...

#include <platform_configuration.h>

Public Member Functions

 PlatformConfiguration (PlatformConfigurationClient *client)
 Creates a new PlatformConfiguration, typically created by the RuntimeController. More...
 
 PlatformConfiguration (const PlatformConfiguration &)=delete
 
PlatformConfigurationoperator= (const PlatformConfiguration &)=delete
 
 ~PlatformConfiguration ()
 
PlatformConfigurationClientclient () const
 Access to the platform configuration client (which typically is implemented by the RuntimeController). More...
 
void DidCreateIsolate ()
 Called by the RuntimeController once it has created the root isolate, so that the PlatformController can get a handle to the 'dart:ui' library. More...
 
bool AddView (int64_t view_id, const ViewportMetrics &view_metrics)
 Notify the framework that a new view is available. More...
 
bool RemoveView (int64_t view_id)
 Notify the framework that a view is no longer available. More...
 
bool UpdateViewMetrics (int64_t view_id, const ViewportMetrics &metrics)
 Update the view metrics for the specified view. More...
 
void UpdateDisplays (const std::vector< DisplayData > &displays)
 Update the specified display data in the framework. More...
 
void UpdateLocales (const std::vector< std::string > &locales)
 Update the specified locale data in the framework. More...
 
void UpdateUserSettingsData (const std::string &data)
 Update the user settings data in the framework. More...
 
void UpdateInitialLifecycleState (const std::string &data)
 Updates the lifecycle state data in the framework. More...
 
void UpdateSemanticsEnabled (bool enabled)
 Notifies the PlatformConfiguration that the embedder has expressed an opinion about whether the accessibility tree should be generated or not. This call originates in the platform view and is forwarded to the PlatformConfiguration here by the engine. More...
 
void UpdateAccessibilityFeatures (int32_t flags)
 Forward the preference of accessibility features that must be enabled in the semantics tree to the framwork. More...
 
void DispatchPlatformMessage (std::unique_ptr< PlatformMessage > message)
 Notifies the PlatformConfiguration that the client has sent it a message. This call originates in the platform view and has been forwarded through the engine to here. More...
 
void DispatchPointerDataPacket (const PointerDataPacket &packet)
 Notifies the PlatformConfiguration that the client has sent it pointer events. This call originates in the platform view and has been forwarded through the engine to here. More...
 
void DispatchSemanticsAction (int32_t node_id, SemanticsAction action, fml::MallocMapping args)
 Notifies the framework that the embedder encountered an accessibility related action on the specified node. This call originates on the platform view and has been forwarded to the platform configuration here by the engine. More...
 
void BeginFrame (fml::TimePoint frame_time, uint64_t frame_number)
 Notifies the framework that it is time to begin working on a new frame previously scheduled via a call to PlatformConfigurationClient::ScheduleFrame. This call originates in the animator. More...
 
void ReportTimings (std::vector< int64_t > timings)
 Dart code cannot fully measure the time it takes for a specific frame to be rendered. This is because Dart code only runs on the UI task runner. That is only a small part of the overall frame workload. The raster task runner frame workload is executed on a thread where Dart code cannot run (and hence instrument). Besides, due to the pipelined nature of rendering in Flutter, there may be multiple frame workloads being processed at any given time. However, for non-Timeline based profiling, it is useful for trace collection and processing to happen in Dart. To do this, the raster task runner frame workloads need to be instrumented separately. After a set number of these profiles have been gathered, they need to be reported back to Dart code. The engine reports this extra instrumentation information back to the framework by invoking this method at predefined intervals. More...
 
const ViewportMetricsGetMetrics (int view_id)
 Retrieves the viewport metrics with the given ID managed by the PlatformConfiguration. More...
 
void CompletePlatformMessageResponse (int response_id, std::vector< uint8_t > data)
 Responds to a previous platform message to the engine from the framework. More...
 
void CompletePlatformMessageEmptyResponse (int response_id)
 Responds to a previous platform message to the engine from the framework with an empty response. More...
 
Dart_Handle on_error ()
 

Detailed Description

A class for holding and distributing platform-level information to and from the Dart code in Flutter's framework.

It handles communication between the engine and the framework.

It communicates with the RuntimeController through the use of a PlatformConfigurationClient interface, which the RuntimeController defines.

Definition at line 271 of file platform_configuration.h.

Constructor & Destructor Documentation

◆ PlatformConfiguration() [1/2]

flutter::PlatformConfiguration::PlatformConfiguration ( PlatformConfigurationClient client)
explicit

Creates a new PlatformConfiguration, typically created by the RuntimeController.

Parameters
[in]clientThe PlatformConfigurationClient to be injected into the PlatformConfiguration. This client is used to forward requests to the RuntimeController.

Definition at line 34 of file platform_configuration.cc.

36 : client_(client) {}
PlatformConfigurationClient * client() const
Access to the platform configuration client (which typically is implemented by the RuntimeController)...

◆ PlatformConfiguration() [2/2]

flutter::PlatformConfiguration::PlatformConfiguration ( const PlatformConfiguration )
delete

◆ ~PlatformConfiguration()

flutter::PlatformConfiguration::~PlatformConfiguration ( )

Definition at line 38 of file platform_configuration.cc.

38{}

Member Function Documentation

◆ AddView()

bool flutter::PlatformConfiguration::AddView ( int64_t  view_id,
const ViewportMetrics view_metrics 
)

Notify the framework that a new view is available.

        A view must be added before other methods can refer to it,
        including the implicit view. Adding a view that already exists
        triggers an assertion.
Parameters
[in]view_idThe ID of the new view.
[in]viewport_metricsThe initial viewport metrics for the view.
Returns
Whether the view was added.

Definition at line 86 of file platform_configuration.cc.

87 {
88 auto [view_iterator, insertion_happened] =
89 metrics_.emplace(view_id, view_metrics);
90 if (!insertion_happened) {
91 FML_LOG(ERROR) << "View #" << view_id << " already exists.";
92 return false;
93 }
94
95 std::shared_ptr<tonic::DartState> dart_state = add_view_.dart_state().lock();
96 if (!dart_state) {
97 return false;
98 }
99 tonic::DartState::Scope scope(dart_state);
101 add_view_.Get(),
102 {
103 tonic::ToDart(view_id),
104 tonic::ToDart(view_metrics.device_pixel_ratio),
105 tonic::ToDart(view_metrics.physical_width),
106 tonic::ToDart(view_metrics.physical_height),
107 tonic::ToDart(view_metrics.physical_padding_top),
108 tonic::ToDart(view_metrics.physical_padding_right),
109 tonic::ToDart(view_metrics.physical_padding_bottom),
110 tonic::ToDart(view_metrics.physical_padding_left),
111 tonic::ToDart(view_metrics.physical_view_inset_top),
112 tonic::ToDart(view_metrics.physical_view_inset_right),
113 tonic::ToDart(view_metrics.physical_view_inset_bottom),
114 tonic::ToDart(view_metrics.physical_view_inset_left),
115 tonic::ToDart(view_metrics.physical_system_gesture_inset_top),
116 tonic::ToDart(view_metrics.physical_system_gesture_inset_right),
117 tonic::ToDart(view_metrics.physical_system_gesture_inset_bottom),
118 tonic::ToDart(view_metrics.physical_system_gesture_inset_left),
119 tonic::ToDart(view_metrics.physical_touch_slop),
120 tonic::ToDart(view_metrics.physical_display_features_bounds),
121 tonic::ToDart(view_metrics.physical_display_features_type),
122 tonic::ToDart(view_metrics.physical_display_features_state),
123 tonic::ToDart(view_metrics.display_id),
124 }));
125 return true;
126}
const std::weak_ptr< DartState > & dart_state() const
#define FML_LOG(severity)
Definition: logging.h:82
Dart_Handle DartInvoke(Dart_Handle closure, std::initializer_list< Dart_Handle > args)
Definition: dart_invoke.cc:20
bool CheckAndHandleError(Dart_Handle handle)
Definition: dart_error.cc:33
#define ERROR(message)
Definition: elf_loader.cc:260

◆ BeginFrame()

void flutter::PlatformConfiguration::BeginFrame ( fml::TimePoint  frame_time,
uint64_t  frame_number 
)

Notifies the framework that it is time to begin working on a new frame previously scheduled via a call to PlatformConfigurationClient::ScheduleFrame. This call originates in the animator.

The frame time given as the argument indicates the point at which the current frame interval began. It is very slightly (because of scheduling overhead) in the past. If a new layer tree is not produced and given to the raster task runner within one frame interval from this point, the Flutter application will jank.

This method calls the ::_beginFrame method in hooks.dart.

Parameters
[in]frame_timeThe point at which the current frame interval began. May be used by animation interpolators, physics simulations, etc..
[in]frame_numberThe frame number recorded by the animator. Used by the framework to associate frame specific debug information with frame timings and timeline events.

Definition at line 371 of file platform_configuration.cc.

372 {
373 std::shared_ptr<tonic::DartState> dart_state =
374 begin_frame_.dart_state().lock();
375 if (!dart_state) {
376 return;
377 }
378 tonic::DartState::Scope scope(dart_state);
379
380 int64_t microseconds = (frameTime - fml::TimePoint()).ToMicroseconds();
381
383 tonic::DartInvoke(begin_frame_.Get(), {
384 Dart_NewInteger(microseconds),
385 Dart_NewInteger(frame_number),
386 }));
387
389
391}
static UIDartState * Current()
std::chrono::time_point< std::chrono::high_resolution_clock > TimePoint
Definition: timing.h:15
Dart_Handle DartInvokeVoid(Dart_Handle closure)
Definition: dart_invoke.cc:29

◆ client()

PlatformConfigurationClient * flutter::PlatformConfiguration::client ( ) const
inline

Access to the platform configuration client (which typically is implemented by the RuntimeController).

Returns
Returns the client used to construct this PlatformConfiguration.

Definition at line 296 of file platform_configuration.h.

296{ return client_; }

◆ CompletePlatformMessageEmptyResponse()

void flutter::PlatformConfiguration::CompletePlatformMessageEmptyResponse ( int  response_id)

Responds to a previous platform message to the engine from the framework with an empty response.

Parameters
[in]response_idThe unique id that identifies the original platform message to respond to.

Definition at line 429 of file platform_configuration.cc.

430 {
431 if (!response_id) {
432 return;
433 }
434 auto it = pending_responses_.find(response_id);
435 if (it == pending_responses_.end()) {
436 return;
437 }
438 auto response = std::move(it->second);
439 pending_responses_.erase(it);
440 response->CompleteEmpty();
441}

◆ CompletePlatformMessageResponse()

void flutter::PlatformConfiguration::CompletePlatformMessageResponse ( int  response_id,
std::vector< uint8_t >  data 
)

Responds to a previous platform message to the engine from the framework.

Parameters
[in]response_idThe unique id that identifies the original platform message to respond to.
[in]dataThe data to send back in the response.

Definition at line 443 of file platform_configuration.cc.

445 {
446 if (!response_id) {
447 return;
448 }
449 auto it = pending_responses_.find(response_id);
450 if (it == pending_responses_.end()) {
451 return;
452 }
453 auto response = std::move(it->second);
454 pending_responses_.erase(it);
455 response->Complete(std::make_unique<fml::DataMapping>(std::move(data)));
456}
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
Definition: switches.h:41

◆ DidCreateIsolate()

void flutter::PlatformConfiguration::DidCreateIsolate ( )

Called by the RuntimeController once it has created the root isolate, so that the PlatformController can get a handle to the 'dart:ui' library.

It uses the handle to call the hooks in hooks.dart.

Definition at line 40 of file platform_configuration.cc.

40 {
41 Dart_Handle library = Dart_LookupLibrary(tonic::ToDart("dart:ui"));
42
44 Dart_GetField(library, tonic::ToDart("_onError")));
46 Dart_GetField(library, tonic::ToDart("_addView")));
47 remove_view_.Set(tonic::DartState::Current(),
48 Dart_GetField(library, tonic::ToDart("_removeView")));
49 update_window_metrics_.Set(
51 Dart_GetField(library, tonic::ToDart("_updateWindowMetrics")));
52 update_displays_.Set(
54 Dart_GetField(library, tonic::ToDart("_updateDisplays")));
55 update_locales_.Set(tonic::DartState::Current(),
56 Dart_GetField(library, tonic::ToDart("_updateLocales")));
57 update_user_settings_data_.Set(
59 Dart_GetField(library, tonic::ToDart("_updateUserSettingsData")));
60 update_initial_lifecycle_state_.Set(
62 Dart_GetField(library, tonic::ToDart("_updateInitialLifecycleState")));
63 update_semantics_enabled_.Set(
65 Dart_GetField(library, tonic::ToDart("_updateSemanticsEnabled")));
66 update_accessibility_features_.Set(
68 Dart_GetField(library, tonic::ToDart("_updateAccessibilityFeatures")));
69 dispatch_platform_message_.Set(
71 Dart_GetField(library, tonic::ToDart("_dispatchPlatformMessage")));
72 dispatch_pointer_data_packet_.Set(
74 Dart_GetField(library, tonic::ToDart("_dispatchPointerDataPacket")));
75 dispatch_semantics_action_.Set(
77 Dart_GetField(library, tonic::ToDart("_dispatchSemanticsAction")));
78 begin_frame_.Set(tonic::DartState::Current(),
79 Dart_GetField(library, tonic::ToDart("_beginFrame")));
80 draw_frame_.Set(tonic::DartState::Current(),
81 Dart_GetField(library, tonic::ToDart("_drawFrame")));
82 report_timings_.Set(tonic::DartState::Current(),
83 Dart_GetField(library, tonic::ToDart("_reportTimings")));
84}
void Set(DartState *dart_state, Dart_Handle value)
static DartState * Current()
Definition: dart_state.cc:56
struct _Dart_Handle * Dart_Handle
Definition: dart_api.h:258
DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url)
DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_GetField(Dart_Handle container, Dart_Handle name)
Dart_Handle ToDart(const T &object)

◆ DispatchPlatformMessage()

void flutter::PlatformConfiguration::DispatchPlatformMessage ( std::unique_ptr< PlatformMessage message)

Notifies the PlatformConfiguration that the client has sent it a message. This call originates in the platform view and has been forwarded through the engine to here.

Parameters
[in]messageThe message sent from the embedder to the Dart application.

Definition at line 296 of file platform_configuration.cc.

297 {
298 std::shared_ptr<tonic::DartState> dart_state =
299 dispatch_platform_message_.dart_state().lock();
300 if (!dart_state) {
301 FML_DLOG(WARNING)
302 << "Dropping platform message for lack of DartState on channel: "
303 << message->channel();
304 return;
305 }
306 tonic::DartState::Scope scope(dart_state);
307 Dart_Handle data_handle =
308 (message->hasData()) ? ToByteData(message->data()) : Dart_Null();
309 if (Dart_IsError(data_handle)) {
310 FML_DLOG(WARNING)
311 << "Dropping platform message because of a Dart error on channel: "
312 << message->channel();
313 return;
314 }
315
316 int response_id = 0;
317 if (auto response = message->response()) {
318 response_id = next_response_id_++;
319 pending_responses_[response_id] = response;
320 }
321
323 tonic::DartInvoke(dispatch_platform_message_.Get(),
324 {tonic::ToDart(message->channel()), data_handle,
325 tonic::ToDart(response_id)}));
326}
DART_EXPORT Dart_Handle Dart_Null(void)
DART_EXPORT bool Dart_IsError(Dart_Handle handle)
#define FML_DLOG(severity)
Definition: logging.h:102
Win32Message message

◆ DispatchPointerDataPacket()

void flutter::PlatformConfiguration::DispatchPointerDataPacket ( const PointerDataPacket packet)

Notifies the PlatformConfiguration that the client has sent it pointer events. This call originates in the platform view and has been forwarded through the engine to here.

Parameters
[in]packetThe pointer event(s) serialized into a packet.

Definition at line 328 of file platform_configuration.cc.

329 {
330 std::shared_ptr<tonic::DartState> dart_state =
331 dispatch_pointer_data_packet_.dart_state().lock();
332 if (!dart_state) {
333 return;
334 }
335 tonic::DartState::Scope scope(dart_state);
336
337 const std::vector<uint8_t>& buffer = packet.data();
338 Dart_Handle data_handle =
340 if (Dart_IsError(data_handle)) {
341 return;
342 }
343
345 tonic::DartInvoke(dispatch_pointer_data_packet_.Get(), {data_handle}));
346}
static Dart_Handle Create(const void *data, size_t length)
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 to the cache directory This is different from the persistent_cache_path in embedder which is used for Skia shader cache icu native lib Path to the library file that exports the ICU data vm service The hostname IP address on which the Dart VM Service should be served If not defaults to or::depending on whether ipv6 is specified vm service A custom Dart VM Service port The default is to pick a randomly available open port disable vm Disable the Dart VM Service The Dart VM Service is never available in release mode disable vm service Disable mDNS Dart VM Service publication Bind to the IPv6 localhost address for the Dart VM Service Ignored if vm service host is set endless trace buffer
Definition: switches.h:126

◆ DispatchSemanticsAction()

void flutter::PlatformConfiguration::DispatchSemanticsAction ( int32_t  node_id,
SemanticsAction  action,
fml::MallocMapping  args 
)

Notifies the framework that the embedder encountered an accessibility related action on the specified node. This call originates on the platform view and has been forwarded to the platform configuration here by the engine.

Parameters
[in]node_idThe identifier of the accessibility node.
[in]actionThe accessibility related action performed on the node of the specified ID.
[in]argsOptional data that applies to the specified action.

Definition at line 348 of file platform_configuration.cc.

350 {
351 std::shared_ptr<tonic::DartState> dart_state =
352 dispatch_semantics_action_.dart_state().lock();
353 if (!dart_state) {
354 return;
355 }
356 tonic::DartState::Scope scope(dart_state);
357
358 Dart_Handle args_handle =
359 (args.GetSize() <= 0) ? Dart_Null() : ToByteData(args);
360
361 if (Dart_IsError(args_handle)) {
362 return;
363 }
364
366 dispatch_semantics_action_.Get(),
367 {tonic::ToDart(node_id), tonic::ToDart(static_cast<int32_t>(action)),
368 args_handle}));
369}
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args

◆ GetMetrics()

const ViewportMetrics * flutter::PlatformConfiguration::GetMetrics ( int  view_id)

Retrieves the viewport metrics with the given ID managed by the PlatformConfiguration.

Parameters
[in]view_idThe id of the view's viewport metrics to return.
Returns
a pointer to the ViewportMetrics. Returns nullptr if the ID is not found.

Definition at line 420 of file platform_configuration.cc.

420 {
421 auto found = metrics_.find(view_id);
422 if (found != metrics_.end()) {
423 return &found->second;
424 } else {
425 return nullptr;
426 }
427}

◆ on_error()

Dart_Handle flutter::PlatformConfiguration::on_error ( )
inline

Definition at line 517 of file platform_configuration.h.

517{ return on_error_.Get(); }

◆ operator=()

PlatformConfiguration & flutter::PlatformConfiguration::operator= ( const PlatformConfiguration )
delete

◆ RemoveView()

bool flutter::PlatformConfiguration::RemoveView ( int64_t  view_id)

Notify the framework that a view is no longer available.

        Removing a view that does not exist triggers an assertion.

        The implicit view (kFlutterImplicitViewId) should never be
        removed. Doing so triggers an assertion.
Parameters
[in]view_idThe ID of the view.
Returns
Whether the view was removed.

Definition at line 128 of file platform_configuration.cc.

128 {
129 if (view_id == kFlutterImplicitViewId) {
130 FML_LOG(FATAL) << "The implicit view #" << view_id << " cannot be removed.";
131 return false;
132 }
133 size_t erased_elements = metrics_.erase(view_id);
134 if (erased_elements == 0) {
135 FML_LOG(ERROR) << "View #" << view_id << " doesn't exist.";
136 return false;
137 }
138
139 std::shared_ptr<tonic::DartState> dart_state =
140 remove_view_.dart_state().lock();
141 if (!dart_state) {
142 return false;
143 }
144 tonic::DartState::Scope scope(dart_state);
146 tonic::DartInvoke(remove_view_.Get(), {
147 tonic::ToDart(view_id),
148 }));
149 return true;
150}
#define FATAL(error)
constexpr int64_t kFlutterImplicitViewId
Definition: constants.h:35

◆ ReportTimings()

void flutter::PlatformConfiguration::ReportTimings ( std::vector< int64_t >  timings)

Dart code cannot fully measure the time it takes for a specific frame to be rendered. This is because Dart code only runs on the UI task runner. That is only a small part of the overall frame workload. The raster task runner frame workload is executed on a thread where Dart code cannot run (and hence instrument). Besides, due to the pipelined nature of rendering in Flutter, there may be multiple frame workloads being processed at any given time. However, for non-Timeline based profiling, it is useful for trace collection and processing to happen in Dart. To do this, the raster task runner frame workloads need to be instrumented separately. After a set number of these profiles have been gathered, they need to be reported back to Dart code. The engine reports this extra instrumentation information back to the framework by invoking this method at predefined intervals.

See also
FrameTiming
Parameters
[in]timingsCollection of FrameTiming::kStatisticsCount * 'n' values for n frames whose timings have not been reported yet. Many of the values are timestamps, but a collection of integers is reported here for easier conversions to Dart objects. The timestamps are measured against the system monotonic clock measured in microseconds.

Definition at line 393 of file platform_configuration.cc.

393 {
394 std::shared_ptr<tonic::DartState> dart_state =
395 report_timings_.dart_state().lock();
396 if (!dart_state) {
397 return;
398 }
399 tonic::DartState::Scope scope(dart_state);
400
401 Dart_Handle data_handle =
403
405 void* data = nullptr;
406 intptr_t num_acquired = 0;
408 Dart_TypedDataAcquireData(data_handle, &type, &data, &num_acquired)));
409 FML_DCHECK(num_acquired == static_cast<int>(timings.size()));
410
411 memcpy(data, timings.data(), sizeof(int64_t) * timings.size());
413
415 tonic::DartInvoke(report_timings_.Get(), {
416 data_handle,
417 }));
418}
GLenum type
DART_EXPORT Dart_Handle Dart_TypedDataReleaseData(Dart_Handle object)
DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object, Dart_TypedData_Type *type, void **data, intptr_t *len)
Dart_TypedData_Type
Definition: dart_api.h:2612
@ Dart_TypedData_kInt64
Definition: dart_api.h:2621
DART_EXPORT Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type, intptr_t length)
#define FML_CHECK(condition)
Definition: logging.h:85
#define FML_DCHECK(condition)
Definition: logging.h:103

◆ UpdateAccessibilityFeatures()

void flutter::PlatformConfiguration::UpdateAccessibilityFeatures ( int32_t  flags)

Forward the preference of accessibility features that must be enabled in the semantics tree to the framwork.

Parameters
[in]flagsThe accessibility features that must be generated in the semantics tree.

Definition at line 284 of file platform_configuration.cc.

284 {
285 std::shared_ptr<tonic::DartState> dart_state =
286 update_accessibility_features_.dart_state().lock();
287 if (!dart_state) {
288 return;
289 }
290 tonic::DartState::Scope scope(dart_state);
291
293 update_accessibility_features_.Get(), {tonic::ToDart(values)}));
294}

◆ UpdateDisplays()

void flutter::PlatformConfiguration::UpdateDisplays ( const std::vector< DisplayData > &  displays)

Update the specified display data in the framework.

Parameters
[in]displaysThe display data to send to Dart.

Definition at line 196 of file platform_configuration.cc.

197 {
198 std::vector<DisplayId> ids;
199 std::vector<double> widths;
200 std::vector<double> heights;
201 std::vector<double> device_pixel_ratios;
202 std::vector<double> refresh_rates;
203 for (const auto& display : displays) {
204 ids.push_back(display.id);
205 widths.push_back(display.width);
206 heights.push_back(display.height);
207 device_pixel_ratios.push_back(display.pixel_ratio);
208 refresh_rates.push_back(display.refresh_rate);
209 }
210 std::shared_ptr<tonic::DartState> dart_state =
211 update_displays_.dart_state().lock();
212 if (!dart_state) {
213 return;
214 }
215 tonic::DartState::Scope scope(dart_state);
217 update_displays_.Get(),
218 {
219 tonic::ToDart<std::vector<DisplayId>>(ids),
220 tonic::ToDart<std::vector<double>>(widths),
221 tonic::ToDart<std::vector<double>>(heights),
222 tonic::ToDart<std::vector<double>>(device_pixel_ratios),
223 tonic::ToDart<std::vector<double>>(refresh_rates),
224 }));
225}
const SkScalar widths[]
Definition: StrokerTest.cpp:39

◆ UpdateInitialLifecycleState()

void flutter::PlatformConfiguration::UpdateInitialLifecycleState ( const std::string &  data)

Updates the lifecycle state data in the framework.

Parameters
[in]dataThe lifecycle state data.

Definition at line 257 of file platform_configuration.cc.

258 {
259 std::shared_ptr<tonic::DartState> dart_state =
260 update_initial_lifecycle_state_.dart_state().lock();
261 if (!dart_state) {
262 return;
263 }
264 tonic::DartState::Scope scope(dart_state);
266 update_initial_lifecycle_state_.Get(), {
267 tonic::StdStringToDart(data),
268 }));
269}

◆ UpdateLocales()

void flutter::PlatformConfiguration::UpdateLocales ( const std::vector< std::string > &  locales)

Update the specified locale data in the framework.

Parameters
[in]locale_dataThe locale data. This should consist of groups of 4 strings, each group representing a single locale.

Definition at line 227 of file platform_configuration.cc.

228 {
229 std::shared_ptr<tonic::DartState> dart_state =
230 update_locales_.dart_state().lock();
231 if (!dart_state) {
232 return;
233 }
234
235 tonic::DartState::Scope scope(dart_state);
237 tonic::DartInvoke(update_locales_.Get(),
238 {
239 tonic::ToDart<std::vector<std::string>>(locales),
240 }));
241}

◆ UpdateSemanticsEnabled()

void flutter::PlatformConfiguration::UpdateSemanticsEnabled ( bool  enabled)

Notifies the PlatformConfiguration that the embedder has expressed an opinion about whether the accessibility tree should be generated or not. This call originates in the platform view and is forwarded to the PlatformConfiguration here by the engine.

Parameters
[in]enabledWhether the accessibility tree is enabled or disabled.

Definition at line 271 of file platform_configuration.cc.

271 {
272 std::shared_ptr<tonic::DartState> dart_state =
273 update_semantics_enabled_.dart_state().lock();
274 if (!dart_state) {
275 return;
276 }
277 tonic::DartState::Scope scope(dart_state);
279
280 tonic::CheckAndHandleError(tonic::DartInvoke(update_semantics_enabled_.Get(),
281 {tonic::ToDart(enabled)}));
282}
static void ThrowIfUIOperationsProhibited()

◆ UpdateUserSettingsData()

void flutter::PlatformConfiguration::UpdateUserSettingsData ( const std::string &  data)

Update the user settings data in the framework.

Parameters
[in]dataThe user settings data.

Definition at line 243 of file platform_configuration.cc.

243 {
244 std::shared_ptr<tonic::DartState> dart_state =
245 update_user_settings_data_.dart_state().lock();
246 if (!dart_state) {
247 return;
248 }
249 tonic::DartState::Scope scope(dart_state);
250
251 tonic::CheckAndHandleError(tonic::DartInvoke(update_user_settings_data_.Get(),
252 {
253 tonic::StdStringToDart(data),
254 }));
255}

◆ UpdateViewMetrics()

bool flutter::PlatformConfiguration::UpdateViewMetrics ( int64_t  view_id,
const ViewportMetrics metrics 
)

Update the view metrics for the specified view.

        If the view is not found, silently return false.
Parameters
[in]view_idThe ID of the view.
[in]metricsThe new metrics of the view.
Returns
Whether the view is found.

Definition at line 152 of file platform_configuration.cc.

154 {
155 auto found_iter = metrics_.find(view_id);
156 if (found_iter == metrics_.end()) {
157 return false;
158 }
159
160 found_iter->second = view_metrics;
161
162 std::shared_ptr<tonic::DartState> dart_state =
163 update_window_metrics_.dart_state().lock();
164 if (!dart_state) {
165 return false;
166 }
167 tonic::DartState::Scope scope(dart_state);
169 update_window_metrics_.Get(),
170 {
171 tonic::ToDart(view_id),
172 tonic::ToDart(view_metrics.device_pixel_ratio),
173 tonic::ToDart(view_metrics.physical_width),
174 tonic::ToDart(view_metrics.physical_height),
175 tonic::ToDart(view_metrics.physical_padding_top),
176 tonic::ToDart(view_metrics.physical_padding_right),
177 tonic::ToDart(view_metrics.physical_padding_bottom),
178 tonic::ToDart(view_metrics.physical_padding_left),
179 tonic::ToDart(view_metrics.physical_view_inset_top),
180 tonic::ToDart(view_metrics.physical_view_inset_right),
181 tonic::ToDart(view_metrics.physical_view_inset_bottom),
182 tonic::ToDart(view_metrics.physical_view_inset_left),
183 tonic::ToDart(view_metrics.physical_system_gesture_inset_top),
184 tonic::ToDart(view_metrics.physical_system_gesture_inset_right),
185 tonic::ToDart(view_metrics.physical_system_gesture_inset_bottom),
186 tonic::ToDart(view_metrics.physical_system_gesture_inset_left),
187 tonic::ToDart(view_metrics.physical_touch_slop),
188 tonic::ToDart(view_metrics.physical_display_features_bounds),
189 tonic::ToDart(view_metrics.physical_display_features_type),
190 tonic::ToDart(view_metrics.physical_display_features_state),
191 tonic::ToDart(view_metrics.display_id),
192 }));
193 return true;
194}

The documentation for this class was generated from the following files: