1 /* 2 * Copyright (c) 2023-2024 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 #ifndef TEST_CONVERTXML_UNITTEST_TEST_H 17 #define TEST_CONVERTXML_UNITTEST_TEST_H 18 19 #include "native_engine.h" 20 21 #include "gtest/gtest.h" 22 23 #if defined(ENABLE_TASKPOOL_FFRT) 24 #include "c/executor_task.h" 25 #include "ffrt_inner.h" 26 #endif 27 28 namespace Commonlibrary::Concurrent::TaskPoolModule { 29 class NativeEngineTest : public testing::Test { 30 public: 31 NativeEngineTest(); 32 virtual ~NativeEngineTest(); SetUp()33 void SetUp() override {} TearDown()34 void TearDown() override {} 35 36 static napi_value IsConcurrent(napi_env env, napi_value argv[], size_t argc); 37 static napi_value GetTaskPoolInfo(napi_env env, napi_value argv[], size_t argc); 38 static napi_value TerminateTask(napi_env env, napi_value argv[], size_t argc); 39 static napi_value Execute(napi_env env, napi_value argv[], size_t argc); 40 static napi_value ExecuteDelayed(napi_env env, napi_value argv[], size_t argc); 41 static napi_value Cancel(napi_env env, napi_value argv[], size_t argc); 42 static void DelayTask(uv_timer_t* handle); 43 static napi_value ExecuteGroup(napi_env env, napi_value taskGroup); 44 static napi_value ExecutePeriodically(napi_env env, napi_value argv[], size_t argc); 45 static void PeriodicTaskCallback(uv_timer_t* handle); 46 static void UpdateGroupInfoByResult(napi_env env, uv_timer_t* handle, napi_value res, bool success); 47 48 static void TaskGroupDestructor(napi_env env, void* data); 49 static void SequenceRunnerDestructor(napi_env env, void* data); 50 static void TryTriggerExpand(); 51 static void CheckForBlockedWorkers(napi_env env); 52 static void TriggerShrink(napi_env env); 53 static void foo(const uv_async_t* req); 54 static void NotifyShrink(napi_env env); 55 static void TryExpand(napi_env env); 56 static void CancelTask(napi_env env); 57 static void NotifyWorkerIdle(napi_env env); 58 static void EnqueueTaskId(napi_env env); 59 static void GetTaskByPriority(napi_env env); 60 static void RestoreWorker(napi_env env); 61 static void StoreDependentId(uint64_t taskId, uint64_t dependentId); 62 static void StoreDependentTaskId(uint64_t taskId, uint64_t dependentId); 63 static void StoreTaskDuration(uint64_t taskId); 64 static void InitTaskManager(napi_env env); 65 static void NotifyDependencyTaskInfo(napi_env env); 66 static void StoreTaskDependency(napi_env env); 67 static void RemoveTaskDependency(napi_env env); 68 static void ReleaseTaskData(napi_env env); 69 static void CheckTask(napi_env env); 70 static void CancelGroupTask(napi_env env); 71 static void TriggerSeqRunner(napi_env env); 72 static void UpdateGroupState(napi_env env); 73 static void ReleaseWorkerHandles(napi_env env); 74 static void DebuggerOnPostTask(napi_env env); 75 static void PerformTask(napi_env env); 76 static void NotifyHandleTaskResult(napi_env env); 77 static void TaskResultCallback(napi_env env); 78 static void HandleFunctionException(napi_env env); 79 static void* WorkerConstructor(napi_env env); 80 static pid_t GetWorkerTid(uv_timer_t* handle); 81 82 class ExceptionScope { 83 public: ExceptionScope(napi_env env)84 explicit ExceptionScope(napi_env env) : env_(env) {} ~ExceptionScope()85 ~ExceptionScope() 86 { 87 napi_value exception = nullptr; 88 napi_get_and_clear_last_exception(env_, &exception); 89 } 90 private: 91 napi_env env_ = nullptr; 92 }; 93 94 protected: 95 NativeEngine *engine_ = nullptr; 96 }; 97 98 class SendableUtils { 99 public: 100 SendableUtils() = default; 101 ~SendableUtils() = default; 102 103 static napi_value CreateSendableClass(napi_env env); 104 static napi_value CreateSendableInstance(napi_env env); 105 static napi_value Foo(napi_env env, napi_callback_info info); 106 static napi_value Bar(napi_env env, napi_callback_info info); 107 }; 108 } // namespace Commonlibrary::Concurrent::TaskPoolModule 109 #endif // TEST_CONVERTXML_UNITTEST_TEST_H