From fb00ce95f5a01b187fd3691cc2712888964caed4 Mon Sep 17 00:00:00 2001 From: Philipp Shemetov Date: Tue, 9 Sep 2025 20:25:11 +0300 Subject: [PATCH] Remove export from launch Issue: https://gitee.com/openharmony/arkcompiler_runtime_core/issues/ICX7L5 Testing: All required pre-merge tests passed. Results are available in the ggwatcher. Signed-off-by: Philipp Shemetov --- .../plugins/ets/stdlib/escompat/Atomics.ets | 4 +- .../plugins/ets/stdlib/escompat/taskpool.ets | 6 +- .../std/concurrency/ConcurrencyHelpers.ets | 8 +- .../ets/stdlib/std/concurrency/Launch.ets | 17 ++-- .../stdlib/std/concurrency/MessageHandler.ets | 2 +- .../plugins/ets/stdlib/std/core/EAWorker.ets | 2 +- .../tests/concurrency/concurrency_tests.ets | 0 .../ets/tests/ets_test_suite/CMakeLists.txt | 8 ++ .../ets_test_suite/coroutines/CMakeLists.txt | 20 +++++ .../ets_test_suite/coroutines/affinity.ets | 8 +- .../coroutines/allhandled_rejection.ets | 5 ++ .../ets_test_suite/coroutines/async_call.ets | 2 + .../tests/ets_test_suite/coroutines/await.ets | 7 +- .../coroutines/await_migrate.ets | 8 +- .../coroutines/class_load_race.ets | 8 +- .../coroutines/concurrent_await.ets | 8 +- .../ets_test_suite/coroutines/coroHelp.ets | 7 ++ .../coroutines/eaworker_coroutines.ets | 6 ++ .../coroutines/eworker_post_to_main.ets | 6 ++ .../coroutines/execution_order.ets | 6 ++ .../ets_test_suite/coroutines/launch.ets | 4 + .../ets_test_suite/coroutines/launch_ani.cpp | 90 +++++++++++++++++++ .../coroutines/launch_exception.ets | 8 +- .../coroutines/launch_instr_array.ets | 8 +- .../coroutines/launch_instruction.ets | 8 +- .../coroutines/launch_n_workers.ets | 8 +- .../ets_test_suite/coroutines/launch_oom.ets | 8 +- .../coroutines/launch_yield.ets | 8 +- .../coroutines/multiple_launch.ets | 8 +- .../coroutines/scale_workers_pool.ets | 6 ++ .../ets_test_suite/coroutines/setTimeout.ets | 8 +- .../tests/ets_test_suite/coroutines/stats.ets | 8 +- .../coroutines/sync_primitives.ets | 6 ++ .../coroutines/unhandled_rejection.ets | 6 ++ .../coroutines/unhandled_rejection_event.ets | 6 ++ .../coroutines/worker_group.ets | 6 ++ 36 files changed, 303 insertions(+), 31 deletions(-) create mode 100644 static_core/plugins/ets/tests/concurrency/concurrency_tests.ets create mode 100644 static_core/plugins/ets/tests/ets_test_suite/coroutines/coroHelp.ets create mode 100644 static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_ani.cpp diff --git a/static_core/plugins/ets/stdlib/escompat/Atomics.ets b/static_core/plugins/ets/stdlib/escompat/Atomics.ets index 8bc0f6ea8e..21ceeba01f 100644 --- a/static_core/plugins/ets/stdlib/escompat/Atomics.ets +++ b/static_core/plugins/ets/stdlib/escompat/Atomics.ets @@ -14,7 +14,7 @@ */ package escompat; -import { launch } from "std/concurrency" +import { Launch } from "std/concurrency" class Waiter { public static okStatus: string = "ok"; @@ -702,7 +702,7 @@ export class Atomics { rejecter!(e as Error) } } - launch void>(cb) + Launch.launch void>(cb) return p; } diff --git a/static_core/plugins/ets/stdlib/escompat/taskpool.ets b/static_core/plugins/ets/stdlib/escompat/taskpool.ets index 0aa99a6698..9b6ea3b20d 100644 --- a/static_core/plugins/ets/stdlib/escompat/taskpool.ets +++ b/static_core/plugins/ets/stdlib/escompat/taskpool.ets @@ -15,7 +15,7 @@ package escompat; -import {launch, CoroutineId, WorkerId} from "std/concurrency" +import {Launch, CoroutineId, WorkerId} from "std/concurrency" import { InteropSerializeHelper } from "std/interop"; export namespace taskpool { @@ -1832,7 +1832,7 @@ export namespace taskpool { * @param priority task execution priority */ function launchImpl(task: Task, priority?: Priority): Promise { - const job: Job = launch Any>( + const job: Job = Launch.launch Any>( InternalTask.of(task).execute ); let promise = new Promise((resolve, reject) => { @@ -1923,6 +1923,6 @@ function launchPromise(f: Function, ...args: FixedArray): Promise { rejecter!(e as Error) } } - launch void>(cb) + Launch.launch void>(cb) return p; } diff --git a/static_core/plugins/ets/stdlib/std/concurrency/ConcurrencyHelpers.ets b/static_core/plugins/ets/stdlib/std/concurrency/ConcurrencyHelpers.ets index 7f58a7ce16..8af78ef213 100644 --- a/static_core/plugins/ets/stdlib/std/concurrency/ConcurrencyHelpers.ets +++ b/static_core/plugins/ets/stdlib/std/concurrency/ConcurrencyHelpers.ets @@ -15,7 +15,7 @@ package std.concurrency; -import { launch } from "std/concurrency" +import { Launch } from "std/concurrency" /// This class provides api for sync primitives (see SyncPrimitives.ets) final class ConcurrencyHelpers { @@ -41,7 +41,7 @@ class NativeAsyncWorkHelper { NativeAsyncWorkHelper.queueInternal(executeCb, completeCb, data); } static async queueInternal(executeCb: long, completeCb: long, data: long) { - let p = launch void>(NativeAsyncWorkHelper.asyncWorkNativeInvokeInternal, executeCb, data, true); + let p = Launch.launch void>(NativeAsyncWorkHelper.asyncWorkNativeInvokeInternal, executeCb, data, true); p.Await(); NativeAsyncWorkHelper.asyncWorkNativeInvokeInternal(completeCb, data, false); } @@ -60,10 +60,10 @@ class NativeAsyncWorkHelper { }; if (timeout > 0) { setTimeout(() => { - launch void>(NativeAsyncWorkHelper.eventNativeInvokeInternal, launchParams, executeCb, data, true); + Launch.launch void>(NativeAsyncWorkHelper.eventNativeInvokeInternal, launchParams, executeCb, data, true); }, timeout.toInt()); } else { - launch void>(NativeAsyncWorkHelper.eventNativeInvokeInternal, launchParams, executeCb, data, true); + Launch.launch void>(NativeAsyncWorkHelper.eventNativeInvokeInternal, launchParams, executeCb, data, true); } } static eventNativeInvokeInternal(nativeCb: long, data: long, needNativeScope: boolean) { diff --git a/static_core/plugins/ets/stdlib/std/concurrency/Launch.ets b/static_core/plugins/ets/stdlib/std/concurrency/Launch.ets index 0521b74131..d8f70fe245 100644 --- a/static_core/plugins/ets/stdlib/std/concurrency/Launch.ets +++ b/static_core/plugins/ets/stdlib/std/concurrency/Launch.ets @@ -15,7 +15,7 @@ package std.concurrency; -type CoroFunT = ( +export type CoroFunT = ( a0: A, a1: A, a2: A, @@ -42,9 +42,6 @@ type CoroFunT = ( * * @returns instance of the Job class that represents newly launched coroutine. */ -export function launch>(coroFun: F, ...args: FixedArray): Job { - return launchInternal(coroFun, args as FixedArray); -} /** * @enum WorkerDomain The existing worker domains. A worker domain defines a group of workers with some common @@ -119,8 +116,16 @@ export class LaunchParams { * * @returns instance of the Job class that represents newly launched coroutine. */ -export function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job { - return launchInternal(coroFun, args as FixedArray, launchParams); + + +export class Launch { + internal static launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job { + return launchInternal(coroFun, args as FixedArray, launchParams); + } + + internal static launch>(coroFun: F, ...args: FixedArray): Job { + return launchInternal(coroFun, args as FixedArray); + } } /** diff --git a/static_core/plugins/ets/stdlib/std/concurrency/MessageHandler.ets b/static_core/plugins/ets/stdlib/std/concurrency/MessageHandler.ets index 067d775a09..70ddfee4b6 100644 --- a/static_core/plugins/ets/stdlib/std/concurrency/MessageHandler.ets +++ b/static_core/plugins/ets/stdlib/std/concurrency/MessageHandler.ets @@ -15,7 +15,7 @@ package std.concurrency; -import { launch } from "std/concurrency"; +import { Launch } from "std/concurrency"; type Handler = (message: concurrency.Message) => void; type Task = () => void; diff --git a/static_core/plugins/ets/stdlib/std/core/EAWorker.ets b/static_core/plugins/ets/stdlib/std/core/EAWorker.ets index d10a7c8522..8a0b65332a 100644 --- a/static_core/plugins/ets/stdlib/std/core/EAWorker.ets +++ b/static_core/plugins/ets/stdlib/std/core/EAWorker.ets @@ -15,7 +15,7 @@ package std.core; -import { launch } from "std/concurrency"; +import { Launch } from "std/concurrency"; import { InteropSerializeHelper } from "std/interop"; type Task = () => void; diff --git a/static_core/plugins/ets/tests/concurrency/concurrency_tests.ets b/static_core/plugins/ets/tests/concurrency/concurrency_tests.ets new file mode 100644 index 0000000000..e69de29bb2 diff --git a/static_core/plugins/ets/tests/ets_test_suite/CMakeLists.txt b/static_core/plugins/ets/tests/ets_test_suite/CMakeLists.txt index 3d9faf455a..107602bae4 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/CMakeLists.txt +++ b/static_core/plugins/ets/tests/ets_test_suite/CMakeLists.txt @@ -41,6 +41,11 @@ function(add_ets_test test_suite) RUNTIME_EXTRA_OPTIONS ${ARG_OPTIONS} COMPILER_EXTRA_OPTIONS ${ARG_COMPILER_EXTRA_OPTIONS} ) + if(${target} MATCHES "ets_test_suite_coroutines") + # add_custom_targer + add_dependencies(${target} launch_ani) + message(${all_modes_tests}) + endif() add_dependencies(${all_modes_tests} ${target}) endif() @@ -89,6 +94,9 @@ function(add_ets_test test_suite) endif() foreach(target ${targets}) + if(${target} MATCHES "ets_test_suite_coroutines") + add_dependencies(${target} launch_ani) + endif() if (TARGET ${target}) add_dependencies(${all_modes_tests} ${target}) endif() diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/CMakeLists.txt b/static_core/plugins/ets/tests/ets_test_suite/coroutines/CMakeLists.txt index 211df5eee4..33e581b4c4 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/CMakeLists.txt +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/CMakeLists.txt @@ -13,6 +13,26 @@ add_custom_target(ets_test_suite_coroutines) +set(GEN_ANI_ETSNAPI_LIB_DIR "${CMAKE_CURRENT_BINARY_DIR}") + +panda_add_library(launch_ani SHARED launch_ani.cpp) + +set_target_properties(launch_ani PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${GEN_ANI_ETSNAPI_LIB_DIR}) + +panda_target_link_libraries(launch_ani arkruntime gtest) + +panda_target_include_directories(launch_ani + PRIVATE ${PANDA_ETS_PLUGIN_SOURCE}/runtime/ani +) + +set(PANDA_RUN_PREFIX + LD_LIBRARY_PATH=${GEN_ANI_ETSNAPI_LIB_DIR} + ${PANDA_RUN_PREFIX}) + + +add_dependencies(ets_test_suite_coroutines launch_ani) + + # Add ets coroutine tests targets # # Example usage: diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/affinity.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/affinity.ets index 19d1c21edb..61de9f24cc 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/affinity.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/affinity.ets @@ -15,7 +15,8 @@ import {CoroutineExtras, AtomicFlag} from "std/debug/concurrency" import {StdDebug} from "std/debug" -import { launch } from "std/concurrency" +// import { launch } from "std/concurrency" +// import { launch } from "./coroHelp" import { Job } from "std/core" type L = StdDebug.Logger @@ -109,9 +110,14 @@ function testExclusiveLaunchFlag(): void { // NOTE(konstanting): will be added later (see #14697) } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + function main(): int { // Call L's enableLogging method to enable logs. + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.affinity'); testSuite.addTest('testAsyncDefaultPolicy', testAsyncDefaultPolicy); testSuite.addTest('testAsyncNonMainPolicy', testAsyncNonMainPolicy); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/allhandled_rejection.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/allhandled_rejection.ets index 7668070d3d..d3defade34 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/allhandled_rejection.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/allhandled_rejection.ets @@ -79,7 +79,12 @@ function testAllhandledRejection(): void { launch null>(SingleRejectedJob); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.allhandled_rejection'); testSuite.addTest('testAllhandledRejection', testAllhandledRejection); let res = testSuite.run(); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/async_call.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/async_call.ets index 2e3d92adc8..7d7c0c1486 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/async_call.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/async_call.ets @@ -260,6 +260,8 @@ async function testArm64LargeFuncCall(): Promise { await p; } +native function nativeTestFunction(a: long): long; + function main(): int { let testSuite = new arktest.ArkTestsuite('coroutines.async_call'); testSuite.addAsyncTest('testNoArgsStaticFuncCall', testNoArgsStaticFuncCall); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/await.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/await.ets index 560d0f4420..0533a4b311 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/await.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/await.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import {launch} from "std/concurrency"; +//import {launch} from "std/concurrency"; import {Job} from "std/core"; let flag = false; @@ -95,7 +95,12 @@ function testAwaitForObject() { checkReturnType(getObject); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.await'); testSuite.addTest('testAwaitForString', testAwaitForString); testSuite.addTest('testAwaitForInt', testAwaitForInt); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/await_migrate.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/await_migrate.ets index bdb1cea271..6a9d490c24 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/await_migrate.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/await_migrate.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { launch } from "std/concurrency" +// import { launch } from "std/concurrency" import { Job } from "std/core" let isLaunchMigrated: AtomicFlag = new AtomicFlag(false); @@ -57,7 +57,13 @@ function testAwaitMigration(): void { CoroutineExtras.setSchedulingPolicy(CoroutineExtras.POLICY_ANY); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.await_migrate'); testSuite.addTest('testAwaitMigration', testAwaitMigration); let res = testSuite.run(); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/class_load_race.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/class_load_race.ets index 39de188883..ee669eb881 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/class_load_race.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/class_load_race.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { launch } from "std/concurrency" +//import { launch } from "std/concurrency" type L = StdDebug.Logger @@ -48,7 +48,13 @@ function testRaceInTheCCtor(): void { } } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.class_load_race'); testSuite.addTest('testRaceInTheCCtor', testRaceInTheCCtor); let res = testSuite.run(); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/concurrent_await.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/concurrent_await.ets index 626a00c633..1efe20e710 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/concurrent_await.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/concurrent_await.ets @@ -14,7 +14,7 @@ */ import {AtomicFlag} from "std/debug/concurrency" -import { launch } from "std/concurrency" +//import { launch } from "std/concurrency" import { Job } from "std/core" class Event { @@ -54,7 +54,13 @@ function testConcurrentAwait(): void { arktest.assertEQ(result, 42); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.concurrent_await'); testSuite.addTest('testConcurrentAwait', testConcurrentAwait); let res = testSuite.run(); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/coroHelp.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/coroHelp.ets new file mode 100644 index 0000000000..77a2c2877a --- /dev/null +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/coroHelp.ets @@ -0,0 +1,7 @@ +export native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +export native function launch>(coroFun: F, ...args: FixedArray): Job + +function main(): int { + loadLibrary('launch_ani'); +} \ No newline at end of file diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/eaworker_coroutines.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/eaworker_coroutines.ets index 9b02b3b547..135fab2cd8 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/eaworker_coroutines.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/eaworker_coroutines.ets @@ -218,7 +218,13 @@ function testNestedEAWorker(): void { arktest.assertEQ(EXPECTED_VALUE, result); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); const suite = new arktest.ArkTestsuite('EAWorker Test Suite'); suite.addTest('testACoroutineEaworker', testACoroutineEaworker); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/eworker_post_to_main.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/eworker_post_to_main.ets index 29dfa56601..631c23b322 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/eworker_post_to_main.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/eworker_post_to_main.ets @@ -42,7 +42,13 @@ function testEworkerPost2Main() { arktest.assertNE(runId1, runId3); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.eworker_post_to_main'); testSuite.addTest('testEworkerPost2Main', testEworkerPost2Main); let res = testSuite.run(); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/execution_order.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/execution_order.ets index 6ba94db27b..393edb3ed7 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/execution_order.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/execution_order.ets @@ -128,7 +128,13 @@ async function testWithAsyncPromiseThen() { executionOrder.checkOrder(); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.execution_order'); testSuite.addAsyncTest('testWithPendingPromise', testWithPendingPromise); testSuite.addAsyncTest('testWithResolvedPromise', testWithResolvedPromise); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch.ets index 2878abe14b..bee53c13c0 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch.ets @@ -127,8 +127,12 @@ function testLaunchStatic(): void { arktest.assertEQ(s2Result, 's2: C.s2_arg_0 2.73 MyPayload.s=3.14'); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.launch'); testSuite.addTest('testLaunchLambdas', testLaunchLambdas); testSuite.addTest('testLaunchFunctions', testLaunchFunctions); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_ani.cpp b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_ani.cpp new file mode 100644 index 0000000000..dc6409f9e2 --- /dev/null +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_ani.cpp @@ -0,0 +1,90 @@ +#include "plugins/ets/runtime/ani/ani.h" +#include +#include +#include + +static ani_ref LaunchFLO([[maybe_unused]] ani_env *env, ani_fn_object coroFun, ani_class launchParams, + ani_fixedarray args) +{ + ani_class cls = nullptr; + if (ANI_OK != env->FindClass("std.concurrency.Launch", &cls)) { + std::cerr << "Not found '" + << "std.concurrency.Launch" + << "'" << std::endl; + } + + ani_static_method method; + if (ANI_OK != env->Class_FindStaticMethod( + cls, "launch", + "C{std.core.Function16}C{std.concurrency.LaunchParams}A{C{std.core.Object}}:C{std.core.Job}", + &method)) { + std::cerr << "Not found '" + << "LaunchFLO" + << "'" << std::endl; + } + + ani_ref value = nullptr; + if (ANI_OK != env->Class_CallStaticMethod_Ref(cls, method, &value, coroFun, launchParams, args)) { + std::cerr << "Not found '" + << "LaunchFO" + << "'" << std::endl; + } + return value; +} + +static ani_ref LaunchFO([[maybe_unused]] ani_env *env, ani_fn_object coroFun, ani_fixedarray args) + + ani_class cls = nullptr; + if (ANI_OK != env->FindClass("std.concurrency.Launch", &cls)) { + std::cerr << "Not found '" + << "std.concurrency.Launch" + << "'" << std::endl; + } + + ani_static_method method; + if (ANI_OK != env->Class_FindStaticMethod(cls, "launch", + "C{std.core.Function16}A{C{std.core.Object}}:C{std.core.Job}", &method)) { + std::cerr << "Not found '" + << "LaunchFO" + << "'" << std::endl; + } + + ani_ref value = nullptr; + if (ANI_OK != env->Class_CallStaticMethod_Ref(cls, method, &value, coroFun, args)) { + std::cerr << "Not found '" + << "LaunchFO" + << "'" << std::endl; + } + return value; +} + +ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) +{ + ani_env *env; + if (vm->GetEnv(ANI_VERSION_1, &env) != ANI_OK) { + return ANI_ERROR; + } + std::array methods = { + ani_native_function { + "launch", "C{std.core.Function16}C{std.concurrency.LaunchParams}A{C{std.core.Object}}:C{std.core.Job}", + reinterpret_cast(LaunchFLO)}, + ani_native_function {"launch", "C{std.core.Function16}A{C{std.core.Object}}:C{std.core.Job}", + reinterpret_cast(LaunchFO)}, + }; + + std::vector modules {"affinity", "allhandled_rejection" , "await_migrate", \ + "await", "class_load_race", "concurrent_await", "eaworker_coroutines", "eworker_post_to_main", "execution_order", "launch_exception", \ + "launch_instr_array", "launch_instruction", "launch", "launch_launch", "launch_n_workers", "launch_oom", "launch_yield", + "multiple_launch", "scale_workers_pool", "setTimeout", "stats", "sync_primitives", "unhandled_rejection", "unhandled_rejection_event", "worker_group"}; + + for(auto &module_name : modules) { + ani_module module_bind; + if (env->FindModule(module_name, &module_bind) == ANI_OK) { + if (env->Module_BindNativeFunctions(module_bind, methods.data(), methods.size()) != ANI_OK) { + std::cerr << "Cannot bind native functions!" << std::endl; + } + } + } + *result = ANI_VERSION_1; + return ANI_OK; +} \ No newline at end of file diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_exception.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_exception.ets index cd441a5aa5..6f6aa7199e 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_exception.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_exception.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { launch } from "std/concurrency" +//import { launch } from "std/concurrency" let counter = 0; @@ -80,7 +80,13 @@ function testLaunchError() { arktest.assertEQ(res, true); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.launch_error'); testSuite.addTest('testLaunchStackOverflow', testLaunchStackOverflow); testSuite.addTest('testLaunchError', testLaunchError); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_instr_array.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_instr_array.ets index b8d6575b69..41e0b458b8 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_instr_array.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_instr_array.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { launch } from "std/concurrency" +//import { launch } from "std/concurrency" import { Job } from "std/core" // This test covers case of storing Promises returned from launch instruction @@ -41,7 +41,13 @@ function testLaunchInstrArray(): void { a.run(); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.launch_instr_array'); testSuite.addTest('testLaunchInstrArray', testLaunchInstrArray); let res = testSuite.run(); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_instruction.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_instruction.ets index 1370c53ffe..83f4d8bac7 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_instruction.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_instruction.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { launch } from "std/concurrency" +//import { launch } from "std/concurrency" function noarg(): Object | null { return null; @@ -84,7 +84,13 @@ function testLaunchFiveArgs(): void { Coroutine.Schedule(); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); // These tests must be run with exactly one coroutine worker thread due to it's design. let testSuite = new arktest.ArkTestsuite('coroutines.launch_instruction'); testSuite.addTest('testLaunchNoArgs', testLaunchNoArgs); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_n_workers.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_n_workers.ets index 9efb2a09a5..5d81276f04 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_n_workers.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_n_workers.ets @@ -15,7 +15,7 @@ import {StdDebug} from "std/debug" import {CoroutineExtras} from "std/debug/concurrency" -import { launch } from "std/concurrency" +//import { launch } from "std/concurrency" type L = StdDebug.Logger @@ -142,7 +142,13 @@ function testRunBatchAwait(): void { } } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.launch_error'); testSuite.addTest('testCompareWorkerIdsAsync', testCompareWorkerIdsAsync); testSuite.addTest('testCompareWorkerIds', testCompareWorkerIds); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_oom.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_oom.ets index a5ca6764a3..3ca7f12da9 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_oom.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_oom.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { launch } from "std/concurrency" +//import { launch } from "std/concurrency" type L = StdDebug.Logger @@ -39,7 +39,13 @@ function testLaunchOOM(): void { arktest.assertTrue(false, 'No error thrown but should be!'); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.launch_oom'); testSuite.addTest('testLaunchOOM', testLaunchOOM); let res = testSuite.run(); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_yield.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_yield.ets index 090785ffae..2a21e1f18d 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_yield.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/launch_yield.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { launch } from "std/concurrency" +//import { launch } from "std/concurrency" let counter = 0; @@ -30,7 +30,13 @@ function testLaunchYield(): void { } } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.launch_yield'); testSuite.addTest('testLaunchYield', testLaunchYield); let res = testSuite.run(); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/multiple_launch.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/multiple_launch.ets index d11d683142..6edfa4b2bc 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/multiple_launch.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/multiple_launch.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { launch } from "std/concurrency" +// import { launch } from "std/concurrency" import { Job } from "std/core" type L = StdDebug.Logger @@ -101,7 +101,13 @@ function testMultipleLaunch(): void { } } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.multiple_launch'); testSuite.addTest('testMultipleLaunch', testMultipleLaunch); let res = testSuite.run(); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/scale_workers_pool.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/scale_workers_pool.ets index 4a667e7b07..695ae4e61e 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/scale_workers_pool.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/scale_workers_pool.ets @@ -27,7 +27,13 @@ function testScaleWorkersPool() { arktest.assertEQ(mainId, workerId); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.scale_workers_pool'); testSuite.addTest('testScaleWorkersPool', testScaleWorkersPool); let res = testSuite.run(); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/setTimeout.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/setTimeout.ets index daf78e64ae..f3bfd7150c 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/setTimeout.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/setTimeout.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { launch } from "std/concurrency" +//import { launch } from "std/concurrency" let zeroTimeout = 0; let shortTimeout = 10; @@ -264,7 +264,13 @@ function testSameWorkerIdTestLaunch() { launch void>(sameWorkerIdTest); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); CoroutineExtras.setSchedulingPolicy(CoroutineExtras.POLICY_NON_MAIN); let testSuite = new arktest.ArkTestsuite('coroutines.setTimeout'); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/stats.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/stats.ets index c6d950e999..0bf95df971 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/stats.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/stats.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { launch } from "std/concurrency" +//import { launch } from "std/concurrency" // This test checks if the coroutine statistics engine works correctly. @@ -40,7 +40,13 @@ async function testCoroStats(): Promise { } } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.stats'); testSuite.addAsyncTest('testCoroStats', testCoroStats); let res = testSuite.run(); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/sync_primitives.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/sync_primitives.ets index d6bbe1a894..80d60a5568 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/sync_primitives.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/sync_primitives.ets @@ -117,7 +117,13 @@ function exclusiveRWLockTest() { exclusiveLockTest(new RWLock().writeLock()); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main() { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.sync_primitives'); testSuite.addTest('exclusiveMutexLockTest', exclusiveMutexLockTest); testSuite.addTest('exclusiveRWLockTest', exclusiveRWLockTest); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/unhandled_rejection.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/unhandled_rejection.ets index 3d97e2ce32..30e4a6fb1c 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/unhandled_rejection.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/unhandled_rejection.ets @@ -92,7 +92,13 @@ function testUnhandledRejection(): void { Promise.reject(); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.unhandled_rejection'); testSuite.addTest('testUnhandledRejection', testUnhandledRejection); let res = testSuite.run(); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/unhandled_rejection_event.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/unhandled_rejection_event.ets index 6bcb751ee6..3befad33e9 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/unhandled_rejection_event.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/unhandled_rejection_event.ets @@ -97,7 +97,13 @@ function testAllUnhandledJobRejection(): void { } } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.unhandled_rejection_event'); testSuite.addTest('testUnhandledRejectionObserverRegistration', testUnhandledRejectionObserverRegistration); testSuite.addTest('testAllUnhandledJobRejection', testAllUnhandledJobRejection); diff --git a/static_core/plugins/ets/tests/ets_test_suite/coroutines/worker_group.ets b/static_core/plugins/ets/tests/ets_test_suite/coroutines/worker_group.ets index 40de18a42d..569c3795d4 100644 --- a/static_core/plugins/ets/tests/ets_test_suite/coroutines/worker_group.ets +++ b/static_core/plugins/ets/tests/ets_test_suite/coroutines/worker_group.ets @@ -187,7 +187,13 @@ function testInvalidGroupId() { arktest.expectThrow(() => { launch void>((): void => {}, params).Await(); }); } +native function launch>(coroFun: F, launchParams: LaunchParams, ...args: FixedArray): Job + +native function launch>(coroFun: F, ...args: FixedArray): Job + + function main(): int { + loadLibrary('launch_ani'); let testSuite = new arktest.ArkTestsuite('coroutines.worker_group'); testSuite.addTest('testEADomain', testEADomain); testSuite.addTest('testGeneralDomain', testGeneralDomain); -- Gitee