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