1 /*
2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "ark_native_engine.h"
17
18 #include "ark_native_deferred.h"
19 #include "ark_native_engine_impl.h"
20 #include "ark_native_reference.h"
21
22 #ifdef ENABLE_CONTAINER_SCOPE
23 #include "core/common/container_scope.h"
24 #endif
25
26 #include "native_engine/native_property.h"
27
28 #include "native_value/ark_native_array.h"
29 #include "native_value/ark_native_array_buffer.h"
30 #include "native_value/ark_native_big_int.h"
31 #include "native_value/ark_native_boolean.h"
32 #include "native_value/ark_native_data_view.h"
33 #include "native_value/ark_native_external.h"
34 #include "native_value/ark_native_function.h"
35 #include "native_value/ark_native_number.h"
36 #include "native_value/ark_native_object.h"
37 #include "native_value/ark_native_string.h"
38 #include "native_value/ark_native_typed_array.h"
39 #include "native_value/ark_native_date.h"
40
41 #ifndef PREVIEW
42 #if defined(ECMASCRIPT_SUPPORT_SNAPSHOT)
43 #include "parameters.h"
44 #endif
45 #endif
46 #include "securec.h"
47 #include "utils/log.h"
48
ArkNativeEngine(EcmaVM * vm,void * jsEngine)49 ArkNativeEngine::ArkNativeEngine(EcmaVM* vm, void* jsEngine) : NativeEngine(jsEngine)
50 {
51 HILOG_DEBUG("ArkNativeEngine::ArkNativeEngine");
52 nativeEngineImpl_ = new ArkNativeEngineImpl(vm, this, jsEngine);
53 }
54
ArkNativeEngine(NativeEngineInterface * engineImpl,void * jsEngine,bool isAppModule)55 ArkNativeEngine::ArkNativeEngine(NativeEngineInterface* engineImpl, void* jsEngine, bool isAppModule)
56 : NativeEngine(jsEngine)
57 {
58 nativeEngineImpl_ = engineImpl;
59 isAppModule_ = isAppModule;
60 HILOG_DEBUG("ArkNativeEngine::ArkNativeEngine");
61 }
62
~ArkNativeEngine()63 ArkNativeEngine::~ArkNativeEngine()
64 {
65 HILOG_INFO("ArkNativeEngine::~ArkNativeEngine");
66 }
67
GetEcmaVm() const68 const EcmaVM* ArkNativeEngine::GetEcmaVm() const
69 {
70 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
71 return arkNativeEngineImpl->GetEcmaVm();
72 }
73
GetModuleFromName(const std::string & moduleName,bool isAppModule,const std::string & id,const std::string & param,const std::string & instanceName,void ** instance)74 panda::Local<panda::ObjectRef> ArkNativeEngine::GetModuleFromName(
75 const std::string& moduleName, bool isAppModule, const std::string& id, const std::string& param,
76 const std::string& instanceName, void** instance)
77 {
78 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
79 return arkNativeEngineImpl->GetModuleFromName(this, moduleName, isAppModule, id, param, instanceName, instance);
80 }
81
LoadModuleByName(const std::string & moduleName,bool isAppModule,const std::string & param,const std::string & instanceName,void * instance,const std::string & path)82 panda::Local<panda::ObjectRef> ArkNativeEngine::LoadModuleByName(const std::string& moduleName, bool isAppModule,
83 const std::string& param, const std::string& instanceName, void* instance, const std::string& path)
84 {
85 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
86 return arkNativeEngineImpl->LoadModuleByName(this, moduleName, isAppModule, param, instanceName, instance, path);
87 }
88
Loop(LoopMode mode,bool needSync)89 void ArkNativeEngine::Loop(LoopMode mode, bool needSync)
90 {
91 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
92 return arkNativeEngineImpl->Loop(mode, needSync);
93 }
94
GetGlobal()95 NativeValue* ArkNativeEngine::GetGlobal()
96 {
97 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
98 return arkNativeEngineImpl->GetGlobal(this);
99 }
100
CreateNull()101 NativeValue* ArkNativeEngine::CreateNull()
102 {
103 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
104 return arkNativeEngineImpl->CreateNull(this);
105 }
106
CreateUndefined()107 NativeValue* ArkNativeEngine::CreateUndefined()
108 {
109 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
110 return arkNativeEngineImpl->CreateUndefined(this);
111 }
112
CreateBoolean(bool value)113 NativeValue* ArkNativeEngine::CreateBoolean(bool value)
114 {
115 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
116 return arkNativeEngineImpl->CreateBoolean(this, value);
117 }
118
CreateNumber(int32_t value)119 NativeValue* ArkNativeEngine::CreateNumber(int32_t value)
120 {
121 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
122 return arkNativeEngineImpl->CreateNumber(this, value);
123 }
124
CreateNumber(uint32_t value)125 NativeValue* ArkNativeEngine::CreateNumber(uint32_t value)
126 {
127 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
128 return arkNativeEngineImpl->CreateNumber(this, value);
129 }
130
CreateNumber(int64_t value)131 NativeValue* ArkNativeEngine::CreateNumber(int64_t value)
132 {
133 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
134 return arkNativeEngineImpl->CreateNumber(this, value);
135 }
136
CreateNumber(double value)137 NativeValue* ArkNativeEngine::CreateNumber(double value)
138 {
139 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
140 return arkNativeEngineImpl->CreateNumber(this, value);
141 }
142
CreateBigInt(int64_t value)143 NativeValue* ArkNativeEngine::CreateBigInt(int64_t value)
144 {
145 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
146 return arkNativeEngineImpl->CreateBigInt(this, value);
147 }
148
CreateBigInt(uint64_t value)149 NativeValue* ArkNativeEngine::CreateBigInt(uint64_t value)
150 {
151 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
152 return arkNativeEngineImpl->CreateBigInt(this, value);
153 }
154
CreateString(const char * value,size_t length)155 NativeValue* ArkNativeEngine::CreateString(const char* value, size_t length)
156 {
157 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
158 return arkNativeEngineImpl->CreateString(this, value, length);
159 }
160
CreateString16(const char16_t * value,size_t length)161 NativeValue* ArkNativeEngine::CreateString16(const char16_t* value, size_t length)
162 {
163 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
164 return arkNativeEngineImpl->CreateString16(this, value, length);
165 }
166
CreateSymbol(NativeValue * value)167 NativeValue* ArkNativeEngine::CreateSymbol(NativeValue* value)
168 {
169 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
170 return arkNativeEngineImpl->CreateSymbol(this, value);
171 }
172
CreateExternal(void * value,NativeFinalize callback,void * hint,size_t nativeBindingSize)173 NativeValue* ArkNativeEngine::CreateExternal(void* value, NativeFinalize callback, void* hint,
174 size_t nativeBindingSize)
175 {
176 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
177 return arkNativeEngineImpl->CreateExternal(this, value, callback, hint, nativeBindingSize);
178 }
179
CreateObject()180 NativeValue* ArkNativeEngine::CreateObject()
181 {
182 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
183 return arkNativeEngineImpl->CreateObject(this);
184 }
185
CreateNativeBindingObject(void * detach,void * attach)186 NativeValue* ArkNativeEngine::CreateNativeBindingObject(void* detach, void* attach)
187 {
188 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
189 return arkNativeEngineImpl->CreateNativeBindingObject(this, detach, attach);
190 }
191
CreateNBObject(DetachCallback detach,AttachCallback attach)192 NativeValue* ArkNativeEngine::CreateNBObject(DetachCallback detach, AttachCallback attach)
193 {
194 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
195 return arkNativeEngineImpl->CreateNBObject(this, detach, attach);
196 }
197
CreateFunction(const char * name,size_t length,NativeCallback cb,void * value)198 NativeValue* ArkNativeEngine::CreateFunction(const char* name, size_t length, NativeCallback cb, void* value)
199 {
200 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
201 return arkNativeEngineImpl->CreateFunction(this, name, length, cb, value);
202 }
203
CreateArray(size_t length)204 NativeValue* ArkNativeEngine::CreateArray(size_t length)
205 {
206 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
207 return arkNativeEngineImpl->CreateArray(this, length);
208 }
209
CreateArrayBuffer(void ** value,size_t length)210 NativeValue* ArkNativeEngine::CreateArrayBuffer(void** value, size_t length)
211 {
212 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
213 return arkNativeEngineImpl->CreateArrayBuffer(this, value, length);
214 }
215
CreateArrayBufferExternal(void * value,size_t length,NativeFinalize cb,void * hint)216 NativeValue* ArkNativeEngine::CreateArrayBufferExternal(void* value, size_t length, NativeFinalize cb, void* hint)
217 {
218 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
219 return arkNativeEngineImpl->CreateArrayBufferExternal(this, value, length, cb, hint);
220 }
221
CreateTypedArray(NativeTypedArrayType type,NativeValue * value,size_t length,size_t offset)222 NativeValue* ArkNativeEngine::CreateTypedArray(NativeTypedArrayType type,
223 NativeValue* value,
224 size_t length,
225 size_t offset)
226 {
227 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
228 return arkNativeEngineImpl->CreateTypedArray(this, type, value, length, offset);
229 }
230
CreateDataView(NativeValue * value,size_t length,size_t offset)231 NativeValue* ArkNativeEngine::CreateDataView(NativeValue* value, size_t length, size_t offset)
232 {
233 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
234 return arkNativeEngineImpl->CreateDataView(this, value, length, offset);
235 }
236
CreatePromise(NativeDeferred ** deferred)237 NativeValue* ArkNativeEngine::CreatePromise(NativeDeferred** deferred)
238 {
239 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
240 return arkNativeEngineImpl->CreatePromise(this, deferred);
241 }
242
CreateError(NativeValue * code,NativeValue * message)243 NativeValue* ArkNativeEngine::CreateError(NativeValue* code, NativeValue* message)
244 {
245 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
246 return arkNativeEngineImpl->CreateError(this, code, message);
247 }
248
InitTaskPoolThread(NativeEngine * engine,NapiConcurrentCallback callback)249 bool ArkNativeEngine::InitTaskPoolThread(NativeEngine* engine, NapiConcurrentCallback callback)
250 {
251 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
252 return arkNativeEngineImpl->InitTaskPoolThread(this, callback);
253 }
254
InitTaskPoolFunc(NativeEngine * engine,NativeValue * func)255 bool ArkNativeEngine::InitTaskPoolFunc(NativeEngine* engine, NativeValue* func)
256 {
257 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
258 return arkNativeEngineImpl->InitTaskPoolFunc(this, func);
259 }
260
CallFunction(NativeValue * thisVar,NativeValue * function,NativeValue * const * argv,size_t argc)261 NativeValue* ArkNativeEngine::CallFunction(
262 NativeValue* thisVar, NativeValue* function, NativeValue* const* argv, size_t argc)
263 {
264 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
265 return arkNativeEngineImpl->CallFunction(this, thisVar, function, argv, argc);
266 }
267
RunScript(NativeValue * script)268 NativeValue* ArkNativeEngine::RunScript(NativeValue* script)
269 {
270 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
271 return arkNativeEngineImpl->RunScript(this, script);
272 }
273
RunScriptPath(const char * path)274 NativeValue* ArkNativeEngine::RunScriptPath(const char* path)
275 {
276 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
277 return arkNativeEngineImpl->RunScriptPath(this, path);
278 }
279
RunScriptBuffer(const char * path,std::vector<uint8_t> & buffer,bool isBundle)280 NativeValue* ArkNativeEngine::RunScriptBuffer(const char* path, std::vector<uint8_t>& buffer, bool isBundle)
281 {
282 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
283 return arkNativeEngineImpl->RunScriptBuffer(this, path, buffer, isBundle);
284 }
285
SetPackagePath(const std::string appLinPathKey,const std::vector<std::string> & packagePath)286 void ArkNativeEngine::SetPackagePath(const std::string appLinPathKey, const std::vector<std::string>& packagePath)
287 {
288 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
289 return arkNativeEngineImpl->SetPackagePath(appLinPathKey, packagePath);
290 }
291
DefineClass(const char * name,NativeCallback callback,void * data,const NativePropertyDescriptor * properties,size_t length)292 NativeValue* ArkNativeEngine::DefineClass(const char* name,
293 NativeCallback callback,
294 void* data,
295 const NativePropertyDescriptor* properties,
296 size_t length)
297 {
298 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
299 return arkNativeEngineImpl->DefineClass(this, name, callback, data, properties, length);
300 }
301
CreateInstance(NativeValue * constructor,NativeValue * const * argv,size_t argc)302 NativeValue* ArkNativeEngine::CreateInstance(NativeValue* constructor, NativeValue* const *argv, size_t argc)
303 {
304 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
305 return arkNativeEngineImpl->CreateInstance(this, constructor, argv, argc);
306 }
307
CreateReference(NativeValue * value,uint32_t initialRefcount,NativeFinalize callback,void * data,void * hint)308 NativeReference* ArkNativeEngine::CreateReference(NativeValue* value, uint32_t initialRefcount,
309 NativeFinalize callback, void* data, void* hint)
310 {
311 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
312 return arkNativeEngineImpl->CreateReference(this, value, initialRefcount, callback, data, hint);
313 }
314
IsExceptionPending() const315 bool ArkNativeEngine::IsExceptionPending() const
316 {
317 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
318 return arkNativeEngineImpl->IsExceptionPending();
319 }
320
GetAndClearLastException()321 NativeValue* ArkNativeEngine::GetAndClearLastException()
322 {
323 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
324 return arkNativeEngineImpl->GetAndClearLastException(this);
325 }
326
Throw(NativeValue * error)327 bool ArkNativeEngine::Throw(NativeValue* error)
328 {
329 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
330 return arkNativeEngineImpl->Throw(error);
331 }
332
Throw(NativeErrorType type,const char * code,const char * message)333 bool ArkNativeEngine::Throw(NativeErrorType type, const char* code, const char* message)
334 {
335 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
336 return arkNativeEngineImpl->Throw(this, type, code, message);
337 }
338
CreateRuntime()339 void* ArkNativeEngine::CreateRuntime()
340 {
341 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
342 return arkNativeEngineImpl->CreateRuntime(this);
343 }
344
Serialize(NativeEngine * context,NativeValue * value,NativeValue * transfer)345 NativeValue* ArkNativeEngine::Serialize(NativeEngine* context, NativeValue* value, NativeValue* transfer)
346 {
347 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
348 return arkNativeEngineImpl->Serialize(context, value, transfer);
349 }
350
Deserialize(NativeEngine * context,NativeValue * recorder)351 NativeValue* ArkNativeEngine::Deserialize(NativeEngine* context, NativeValue* recorder)
352 {
353 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
354 return arkNativeEngineImpl->Deserialize(this, context, recorder);
355 }
356
DeleteSerializationData(NativeValue * value) const357 void ArkNativeEngine::DeleteSerializationData(NativeValue* value) const
358 {
359 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
360 return arkNativeEngineImpl->DeleteSerializationData(value);
361 }
362
StartCpuProfiler(const std::string & fileName)363 void ArkNativeEngine::StartCpuProfiler(const std::string& fileName)
364 {
365 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
366 return arkNativeEngineImpl->StartCpuProfiler(fileName);
367 }
368
StopCpuProfiler()369 void ArkNativeEngine::StopCpuProfiler()
370 {
371 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
372 return arkNativeEngineImpl->StopCpuProfiler();
373 }
374
ResumeVM()375 void ArkNativeEngine::ResumeVM()
376 {
377 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
378 return arkNativeEngineImpl->ResumeVM();
379 }
380
SuspendVM()381 bool ArkNativeEngine::SuspendVM()
382 {
383 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
384 return arkNativeEngineImpl->SuspendVM();
385 }
386
IsSuspended()387 bool ArkNativeEngine::IsSuspended()
388 {
389 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
390 return arkNativeEngineImpl->IsSuspended();
391 }
392
CheckSafepoint()393 bool ArkNativeEngine::CheckSafepoint()
394 {
395 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
396 return arkNativeEngineImpl->CheckSafepoint();
397 }
398
RunBufferScript(std::vector<uint8_t> & buffer)399 NativeValue* ArkNativeEngine::RunBufferScript(std::vector<uint8_t>& buffer)
400 {
401 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
402 return arkNativeEngineImpl->RunBufferScript(this, buffer);
403 }
404
RunActor(std::vector<uint8_t> & buffer,const char * descriptor)405 NativeValue* ArkNativeEngine::RunActor(std::vector<uint8_t>& buffer, const char* descriptor)
406 {
407 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
408 return arkNativeEngineImpl->RunActor(this, buffer, descriptor);
409 }
410
LoadArkModule(const char * str,int32_t len,const std::string & fileName)411 NativeValue* ArkNativeEngine::LoadArkModule(const char* str, int32_t len, const std::string& fileName)
412 {
413 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
414 return arkNativeEngineImpl->LoadArkModule(this, str, len, fileName);
415 }
416
LoadModule(NativeValue * str,const std::string & fileName)417 NativeValue* ArkNativeEngine::LoadModule(NativeValue* str, const std::string& fileName)
418 {
419 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
420 return arkNativeEngineImpl->LoadModule(this, str, fileName);
421 }
422
GetNativeChunk()423 NativeChunk& ArkNativeEngine::GetNativeChunk()
424 {
425 return GetScopeManager()->GetNativeChunk();
426 }
427
ArkValueToNativeValue(ArkNativeEngine * engine,Local<JSValueRef> value)428 NativeValue* ArkNativeEngine::ArkValueToNativeValue(ArkNativeEngine* engine, Local<JSValueRef> value)
429 {
430 NativeValue* result = nullptr;
431 NativeChunk& chunk = engine->GetNativeChunk();
432 if (value->IsNull() || value->IsUndefined() || value->IsSymbol()) {
433 result = chunk.New<ArkNativeValue>(engine, value);
434 } else if (value->IsNumber()) {
435 result = chunk.New<ArkNativeNumber>(engine, value);
436 } else if (value->IsString()) {
437 result = chunk.New<ArkNativeString>(engine, value);
438 } else if (value->IsArray(engine->GetEcmaVm())) {
439 result = chunk.New<ArkNativeArray>(engine, value);
440 } else if (value->IsFunction()) {
441 result = chunk.New<ArkNativeFunction>(engine, value);
442 } else if (value->IsArrayBuffer()) {
443 result = chunk.New<ArkNativeArrayBuffer>(engine, value);
444 } else if (value->IsDataView()) {
445 result = chunk.New<ArkNativeDataView>(engine, value);
446 } else if (value->IsTypedArray()) {
447 result = chunk.New<ArkNativeTypedArray>(engine, value);
448 } else if (value->IsNativePointer()) {
449 result = chunk.New<ArkNativeExternal>(engine, value);
450 } else if (value->IsDate()) {
451 result = chunk.New<ArkNativeDate>(engine, value);
452 } else if (value->IsBigInt()) {
453 result = chunk.New<ArkNativeBigInt>(engine, value);
454 } else if (value->IsObject() || value->IsPromise()) {
455 result = chunk.New<ArkNativeObject>(engine, value);
456 } else if (value->IsBoolean()) {
457 result = chunk.New<ArkNativeBoolean>(engine, value);
458 }
459 return result;
460 }
461
ValueToNativeValue(JSValueWrapper & value)462 NativeValue* ArkNativeEngine::ValueToNativeValue(JSValueWrapper& value)
463 {
464 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
465 return arkNativeEngineImpl->ValueToNativeValue(this, value);
466 }
467
ExecuteJsBin(const std::string & fileName)468 bool ArkNativeEngine::ExecuteJsBin(const std::string& fileName)
469 {
470 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
471 return arkNativeEngineImpl->ExecuteJsBin(fileName);
472 }
473
CreateBuffer(void ** value,size_t length)474 NativeValue* ArkNativeEngine::CreateBuffer(void** value, size_t length)
475 {
476 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
477 return arkNativeEngineImpl->CreateBuffer(this, value, length);
478 }
479
CreateBufferCopy(void ** value,size_t length,const void * data)480 NativeValue* ArkNativeEngine::CreateBufferCopy(void** value, size_t length, const void* data)
481 {
482 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
483 return arkNativeEngineImpl->CreateBufferCopy(this, value, length, data);
484 }
485
CreateBufferExternal(void * value,size_t length,NativeFinalize cb,void * hint)486 NativeValue* ArkNativeEngine::CreateBufferExternal(void* value, size_t length, NativeFinalize cb, void* hint)
487 {
488 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
489 return arkNativeEngineImpl->CreateBufferExternal(this, value, length, cb, hint);
490 }
491
CreateDate(double value)492 NativeValue* ArkNativeEngine::CreateDate(double value)
493 {
494 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
495 return arkNativeEngineImpl->CreateDate(this, value);
496 }
497
CreateBigWords(int sign_bit,size_t word_count,const uint64_t * words)498 NativeValue* ArkNativeEngine::CreateBigWords(int sign_bit, size_t word_count, const uint64_t* words)
499 {
500 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
501 return arkNativeEngineImpl->CreateBigWords(this, sign_bit, word_count, words);
502 }
503
TriggerFatalException(NativeValue * error)504 bool ArkNativeEngine::TriggerFatalException(NativeValue* error)
505 {
506 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
507 return arkNativeEngineImpl->TriggerFatalException(error);
508 }
509
AdjustExternalMemory(int64_t ChangeInBytes,int64_t * AdjustedValue)510 bool ArkNativeEngine::AdjustExternalMemory(int64_t ChangeInBytes, int64_t* AdjustedValue)
511 {
512 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
513 return arkNativeEngineImpl->AdjustExternalMemory(ChangeInBytes, AdjustedValue);
514 }
515
SetPromiseRejectCallback(NativeReference * rejectCallbackRef,NativeReference * checkCallbackRef)516 void ArkNativeEngine::SetPromiseRejectCallback(NativeReference* rejectCallbackRef, NativeReference* checkCallbackRef)
517 {
518 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
519 return arkNativeEngineImpl->SetPromiseRejectCallback(this, rejectCallbackRef, checkCallbackRef);
520 }
521
DumpHeapSnapshot(const std::string & path,bool isVmMode,DumpFormat dumpFormat)522 void ArkNativeEngine::DumpHeapSnapshot(const std::string& path, bool isVmMode, DumpFormat dumpFormat)
523 {
524 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
525 return arkNativeEngineImpl->DumpHeapSnapshot(path, isVmMode, dumpFormat);
526 }
527
DumpHeapSnapshot(bool isVmMode,DumpFormat dumpFormat,bool isPrivate)528 void ArkNativeEngine::DumpHeapSnapshot(bool isVmMode, DumpFormat dumpFormat, bool isPrivate)
529 {
530 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
531 return arkNativeEngineImpl->DumpHeapSnapshotExt(isVmMode, dumpFormat, isPrivate);
532 }
533
BuildNativeAndJsStackTrace(std::string & stackTraceStr)534 bool ArkNativeEngine::BuildNativeAndJsStackTrace(std::string& stackTraceStr)
535 {
536 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
537 return arkNativeEngineImpl->BuildNativeAndJsStackTrace(stackTraceStr);
538 }
539
BuildJsStackTrace(std::string & stackTraceStr)540 bool ArkNativeEngine::BuildJsStackTrace(std::string& stackTraceStr)
541 {
542 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
543 return arkNativeEngineImpl->BuildJsStackTrace(stackTraceStr);
544 }
545
BuildJsStackInfoList(uint32_t tid,std::vector<JsFrameInfo> & jsFrames)546 bool ArkNativeEngine::BuildJsStackInfoList(uint32_t tid, std::vector<JsFrameInfo>& jsFrames)
547 {
548 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
549 return arkNativeEngineImpl->BuildJsStackInfoList(tid, jsFrames);
550 }
551
DeleteWorker(NativeEngine * hostEngine,NativeEngine * workerEngine)552 bool ArkNativeEngine::DeleteWorker(NativeEngine* hostEngine, NativeEngine* workerEngine)
553 {
554 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
555 if (hostEngine != nullptr && workerEngine != nullptr) {
556 return arkNativeEngineImpl->DeleteWorker(hostEngine, workerEngine);
557 }
558 return false;
559 }
560
StartHeapTracking(double timeInterval,bool isVmMode)561 bool ArkNativeEngine::StartHeapTracking(double timeInterval, bool isVmMode)
562 {
563 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
564 return arkNativeEngineImpl->StartHeapTracking(timeInterval, isVmMode);
565 }
566
StopHeapTracking(const std::string & filePath)567 bool ArkNativeEngine::StopHeapTracking(const std::string &filePath)
568 {
569 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
570 return arkNativeEngineImpl->StopHeapTracking(filePath);
571 }
572
573 #if !defined(PREVIEW)
PrintStatisticResult()574 void ArkNativeEngine::PrintStatisticResult()
575 {
576 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
577 return arkNativeEngineImpl->PrintStatisticResult();
578 }
579
StartRuntimeStat()580 void ArkNativeEngine::StartRuntimeStat()
581 {
582 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
583 return arkNativeEngineImpl->StartRuntimeStat();
584 }
585
StopRuntimeStat()586 void ArkNativeEngine::StopRuntimeStat()
587 {
588 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
589 return arkNativeEngineImpl->StopRuntimeStat();
590 }
591
GetArrayBufferSize()592 size_t ArkNativeEngine::GetArrayBufferSize()
593 {
594 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
595 return arkNativeEngineImpl->GetArrayBufferSize();
596 }
597
GetHeapTotalSize()598 size_t ArkNativeEngine::GetHeapTotalSize()
599 {
600 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
601 return arkNativeEngineImpl->GetHeapTotalSize();
602 }
603
GetHeapUsedSize()604 size_t ArkNativeEngine::GetHeapUsedSize()
605 {
606 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
607 return arkNativeEngineImpl->GetHeapUsedSize();
608 }
609
NotifyApplicationState(bool inBackground)610 void ArkNativeEngine::NotifyApplicationState(bool inBackground)
611 {
612 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
613 return arkNativeEngineImpl->NotifyApplicationState(inBackground);
614 }
615
NotifyIdleTime(int idleMicroSec)616 void ArkNativeEngine::NotifyIdleTime(int idleMicroSec)
617 {
618 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
619 return arkNativeEngineImpl->NotifyIdleTime(idleMicroSec);
620 }
621
NotifyMemoryPressure(bool inHighMemoryPressure)622 void ArkNativeEngine::NotifyMemoryPressure(bool inHighMemoryPressure)
623 {
624 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
625 return arkNativeEngineImpl->NotifyMemoryPressure(inHighMemoryPressure);
626 }
627 #else
PrintStatisticResult()628 void ArkNativeEngine::PrintStatisticResult()
629 {
630 HILOG_WARN("ARK does not support dfx on windows");
631 }
632
StartRuntimeStat()633 void ArkNativeEngine::StartRuntimeStat()
634 {
635 HILOG_WARN("ARK does not support dfx on windows");
636 }
637
StopRuntimeStat()638 void ArkNativeEngine::StopRuntimeStat()
639 {
640 HILOG_WARN("ARK does not support dfx on windows");
641 }
642
GetArrayBufferSize()643 size_t ArkNativeEngine::GetArrayBufferSize()
644 {
645 HILOG_WARN("ARK does not support dfx on windows");
646 return 0;
647 }
648
GetHeapTotalSize()649 size_t ArkNativeEngine::GetHeapTotalSize()
650 {
651 HILOG_WARN("ARK does not support dfx on windows");
652 return 0;
653 }
654
GetHeapUsedSize()655 size_t ArkNativeEngine::GetHeapUsedSize()
656 {
657 HILOG_WARN("ARK does not support dfx on windows");
658 return 0;
659 }
660
NotifyApplicationState(bool inBackground)661 void ArkNativeEngine::NotifyApplicationState([[maybe_unused]] bool inBackground)
662 {
663 HILOG_WARN("ARK does not support dfx on windows");
664 }
665
NotifyIdleTime(int idleMicroSec)666 void ArkNativeEngine::NotifyIdleTime([[maybe_unused]] int idleMicroSec)
667 {
668 HILOG_WARN("ARK does not support dfx on windows");
669 }
670
NotifyMemoryPressure(bool inHighMemoryPressure)671 void ArkNativeEngine::NotifyMemoryPressure([[maybe_unused]] bool inHighMemoryPressure)
672 {
673 HILOG_WARN("ARK does not support dfx on windows");
674 }
675 #endif
676
RegisterUncaughtExceptionHandler(UncaughtExceptionCallback callback)677 void ArkNativeEngine::RegisterUncaughtExceptionHandler(UncaughtExceptionCallback callback)
678 {
679 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
680 return arkNativeEngineImpl->RegisterUncaughtExceptionHandler(callback);
681 }
682
HandleUncaughtException()683 void ArkNativeEngine::HandleUncaughtException()
684 {
685 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
686 return arkNativeEngineImpl->HandleUncaughtException(this);
687 }
688
HasPendingException()689 bool ArkNativeEngine::HasPendingException()
690 {
691 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
692 return arkNativeEngineImpl->HasPendingException();
693 }
694
IsMixedDebugEnabled()695 bool ArkNativeEngine::IsMixedDebugEnabled()
696 {
697 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
698 return arkNativeEngineImpl->IsMixedDebugEnabled();
699 }
700
NotifyNativeCalling(const void * nativeAddress)701 void ArkNativeEngine::NotifyNativeCalling(const void *nativeAddress)
702 {
703 auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
704 return arkNativeEngineImpl->NotifyNativeCalling(nativeAddress);
705 }