Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
dart_embedder_api_impl.cc
Go to the documentation of this file.
1// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
6
7#include "bin/dartutils.h"
8#include "bin/eventhandler.h"
9#include "bin/isolate_data.h"
10#include "bin/process.h"
12#include "bin/thread.h"
13#include "bin/utils.h"
14#include "bin/vmservice_impl.h"
15
16namespace dart {
17namespace embedder {
18
19static char* MallocFormatedString(const char* format, ...) {
20 va_list measure_args;
21 va_start(measure_args, format);
22 intptr_t len = Utils::VSNPrint(nullptr, 0, format, measure_args);
23 va_end(measure_args);
24
25 char* buffer = reinterpret_cast<char*>(malloc(len + 1));
26 MSAN_UNPOISON(buffer, (len + 1));
27 va_list print_args;
28 va_start(print_args, format);
29 Utils::VSNPrint(buffer, (len + 1), format, print_args);
30 va_end(print_args);
31 return buffer;
32}
33
34bool InitOnce(char** error) {
36 bin::OSError err;
37 *error = MallocFormatedString("Error determining current directory: %s\n",
38 err.message());
39 return false;
40 }
43#if !defined(DART_IO_SECURE_SOCKET_DISABLED)
45#endif
47 return true;
48}
49
50void Cleanup() {
52
54#if !defined(DART_IO_SECURE_SOCKET_DISABLED)
56#endif
58}
59
61 const uint8_t* buffer,
62 intptr_t buffer_size,
63 char** error) {
65 data.script_uri, data.main, buffer, buffer_size, data.flags,
66 data.isolate_group_data, data.isolate_data, error);
67 if (kernel_isolate == nullptr) {
68 return nullptr;
69 }
70
73 if (Dart_IsError(result)) {
77 return nullptr;
78 }
79 result = bin::DartUtils::PrepareForScriptLoading(/*is_service_isolate=*/false,
80 /*trace_loading=*/false);
83 return kernel_isolate;
84}
85
87 const VmServiceConfiguration& config,
88 const uint8_t* isolate_data,
89 const uint8_t* isolate_instr,
90 char** error) {
91 if (data.flags == nullptr) {
92 *error = Utils::StrDup("Expected non-null flags");
93 return nullptr;
94 }
95 data.flags->load_vmservice_library = true;
96
97 Dart_Isolate service_isolate = Dart_CreateIsolateGroup(
98 data.script_uri, data.main, isolate_data, isolate_instr, data.flags,
99 data.isolate_group_data, data.isolate_data, error);
100 if (service_isolate == nullptr) {
101 return nullptr;
102 }
103
105 // Load embedder specific bits and return.
106 if (!bin::VmService::Setup(config.ip, config.port, config.dev_mode,
107 config.disable_auth_codes,
109 /*trace_loading=*/false, config.deterministic,
110 /*enable_service_port_fallback=*/false,
111 /*wait_for_dds_to_advertise_service=*/false,
112 /*serve_devtools=*/false,
113 /*serve_observatory=*/true,
114 /*print_dtd=*/false)) {
116 return nullptr;
117 }
118
121 return service_isolate;
122}
123
126 const VmServiceConfiguration& config,
127 const uint8_t* kernel_buffer,
128 intptr_t kernel_buffer_size,
129 char** error) {
130 if (data.flags == nullptr) {
131 *error = Utils::StrDup("Expected non-null flags");
132 return nullptr;
133 }
134 data.flags->load_vmservice_library = true;
135
137 data.script_uri, data.main, kernel_buffer, kernel_buffer_size, data.flags,
138 data.isolate_group_data, data.isolate_data, error);
139 if (service_isolate == nullptr) {
140 return nullptr;
141 }
142
144 // Load embedder specific bits and return.
145 if (!bin::VmService::Setup(config.ip, config.port, config.dev_mode,
146 config.disable_auth_codes,
148 /*trace_loading=*/false, config.deterministic,
149 /*enable_service_port_fallback=*/false,
150 /*wait_for_dds_to_advertise_service=*/false,
151 /*serve_devtools=*/false,
152 /*serve_observatory=*/true,
153 /*print_dtd=*/false)) {
155 return nullptr;
156 }
157
160 return service_isolate;
161}
162
163} // namespace embedder
164} // namespace dart
static uint32_t buffer_size(uint32_t offset, uint32_t maxAlignment)
static char * StrDup(const char *s)
static int static int VSNPrint(char *str, size_t size, const char *format, va_list args)
static bool SetOriginalWorkingDirectory()
Definition dartutils.cc:827
static Dart_Handle PrepareForScriptLoading(bool is_service_isolate, bool trace_loading)
Definition dartutils.cc:574
char * message()
Definition utils.h:36
static void Cleanup()
static void Init()
static void ClearAllSignalHandlers()
Definition process.cc:70
static void InitOnce()
static const char * GetErrorMessage()
static bool Setup(const char *server_ip, intptr_t server_port, bool dev_mode_server, bool auth_codes_disabled, const char *write_service_info_filename, bool trace_loading, bool deterministic, bool enable_service_port_fallback, bool wait_for_dds_to_advertise_service, bool serve_devtools, bool serve_observatory, bool print_dtd)
struct _Dart_Handle * Dart_Handle
Definition dart_api.h:258
struct _Dart_Isolate * Dart_Isolate
Definition dart_api.h:88
static const uint8_t buffer[]
const uint8_t uint32_t uint32_t GError ** error
GAsyncResult * result
uint32_t uint32_t * format
#define MSAN_UNPOISON(ptr, len)
static char * MallocFormatedString(const char *format,...)
bool InitOnce(char **error)
Dart_Isolate CreateVmServiceIsolateFromKernel(const IsolateCreationData &data, const VmServiceConfiguration &config, const uint8_t *kernel_buffer, intptr_t kernel_buffer_size, char **error)
Dart_Isolate CreateKernelServiceIsolate(const IsolateCreationData &data, const uint8_t *buffer, intptr_t buffer_size, char **error)
Dart_Isolate CreateVmServiceIsolate(const IsolateCreationData &data, const VmServiceConfiguration &config, const uint8_t *isolate_data, const uint8_t *isolate_instr, char **error)
DART_EXPORT void Dart_EnterScope()
void * malloc(size_t size)
Definition allocation.cc:19
DART_EXPORT const char * Dart_GetError(Dart_Handle handle)
DART_EXPORT bool Dart_IsError(Dart_Handle handle)
DART_EXPORT void Dart_ExitIsolate()
DART_EXPORT Dart_Isolate Dart_CreateIsolateGroup(const char *script_uri, const char *name, const uint8_t *snapshot_data, const uint8_t *snapshot_instructions, Dart_IsolateFlags *flags, void *isolate_group_data, void *isolate_data, char **error)
DART_EXPORT Dart_Isolate Dart_CreateIsolateGroupFromKernel(const char *script_uri, const char *name, const uint8_t *kernel_buffer, intptr_t kernel_buffer_size, Dart_IsolateFlags *flags, void *isolate_group_data, void *isolate_data, char **error)
DART_EXPORT void Dart_ExitScope()
DART_EXPORT Dart_Handle Dart_LoadScriptFromKernel(const uint8_t *buffer, intptr_t buffer_size)
static int8_t data[kExtLength]
DART_EXPORT void Dart_ShutdownIsolate()