From fda8c567207c57f07608dd7dda715c70de50657c Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Wed, 12 Feb 2025 15:25:31 +0300 Subject: [PATCH 01/10] Foreign invocation API Signed-off-by: Nikolay Igotti --- arkoala-arkts/arkui/src/Application.ts | 27 +++++++++++++-- arkoala-arkts/loader/src/loader.ts | 11 +++++++ arkoala/framework/src/Application.ts | 1 - interop/src/cpp/common-interop.cc | 38 +++++++++++++++++----- interop/src/cpp/napi/convertors-napi.cc | 2 ++ interop/src/cpp/vmloader.cc | 35 ++++++++++++-------- interop/src/interop/InteropNativeModule.ts | 1 + 7 files changed, 88 insertions(+), 27 deletions(-) diff --git a/arkoala-arkts/arkui/src/Application.ts b/arkoala-arkts/arkui/src/Application.ts index 07c54f37e..f0175f2fc 100644 --- a/arkoala-arkts/arkui/src/Application.ts +++ b/arkoala-arkts/arkui/src/Application.ts @@ -24,6 +24,7 @@ import { ClickEvent, ClickEventInternal } from "./generated/ArkClickEventMateria import { checkEvents, setCustomEventsChecker } from "./generated/Events" import { checkArkoalaCallbacks } from "./generated/peers/CallbacksChecker" import { setUIDetachedRootCreator } from "./generated/peers/CallbackTransformer" +import { Serializer } from "./generated/peers/Serializer" setCustomEventsChecker(checkArkoalaCallbacks) @@ -151,6 +152,8 @@ function drawCurrentCrash(crash: Object) { ArkUINativeModule._ShowCrash(msg ?? "unknown error message") } +let vmContext: pointer = nullptr + export class Application { private manager: StateManager | undefined = undefined private root: ComputableState | undefined = undefined @@ -255,10 +258,15 @@ export class Application { private render() { if (this.withLog) InteropNativeModule._NativeLog("ARKTS: render") } - - enter(arg0: int32, arg1: int32): boolean { + enter(arg0: int32, arg1: int32, foreignContext: pointer): boolean { + // TODO: maybe + vmContext = foreignContext if (this.withLog) UserView.startNativeLog(1) + setTimeout2(() => { + console.log("called timeout cb") + }, 100) + if (this.currentCrash) { drawCurrentCrash(this.currentCrash!) } else { @@ -269,6 +277,7 @@ export class Application { } catch (error) { if (error instanceof Error) { if (error.stack) { + vmContext = nullptr InteropNativeModule._NativeLog(error.stack!.toString()) return true } @@ -287,6 +296,7 @@ export class Application { } } } + vmContext = nullptr return this.exitApp } @@ -326,7 +336,7 @@ export class Application { } } - static createApplication(appUrl: string, params: string, useNativeLog: boolean): Application { + static createApplication(appUrl: string, params: string, useNativeLog: boolean, foreignVMContext: pointer): Application { registerNativeModuleLibraryName("InteropNativeModule", "ArkoalaNative_ark") registerNativeModuleLibraryName("ArkUINativeModule", "ArkoalaNative_ark") registerNativeModuleLibraryName("ArkUIGeneratedNativeModule", "ArkoalaNative_ark") @@ -337,6 +347,17 @@ export class Application { } } +export function setTimeout2(code: () => void, delay: int32): int32 { + if (vmContext == nullptr) throw new Error("null foreign VM context") + let serializer = Serializer.hold() + serializer.writeString("setTimeout") + serializer.holdAndWriteCallback(code) + serializer.writeInt32(delay) + let rv = InteropNativeModule._CallForeignVM(vmContext, 0, serializer.asArray(), serializer.length()) + serializer.release() + return rv +} + function makeClickEvent(x: number, y: number): ClickEvent { let result = new ClickEventInternal() result.x = x diff --git a/arkoala-arkts/loader/src/loader.ts b/arkoala-arkts/loader/src/loader.ts index c59eab18a..8936e229e 100644 --- a/arkoala-arkts/loader/src/loader.ts +++ b/arkoala-arkts/loader/src/loader.ts @@ -37,6 +37,8 @@ export interface LoaderOps { _LoadVirtualMachine(vmKind: int32, appClassPath: string, appLibPath: string): int32 _StartApplication(appUrl: string, appParams: string): KPointer _RunApplication(arg0: int32, arg1: int32): boolean + _SetCallbackDispatcher(dispather: Object): void + _CallCallbackSync(kind: int32, data: Uint8Array, length: int32): void } export interface NativeControl extends LoaderOps { @@ -47,6 +49,14 @@ export interface NativeControl extends LoaderOps { _EmitEvent(type: int32, target: int32, arg0: int32, arg1: int32): void } +function callCallback(id: int32, args: KUint8ArrayPtr, length: int32): int32 { + console.log(`callCallback: ${id} data is ${length} bytes`) + if (id == 3) { + // TODO: implement setTimeout here. + } + return 0 +} + let theModule: NativeControl | undefined = undefined declare const LOAD_NATIVE: object @@ -60,6 +70,7 @@ export function nativeModule(): NativeControl { for (const moduleName of Object.keys(modules)) { Object.assign(theModule, modules[moduleName]) // TODO freeze? } + theModule._SetCallbackDispatcher(callCallback) return theModule } diff --git a/arkoala/framework/src/Application.ts b/arkoala/framework/src/Application.ts index 85be4230c..07af09551 100644 --- a/arkoala/framework/src/Application.ts +++ b/arkoala/framework/src/Application.ts @@ -21,7 +21,6 @@ import { ArkoalaControlImpl } from "./ArkoalaControl" import { withString, KPointer } from "@koalaui/interop" import { PeerNode } from "./PeerNode" import { int32 } from "@koalaui/common" -import { ArkUINodeId } from "./ArkUINodeType" import { loadNative } from "./load_native" // import { initInteropModule } from "./generated/NativeModule" diff --git a/interop/src/cpp/common-interop.cc b/interop/src/cpp/common-interop.cc index 7c4008643..6a7160f65 100644 --- a/interop/src/cpp/common-interop.cc +++ b/interop/src/cpp/common-interop.cc @@ -244,7 +244,19 @@ void impl_PrintGroupedLog(KInt index) { } KOALA_INTEROP_V1(PrintGroupedLog, KInt) -typedef KInt (*LoadVirtualMachine_t)(KInt vmKind, const char* classPath, const char* libraryPath, void* currentVMContext); +int32_t callCallback(KVMContext context, int32_t methodId, uint8_t* argsData, int32_t argsLength) { +#if KOALA_USE_NODE_VM || KOALA_USE_HZ_VM || KOALA_USE_PANDA_VM || KOALA_USE_JAVA_VM || KOALA_CJ + KOALA_INTEROP_CALL_INT(context, methodId, argsLength, argsData); +#else + return 0; +#endif +} + +struct ForeignVMContext { + KVMContext vmContext; + int32_t (*callSync)(KVMContext vmContext, int32_t callback, uint8_t* data, int32_t length); +}; +typedef KInt (*LoadVirtualMachine_t)(KInt vmKind, const char* classPath, const char* libraryPath, const struct ForeignVMContext* foreignVM); typedef KNativePointer (*StartApplication_t)(const char* appUrl, const char* appParams); typedef KBoolean (*RunApplication_t)(const KInt arg0, const KInt arg1); typedef void (*EmitEvent_t)(const KInt type, const KInt target, const KInt arg0, const KInt arg1); @@ -276,7 +288,10 @@ KInt impl_LoadVirtualMachine(KVMContext vmContext, KInt vmKind, const KStringPtr static LoadVirtualMachine_t impl = nullptr; if (!impl) impl = reinterpret_cast(getImpl(nativeLibPath, "LoadVirtualMachine")); if (!impl) KOALA_INTEROP_THROW_STRING(vmContext, "Cannot load VM", -1); - return impl(vmKind, appClassPath, nativeLibPath, vmContext); + const ForeignVMContext foreignVM = { + vmContext, &callCallback + }; + return impl(vmKind, appClassPath, nativeLibPath, &foreignVM); } KOALA_INTEROP_CTX_3(LoadVirtualMachine, KInt, KInt, KStringPtr, KStringPtr) @@ -335,6 +350,18 @@ void impl_CallCallbackResourceReleaser(KNativePointer releaser, KInt resourceId) } KOALA_INTEROP_V2(CallCallbackResourceReleaser, KNativePointer, KInt) +KInt impl_CallForeignVM(KNativePointer foreignContextRaw, KInt function, KByte* data, KInt length) { + const ForeignVMContext* foreignContext = (const ForeignVMContext*)foreignContextRaw; + // TODO: set actuall callbacks caller/holder/releaser. + /* + *(int64_t*)(data + 8) = impl_CallCallbackSync; + *(int64_t*)(data + 16) = 0; + *(int64_t*)(data + 24) = 0; */ + return foreignContext->callSync(foreignContext->vmContext, function, data, length); +} +KOALA_INTEROP_4(CallForeignVM, KInt, KNativePointer, KInt, KByte*, KInt) + + #define __QUOTE(x) #x #define QUOTE(x) __QUOTE(x) @@ -349,13 +376,6 @@ void impl_NativeLog(const KStringPtr& str) { KOALA_INTEROP_V1(NativeLog, KStringPtr) -int32_t callCallback(KVMContext context, int32_t methodId, uint8_t* argsData, int32_t argsLength) { -#if KOALA_USE_NODE_VM || KOALA_USE_HZ_VM || KOALA_USE_PANDA_VM || KOALA_USE_JAVA_VM || KOALA_CJ - KOALA_INTEROP_CALL_INT(context, methodId, argsLength, argsData); -#else - return 0; -#endif -} void resolveDeferred(KVMDeferred* deferred, uint8_t* argsData, int32_t argsLength) { #ifdef KOALA_NAPI diff --git a/interop/src/cpp/napi/convertors-napi.cc b/interop/src/cpp/napi/convertors-napi.cc index a9b16c83e..0ae25c213 100644 --- a/interop/src/cpp/napi/convertors-napi.cc +++ b/interop/src/cpp/napi/convertors-napi.cc @@ -305,6 +305,8 @@ static napi_ref g_koalaNapiCallbackDispatcher = nullptr; // TODO: shall we pass name in globalThis instead of object reference? napi_value Node_SetCallbackDispatcher(napi_env env, napi_callback_info cbinfo) { + fprintf(stderr, "Node_SetCallbackDispatcher!\n"); + CallbackInfo info(env, cbinfo); napi_value dispatcher = info[0]; napi_value result = makeVoid(env); diff --git a/interop/src/cpp/vmloader.cc b/interop/src/cpp/vmloader.cc index f35f1fe7d..e4b719199 100644 --- a/interop/src/cpp/vmloader.cc +++ b/interop/src/cpp/vmloader.cc @@ -129,21 +129,21 @@ struct VMInitArgs { #define PANDA_VM_KIND 2 #define ES2PANDA_KIND 3 +struct ForeignVMContext { + void* currentVMContext; + int32_t (*callSync)(void* vmContext, int32_t callback, int8_t* data, int32_t length); +}; + struct VMEntry { int vmKind; void* env; void* app; void* enter; void* emitEvent; - - VMEntry() { - vmKind = 0; - app = nullptr; - enter = nullptr; - } + ForeignVMContext foreignVMContext; }; -VMEntry g_vmEntry; +VMEntry g_vmEntry = {}; typedef int (*createVM_t)(void** pVM, void** pEnv, void* vmInitArgs); typedef int (*getVMs_t)(void** pVM, int32_t bufLen, int32_t* nVMs); @@ -164,7 +164,7 @@ static int ArkMobileLog(int id, int level, const char *component, const char *fm return 0; } -extern "C" DLL_EXPORT KInt LoadVirtualMachine(KInt vmKind, const char* appClassPath, const char* appLibPath, void* currentVMContext) { +extern "C" DLL_EXPORT KInt LoadVirtualMachine(KInt vmKind, const char* appClassPath, const char* appLibPath, const ForeignVMContext* foreignVMContext) { if (vmKind == ES2PANDA_KIND) { return loadES2Panda(appClassPath, appLibPath); } @@ -281,6 +281,7 @@ extern "C" DLL_EXPORT KInt LoadVirtualMachine(KInt vmKind, const char* appClassP return result; } g_vmEntry.env = env; + g_vmEntry.foreignVMContext = *foreignVMContext; return 0; } @@ -304,7 +305,7 @@ const AppInfo javaAppInfo = { "start", "()J", "enter", - "(II)Z", + "(IIJ)Z", "emitEvent", "(IIII)V", }; @@ -314,11 +315,11 @@ const AppInfo javaAppInfo = { const AppInfo pandaAppInfo = { "@koalaui/arkts-arkui/Application/Application", "createApplication", - "Lstd/core/String;Lstd/core/String;Z:L@koalaui/arkts-arkui/Application/Application;", + "Lstd/core/String;Lstd/core/String;ZJ:L@koalaui/arkts-arkui/Application/Application;", "start", ":J", "enter", - "II:Z", + "IIJ:Z", "emitEvent", "IIII:V", }; @@ -397,7 +398,11 @@ extern "C" DLL_EXPORT KNativePointer StartApplication(const char* appUrl, const #else auto useNativeLog = false; #endif - auto app = etsEnv->NewGlobalRef(etsEnv->CallStaticObjectMethod(appClass, create, etsEnv->NewStringUTF(appUrl), etsEnv->NewStringUTF(appParams), useNativeLog)); + auto app = etsEnv->NewGlobalRef(etsEnv->CallStaticObjectMethod( + appClass, create, + etsEnv->NewStringUTF(appUrl), etsEnv->NewStringUTF(appParams), + useNativeLog + )); if (!app) { LOGE("createApplication returned null"); if (etsEnv->ErrorCheck()) { @@ -441,7 +446,8 @@ extern "C" DLL_EXPORT KBoolean RunApplication(const KInt arg0, const KInt arg1) (jobject)(g_vmEntry.app), (jmethodID)(g_vmEntry.enter), (jint)arg0, - (jint)arg1 + (jint)arg1, + (int64_t)(intptr_t)(&g_vmEntry.foreignVMContext) ); if (jEnv->ExceptionCheck()) { jEnv->ExceptionDescribe(); @@ -461,7 +467,8 @@ extern "C" DLL_EXPORT KBoolean RunApplication(const KInt arg0, const KInt arg1) (ets_object)(g_vmEntry.app), (ets_method)(g_vmEntry.enter), (ets_int)arg0, - (ets_int)arg1 + (ets_int)arg1, + (int64_t)(intptr_t)(&g_vmEntry.foreignVMContext) ); if (etsEnv->ErrorCheck()) { LOGE("Calling enter() method gave an error"); diff --git a/interop/src/interop/InteropNativeModule.ts b/interop/src/interop/InteropNativeModule.ts index 138d28470..b9b177453 100644 --- a/interop/src/interop/InteropNativeModule.ts +++ b/interop/src/interop/InteropNativeModule.ts @@ -36,6 +36,7 @@ export class InteropNativeModule { public static _RunApplication(arg0: int32, arg1: int32): number { throw "method not loaded" } public static _StartApplication(appUrl: string, appParams: string): KPointer { throw "method not loaded" } public static _EmitEvent(eventType: int32, target: int32, arg0: int32, arg1: int32): void { throw "method not loaded" } + public static _CallForeignVM(foreignContext: KPointer, kind: int32, args: Uint8Array, argsSize: int32): int32 { throw "method not loaded" } } export function loadInteropNativeModule() { -- Gitee From 7d9ebd01e9744bba4d4fa1be8af822ca2e54b384 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Wed, 12 Feb 2025 15:41:37 +0300 Subject: [PATCH 02/10] Update Signed-off-by: Nikolay Igotti --- arkoala-arkts/arkui/src/Application.ts | 21 +++++------------- .../arkui/src/handwritten/ForeignFunctions.ts | 22 +++++++++++++++++++ arkoala-arkts/arkui/src/handwritten/index.ts | 1 + 3 files changed, 28 insertions(+), 16 deletions(-) create mode 100644 arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts diff --git a/arkoala-arkts/arkui/src/Application.ts b/arkoala-arkts/arkui/src/Application.ts index f0175f2fc..1e895121c 100644 --- a/arkoala-arkts/arkui/src/Application.ts +++ b/arkoala-arkts/arkui/src/Application.ts @@ -24,7 +24,7 @@ import { ClickEvent, ClickEventInternal } from "./generated/ArkClickEventMateria import { checkEvents, setCustomEventsChecker } from "./generated/Events" import { checkArkoalaCallbacks } from "./generated/peers/CallbacksChecker" import { setUIDetachedRootCreator } from "./generated/peers/CallbackTransformer" -import { Serializer } from "./generated/peers/Serializer" +import { enterForeignContext, leaveForeignContext, setTimeoutForeign } from "./handwritten" setCustomEventsChecker(checkArkoalaCallbacks) @@ -260,10 +260,10 @@ export class Application { } enter(arg0: int32, arg1: int32, foreignContext: pointer): boolean { // TODO: maybe - vmContext = foreignContext + enterForeignContext(rootPointer) if (this.withLog) UserView.startNativeLog(1) - setTimeout2(() => { + setTimeoutForeign(() => { console.log("called timeout cb") }, 100) @@ -277,7 +277,7 @@ export class Application { } catch (error) { if (error instanceof Error) { if (error.stack) { - vmContext = nullptr + leaveForeignContext() InteropNativeModule._NativeLog(error.stack!.toString()) return true } @@ -296,7 +296,7 @@ export class Application { } } } - vmContext = nullptr + leaveForeignContext() return this.exitApp } @@ -347,17 +347,6 @@ export class Application { } } -export function setTimeout2(code: () => void, delay: int32): int32 { - if (vmContext == nullptr) throw new Error("null foreign VM context") - let serializer = Serializer.hold() - serializer.writeString("setTimeout") - serializer.holdAndWriteCallback(code) - serializer.writeInt32(delay) - let rv = InteropNativeModule._CallForeignVM(vmContext, 0, serializer.asArray(), serializer.length()) - serializer.release() - return rv -} - function makeClickEvent(x: number, y: number): ClickEvent { let result = new ClickEventInternal() result.x = x diff --git a/arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts b/arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts new file mode 100644 index 000000000..67c708b7f --- /dev/null +++ b/arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts @@ -0,0 +1,22 @@ +import { pointer, nullptr, InteropNativeModule, SerializerBase } from "@koalaui/interop" + +let foreignContext: pointer = nullptr + +export function enterForeignContext(context: pointer) { + foreignContext = context +} + +export function leaveForeignContext() { + foreignContext = nullptr +} + +export function setTimeoutForeign(code: () => void, delay: int32): int32 { + if (foreignContext == nullptr) throw new Error("null foreign VM context") + let serializer = new SerializerBase() + serializer.writeInt32(3) + serializer.holdAndWriteCallback(code) + serializer.writeInt32(delay) + let rv = InteropNativeModule._CallForeignVM(foreignContext, 0, serializer.asArray(), serializer.length()) + serializer.release() + return rv +} diff --git a/arkoala-arkts/arkui/src/handwritten/index.ts b/arkoala-arkts/arkui/src/handwritten/index.ts index 51e7b1472..b5dfd2bbd 100644 --- a/arkoala-arkts/arkui/src/handwritten/index.ts +++ b/arkoala-arkts/arkui/src/handwritten/index.ts @@ -1,6 +1,7 @@ export * from "./ArkPageTransition" export * from "./ArkPageTransitionData" export * from "./Router" +export * from "./CustomFunctions" // TODO: implement this -- Gitee From 43603e37ddc4ea61ab7c55cf689fe80b21339cf7 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Wed, 12 Feb 2025 15:43:59 +0300 Subject: [PATCH 03/10] Update Signed-off-by: Nikolay Igotti --- .../arkui/src/handwritten/ForeignFunctions.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts b/arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts index 67c708b7f..f6b12e39b 100644 --- a/arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts +++ b/arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts @@ -1,3 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import { pointer, nullptr, InteropNativeModule, SerializerBase } from "@koalaui/interop" let foreignContext: pointer = nullptr @@ -13,10 +27,10 @@ export function leaveForeignContext() { export function setTimeoutForeign(code: () => void, delay: int32): int32 { if (foreignContext == nullptr) throw new Error("null foreign VM context") let serializer = new SerializerBase() - serializer.writeInt32(3) + serializer.writeInt32(1) serializer.holdAndWriteCallback(code) serializer.writeInt32(delay) - let rv = InteropNativeModule._CallForeignVM(foreignContext, 0, serializer.asArray(), serializer.length()) + let rv = InteropNativeModule._CallForeignVM(foreignContext, 3, serializer.asArray(), serializer.length()) serializer.release() return rv } -- Gitee From ef51ed407039923cbde6a01a2e761718ad918f72 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Wed, 12 Feb 2025 17:06:46 +0300 Subject: [PATCH 04/10] Update Signed-off-by: Nikolay Igotti --- arkoala-arkts/arkui/src/Application.ts | 6 ++---- arkoala-arkts/arkui/src/handwritten/index.ts | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/arkoala-arkts/arkui/src/Application.ts b/arkoala-arkts/arkui/src/Application.ts index 1e895121c..19333353b 100644 --- a/arkoala-arkts/arkui/src/Application.ts +++ b/arkoala-arkts/arkui/src/Application.ts @@ -260,12 +260,10 @@ export class Application { } enter(arg0: int32, arg1: int32, foreignContext: pointer): boolean { // TODO: maybe - enterForeignContext(rootPointer) + enterForeignContext(foreignContext) if (this.withLog) UserView.startNativeLog(1) - setTimeoutForeign(() => { - console.log("called timeout cb") - }, 100) + if (true) setTimeoutForeign(() => { console.log("called timeout cb")}, 100) if (this.currentCrash) { drawCurrentCrash(this.currentCrash!) diff --git a/arkoala-arkts/arkui/src/handwritten/index.ts b/arkoala-arkts/arkui/src/handwritten/index.ts index b5dfd2bbd..bbf766e8f 100644 --- a/arkoala-arkts/arkui/src/handwritten/index.ts +++ b/arkoala-arkts/arkui/src/handwritten/index.ts @@ -1,7 +1,7 @@ export * from "./ArkPageTransition" export * from "./ArkPageTransitionData" export * from "./Router" -export * from "./CustomFunctions" +export * from "./ForeignFunctions" // TODO: implement this -- Gitee From 2851eafecee795d03bb0cfd00289ba782c15c0a3 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Wed, 12 Feb 2025 17:11:02 +0300 Subject: [PATCH 05/10] Update Signed-off-by: Nikolay Igotti --- arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts b/arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts index f6b12e39b..eff5fabb0 100644 --- a/arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts +++ b/arkoala-arkts/arkui/src/handwritten/ForeignFunctions.ts @@ -12,6 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { int32 } from "@koalaui/common" import { pointer, nullptr, InteropNativeModule, SerializerBase } from "@koalaui/interop" let foreignContext: pointer = nullptr -- Gitee From 45e5307ff2842643b9a1a3dd62fd6df1cf7b2dbc Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Wed, 12 Feb 2025 17:12:17 +0300 Subject: [PATCH 06/10] Cleanup Signed-off-by: Nikolay Igotti --- arkoala-arkts/arkui/src/Application.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/arkoala-arkts/arkui/src/Application.ts b/arkoala-arkts/arkui/src/Application.ts index 19333353b..3aa58ef7c 100644 --- a/arkoala-arkts/arkui/src/Application.ts +++ b/arkoala-arkts/arkui/src/Application.ts @@ -24,7 +24,7 @@ import { ClickEvent, ClickEventInternal } from "./generated/ArkClickEventMateria import { checkEvents, setCustomEventsChecker } from "./generated/Events" import { checkArkoalaCallbacks } from "./generated/peers/CallbacksChecker" import { setUIDetachedRootCreator } from "./generated/peers/CallbackTransformer" -import { enterForeignContext, leaveForeignContext, setTimeoutForeign } from "./handwritten" +import { enterForeignContext, leaveForeignContext } from "./handwritten" setCustomEventsChecker(checkArkoalaCallbacks) @@ -263,8 +263,6 @@ export class Application { enterForeignContext(foreignContext) if (this.withLog) UserView.startNativeLog(1) - if (true) setTimeoutForeign(() => { console.log("called timeout cb")}, 100) - if (this.currentCrash) { drawCurrentCrash(this.currentCrash!) } else { -- Gitee From d019d6fa4e01a549d1706d8036d75b77afff0ea7 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Wed, 12 Feb 2025 17:14:40 +0300 Subject: [PATCH 07/10] Uneeded param Signed-off-by: Nikolay Igotti --- arkoala-arkts/arkui/src/Application.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arkoala-arkts/arkui/src/Application.ts b/arkoala-arkts/arkui/src/Application.ts index 3aa58ef7c..d75efb987 100644 --- a/arkoala-arkts/arkui/src/Application.ts +++ b/arkoala-arkts/arkui/src/Application.ts @@ -332,7 +332,7 @@ export class Application { } } - static createApplication(appUrl: string, params: string, useNativeLog: boolean, foreignVMContext: pointer): Application { + static createApplication(appUrl: string, params: string, useNativeLog: boolean): Application { registerNativeModuleLibraryName("InteropNativeModule", "ArkoalaNative_ark") registerNativeModuleLibraryName("ArkUINativeModule", "ArkoalaNative_ark") registerNativeModuleLibraryName("ArkUIGeneratedNativeModule", "ArkoalaNative_ark") -- Gitee From e66d93ed284d537e758d19095b0b401523cb9124 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Thu, 13 Feb 2025 10:58:32 +0300 Subject: [PATCH 08/10] Fix Signed-off-by: Nikolay Igotti --- arkoala-arkts/package.json | 2 +- interop/src/arkts/InteropNativeModule.sts | 49 ++++++++++++----------- interop/src/cpp/vmloader.cc | 2 +- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/arkoala-arkts/package.json b/arkoala-arkts/package.json index 9ffcaff2a..2210b9013 100644 --- a/arkoala-arkts/package.json +++ b/arkoala-arkts/package.json @@ -82,7 +82,7 @@ "trivial:node": "npm run build:user && npm run build:loader:node && npm run run:node:user", "shopping:all:node": "npm run compile:native:node-host && npm run build:arkoala && npm run build:shopping && npm run build:loader:node && npm run run:node:shopping", "shopping:node": "npm run build:user && npm run build:loader:node && npm run run:node:shopping", - "clean:shopping": "npm run clean --prefix shopping", + "clean:shopping": "npm run clean:all --prefix shopping/user", "trivial:all:node:ci": "npm run compile:native:node-host && npm run build:arkoala && npm run build:user && npm run build:loader:node && npm run run:node:ci", "arkoala:har-arm32": "npm run compile:native:hzvm-ohos-arm32 && npm run build:arkoala && npm run har-arm32 --prefix har", "arkoala:har-arm64": "npm run compile:native:hzvm-ohos-arm64 && npm run build:arkoala && npm run har-arm64 --prefix har", diff --git a/interop/src/arkts/InteropNativeModule.sts b/interop/src/arkts/InteropNativeModule.sts index 35ddcfb81..9b74e2e83 100644 --- a/interop/src/arkts/InteropNativeModule.sts +++ b/interop/src/arkts/InteropNativeModule.sts @@ -10,32 +10,33 @@ export class InteropNativeModule { static callCallbackFromNative(id: KInt, args: KUint8ArrayPtr, length: KInt): KInt { return callCallback(id, args, length) } - native static _GetGroupedLog(index: int32): KPointer - native static _StartGroupedLog(index: int32): void - native static _StopGroupedLog(index: int32): void - native static _AppendGroupedLog(index: int32, message: string): void - native static _PrintGroupedLog(index: int32): void - native static _GetStringFinalizer(): KPointer - native static _InvokeFinalizer(ptr1: KPointer, ptr2: KPointer): void - native static _GetPtrVectorElement(ptr1: KPointer, arg: int32): KPointer - native static _StringLength(ptr1: KPointer): int32 - native static _StringData(ptr1: KPointer, arr: KUint8ArrayPtr, i: int32): void - native static _StringMake(str1: string): KPointer - native static _GetPtrVectorSize(ptr1: KPointer): int32 - native static _ManagedStringWrite(str1: string, arr: KUint8ArrayPtr, arg: int32): int32 - native static _NativeLog(str1: string): void - native static _Utf8ToString(data: KUint8ArrayPtr, offset: int32, length: int32): string - native static _StdStringToString(cstring: KPointer): string + native static _GetGroupedLog(index: int32): KPointer + native static _StartGroupedLog(index: int32): void + native static _StopGroupedLog(index: int32): void + native static _AppendGroupedLog(index: int32, message: string): void + native static _PrintGroupedLog(index: int32): void + native static _GetStringFinalizer(): KPointer + native static _InvokeFinalizer(ptr1: KPointer, ptr2: KPointer): void + native static _GetPtrVectorElement(ptr1: KPointer, arg: int32): KPointer + native static _StringLength(ptr1: KPointer): int32 + native static _StringData(ptr1: KPointer, arr: KUint8ArrayPtr, i: int32): void + native static _StringMake(str1: string): KPointer + native static _GetPtrVectorSize(ptr1: KPointer): int32 + native static _ManagedStringWrite(str1: string, arr: KUint8ArrayPtr, arg: int32): int32 + native static _NativeLog(str1: string): void + native static _Utf8ToString(data: KUint8ArrayPtr, offset: int32, length: int32): string + native static _StdStringToString(cstring: KPointer): string native static _CheckCallbackEvent(buffer: KUint8ArrayPtr, bufferLength: int32): int32 native static _HoldCallbackResource(resourceId: int32): void native static _ReleaseCallbackResource(resourceId: int32): void - native static _CallCallback(callbackKind: int32, args: KUint8ArrayPtr, argsSize: int32): void - native static _CallCallbackSync(callbackKind: int32, args: KUint8ArrayPtr, argsSize: int32): void - native static _CallCallbackResourceHolder(holder: KPointer, resourceId: int32): void - native static _CallCallbackResourceReleaser(releaser: KPointer, resourceId: int32): void - native static _LoadVirtualMachine(arg0: int32, arg1: string, arg2: string): int32 - native static _RunApplication(arg0: int32, arg1: int32): boolean - native static _StartApplication(appUrl: string, appParams: string): KPointer - native static _EmitEvent(eventType: int32, target: int32, arg0: int32, arg1: int32): void + native static _CallCallback(callbackKind: int32, args: KUint8ArrayPtr, argsSize: int32): void + native static _CallCallbackSync(callbackKind: int32, args: KUint8ArrayPtr, argsSize: int32): void + native static _CallCallbackResourceHolder(holder: KPointer, resourceId: int32): void + native static _CallCallbackResourceReleaser(releaser: KPointer, resourceId: int32): void + native static _LoadVirtualMachine(arg0: int32, arg1: string, arg2: string): int32 + native static _RunApplication(arg0: int32, arg1: int32): boolean + native static _StartApplication(appUrl: string, appParams: string): KPointer + native static _EmitEvent(eventType: int32, target: int32, arg0: int32, arg1: int32): void + native static _CallForeignVM(context:KPointer, callback: int32, data: KUint8ArrayPtr, dataLength: int32): int32 } diff --git a/interop/src/cpp/vmloader.cc b/interop/src/cpp/vmloader.cc index e4b719199..dcd9bd6e2 100644 --- a/interop/src/cpp/vmloader.cc +++ b/interop/src/cpp/vmloader.cc @@ -315,7 +315,7 @@ const AppInfo javaAppInfo = { const AppInfo pandaAppInfo = { "@koalaui/arkts-arkui/Application/Application", "createApplication", - "Lstd/core/String;Lstd/core/String;ZJ:L@koalaui/arkts-arkui/Application/Application;", + "Lstd/core/String;Lstd/core/String;Z:L@koalaui/arkts-arkui/Application/Application;", "start", ":J", "enter", -- Gitee From fd576aba4d191e1b3ccbd999c9d87ccda19cd105 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Thu, 13 Feb 2025 12:13:52 +0300 Subject: [PATCH 09/10] Typo Signed-off-by: Nikolay Igotti --- arkoala-arkts/.gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arkoala-arkts/.gitlab-ci.yml b/arkoala-arkts/.gitlab-ci.yml index 2f836098f..6adcdf502 100644 --- a/arkoala-arkts/.gitlab-ci.yml +++ b/arkoala-arkts/.gitlab-ci.yml @@ -313,7 +313,7 @@ install node modules (arkoala-arkts): - !reference [.setup, script] - npm run panda:sdk:install --prefix arkoala-arkts script: - - npm run har-arm32 --prefix arkoala-arkts/user + - npm run har-arm32 --prefix arkoala-arkts/trivial/user - mv arkoala-arkts/user/app/user/build/default/outputs/default/user.har user-arm32.har artifacts: paths: -- Gitee From 8c3db6f8be58c4243a4c238483e9731d6b1156fd Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Thu, 13 Feb 2025 12:14:51 +0300 Subject: [PATCH 10/10] Typo Signed-off-by: Nikolay Igotti --- arkoala-arkts/arkui/src/Application.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/arkoala-arkts/arkui/src/Application.ts b/arkoala-arkts/arkui/src/Application.ts index d75efb987..df0f3e773 100644 --- a/arkoala-arkts/arkui/src/Application.ts +++ b/arkoala-arkts/arkui/src/Application.ts @@ -152,8 +152,6 @@ function drawCurrentCrash(crash: Object) { ArkUINativeModule._ShowCrash(msg ?? "unknown error message") } -let vmContext: pointer = nullptr - export class Application { private manager: StateManager | undefined = undefined private root: ComputableState | undefined = undefined -- Gitee