Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Namespaces | Macros | Typedefs
dart_ui.cc File Reference
#include "flutter/lib/ui/dart_ui.h"
#include <mutex>
#include <string_view>
#include "flutter/common/constants.h"
#include "flutter/common/settings.h"
#include "flutter/fml/build_config.h"
#include "flutter/lib/ui/compositing/scene.h"
#include "flutter/lib/ui/compositing/scene_builder.h"
#include "flutter/lib/ui/dart_runtime_hooks.h"
#include "flutter/lib/ui/isolate_name_server/isolate_name_server_natives.h"
#include "flutter/lib/ui/painting/canvas.h"
#include "flutter/lib/ui/painting/codec.h"
#include "flutter/lib/ui/painting/color_filter.h"
#include "flutter/lib/ui/painting/engine_layer.h"
#include "flutter/lib/ui/painting/fragment_program.h"
#include "flutter/lib/ui/painting/fragment_shader.h"
#include "flutter/lib/ui/painting/gradient.h"
#include "flutter/lib/ui/painting/image.h"
#include "flutter/lib/ui/painting/image_descriptor.h"
#include "flutter/lib/ui/painting/image_filter.h"
#include "flutter/lib/ui/painting/image_shader.h"
#include "flutter/lib/ui/painting/immutable_buffer.h"
#include "flutter/lib/ui/painting/path.h"
#include "flutter/lib/ui/painting/path_measure.h"
#include "flutter/lib/ui/painting/picture.h"
#include "flutter/lib/ui/painting/picture_recorder.h"
#include "flutter/lib/ui/painting/vertices.h"
#include "flutter/lib/ui/semantics/semantics_update.h"
#include "flutter/lib/ui/semantics/semantics_update_builder.h"
#include "flutter/lib/ui/semantics/string_attribute.h"
#include "flutter/lib/ui/text/font_collection.h"
#include "flutter/lib/ui/text/paragraph.h"
#include "flutter/lib/ui/text/paragraph_builder.h"
#include "flutter/lib/ui/window/platform_configuration.h"
#include "flutter/lib/ui/window/platform_isolate.h"
#include "third_party/tonic/converter/dart_converter.h"
#include "third_party/tonic/dart_args.h"
#include "third_party/tonic/logging/dart_error.h"

Go to the source code of this file.

Namespaces

namespace  flutter
 

Macros

#define FFI_FUNCTION_LIST(V)
 
#define FFI_METHOD_LIST(V)
 
#define FFI_FUNCTION_INSERT(FUNCTION)
 
#define FFI_METHOD_INSERT(CLASS, METHOD)
 

Typedefs

typedef CanvasImage flutter::Image
 
typedef CanvasPathMeasure flutter::PathMeasure
 
typedef CanvasGradient flutter::Gradient
 
typedef CanvasPath flutter::Path
 

Macro Definition Documentation

◆ FFI_FUNCTION_INSERT

#define FFI_FUNCTION_INSERT (   FUNCTION)
Value:
g_function_dispatchers.insert(std::make_pair( \
std::string_view(#FUNCTION), \
reinterpret_cast<void*>( \
tonic::FfiDispatcher<void, decltype(&FUNCTION), &FUNCTION>::Call)));

Definition at line 332 of file dart_ui.cc.

344 {
345
346std::once_flag g_dispatchers_init_flag;
347std::unordered_map<std::string_view, void*> g_function_dispatchers;
348
349void* ResolveFfiNativeFunction(const char* name, uintptr_t args) {
350 auto it = g_function_dispatchers.find(name);
351 return (it != g_function_dispatchers.end()) ? it->second : nullptr;
352}
353
354void InitDispatcherMap() {
357
358#ifdef IMPELLER_ENABLE_3D
359 FFI_FUNCTION_LIST_3D(FFI_FUNCTION_INSERT)
360 FFI_METHOD_LIST_3D(FFI_METHOD_INSERT)
361#endif // IMPELLER_ENABLE_3D
362}
363
364} // anonymous namespace
365
366void DartUI::InitForIsolate(const Settings& settings) {
367 std::call_once(g_dispatchers_init_flag, InitDispatcherMap);
368
369 auto dart_ui = Dart_LookupLibrary(ToDart("dart:ui"));
370 if (Dart_IsError(dart_ui)) {
371 Dart_PropagateError(dart_ui);
372 }
373
374 // Set up FFI Native resolver for dart:ui.
376 Dart_SetFfiNativeResolver(dart_ui, ResolveFfiNativeFunction);
377 if (Dart_IsError(result)) {
379 }
380
381 if (settings.enable_impeller) {
382 result = Dart_SetField(dart_ui, ToDart("_impellerEnabled"), Dart_True());
383 if (Dart_IsError(result)) {
385 }
386 }
387
388 if (settings.enable_platform_isolates) {
389 result =
390 Dart_SetField(dart_ui, ToDart("_platformIsolatesEnabled"), Dart_True());
391 if (Dart_IsError(result)) {
393 }
394 }
395
396 result = Dart_SetField(dart_ui, ToDart("_implicitViewId"),
397 Dart_NewInteger(kFlutterImplicitViewId));
398 if (Dart_IsError(result)) {
400 }
401}
402
403} // namespace flutter
DART_EXPORT Dart_Handle Dart_SetFfiNativeResolver(Dart_Handle library, Dart_FfiNativeResolver resolver)
struct _Dart_Handle * Dart_Handle
Definition dart_api.h:258
DART_EXPORT void Dart_PropagateError(Dart_Handle handle)
DART_EXPORT Dart_Handle Dart_True(void)
DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url)
DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_SetField(Dart_Handle container, Dart_Handle name, Dart_Handle value)
DART_EXPORT Dart_Handle Dart_NewInteger(int64_t value)
DART_EXPORT bool Dart_IsError(Dart_Handle handle)
#define FFI_FUNCTION_LIST(V)
Definition dart_ui.cc:73
#define FFI_FUNCTION_INSERT(FUNCTION)
Definition dart_ui.cc:332
#define FFI_METHOD_LIST(V)
Definition dart_ui.cc:142
#define FFI_METHOD_INSERT(CLASS, METHOD)
Definition dart_ui.cc:338
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
GAsyncResult * result
const char * name
Definition fuchsia.cc:50
Dart_Handle ToDart(const T &object)

◆ FFI_FUNCTION_LIST

#define FFI_FUNCTION_LIST (   V)

Definition at line 73 of file dart_ui.cc.

◆ FFI_METHOD_INSERT

#define FFI_METHOD_INSERT (   CLASS,
  METHOD 
)
Value:
g_function_dispatchers.insert( \
std::make_pair(std::string_view(#CLASS "::" #METHOD), \
reinterpret_cast<void*>( \
tonic::FfiDispatcher<CLASS, decltype(&CLASS::METHOD), \
&CLASS::METHOD>::Call)));

Definition at line 338 of file dart_ui.cc.

◆ FFI_METHOD_LIST

#define FFI_METHOD_LIST (   V)

Definition at line 142 of file dart_ui.cc.