14d6c458bSopenharmony_ci/* 24d6c458bSopenharmony_ci * Copyright (c) 2023-2024 Huawei Device Co., Ltd. 34d6c458bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44d6c458bSopenharmony_ci * you may not use this file except in compliance with the License. 54d6c458bSopenharmony_ci * You may obtain a copy of the License at 64d6c458bSopenharmony_ci * 74d6c458bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84d6c458bSopenharmony_ci * 94d6c458bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104d6c458bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114d6c458bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124d6c458bSopenharmony_ci * See the License for the specific language governing permissions and 134d6c458bSopenharmony_ci * limitations under the License. 144d6c458bSopenharmony_ci */ 154d6c458bSopenharmony_ci 164d6c458bSopenharmony_ci#ifndef TEST_CONVERTXML_UNITTEST_TEST_H 174d6c458bSopenharmony_ci#define TEST_CONVERTXML_UNITTEST_TEST_H 184d6c458bSopenharmony_ci 194d6c458bSopenharmony_ci#include "native_engine.h" 204d6c458bSopenharmony_ci 214d6c458bSopenharmony_ci#include "gtest/gtest.h" 224d6c458bSopenharmony_ci 234d6c458bSopenharmony_ci#if defined(ENABLE_TASKPOOL_FFRT) 244d6c458bSopenharmony_ci#include "c/executor_task.h" 254d6c458bSopenharmony_ci#include "ffrt_inner.h" 264d6c458bSopenharmony_ci#endif 274d6c458bSopenharmony_ci 284d6c458bSopenharmony_cinamespace Commonlibrary::Concurrent::TaskPoolModule { 294d6c458bSopenharmony_ciclass NativeEngineTest : public testing::Test { 304d6c458bSopenharmony_cipublic: 314d6c458bSopenharmony_ci NativeEngineTest(); 324d6c458bSopenharmony_ci virtual ~NativeEngineTest(); 334d6c458bSopenharmony_ci void SetUp() override {} 344d6c458bSopenharmony_ci void TearDown() override {} 354d6c458bSopenharmony_ci 364d6c458bSopenharmony_ci static napi_value IsConcurrent(napi_env env, napi_value argv[], size_t argc); 374d6c458bSopenharmony_ci static napi_value GetTaskPoolInfo(napi_env env, napi_value argv[], size_t argc); 384d6c458bSopenharmony_ci static napi_value TerminateTask(napi_env env, napi_value argv[], size_t argc); 394d6c458bSopenharmony_ci static napi_value Execute(napi_env env, napi_value argv[], size_t argc); 404d6c458bSopenharmony_ci static napi_value ExecuteDelayed(napi_env env, napi_value argv[], size_t argc); 414d6c458bSopenharmony_ci static napi_value Cancel(napi_env env, napi_value argv[], size_t argc); 424d6c458bSopenharmony_ci static void DelayTask(uv_timer_t* handle); 434d6c458bSopenharmony_ci static napi_value ExecuteGroup(napi_env env, napi_value taskGroup); 444d6c458bSopenharmony_ci static napi_value ExecutePeriodically(napi_env env, napi_value argv[], size_t argc); 454d6c458bSopenharmony_ci static void PeriodicTaskCallback(uv_timer_t* handle); 464d6c458bSopenharmony_ci static void UpdateGroupInfoByResult(napi_env env, uv_timer_t* handle, napi_value res, bool success); 474d6c458bSopenharmony_ci 484d6c458bSopenharmony_ci static void TaskGroupDestructor(napi_env env, void* data); 494d6c458bSopenharmony_ci static void SequenceRunnerDestructor(napi_env env, void* data); 504d6c458bSopenharmony_ci static void TryTriggerExpand(); 514d6c458bSopenharmony_ci static void CheckForBlockedWorkers(napi_env env); 524d6c458bSopenharmony_ci static void TriggerShrink(napi_env env); 534d6c458bSopenharmony_ci static void foo(const uv_async_t* req); 544d6c458bSopenharmony_ci static void NotifyShrink(napi_env env); 554d6c458bSopenharmony_ci static void TryExpand(napi_env env); 564d6c458bSopenharmony_ci static void CancelTask(napi_env env); 574d6c458bSopenharmony_ci static void NotifyWorkerIdle(napi_env env); 584d6c458bSopenharmony_ci static void EnqueueTaskId(napi_env env); 594d6c458bSopenharmony_ci static void GetTaskByPriority(napi_env env); 604d6c458bSopenharmony_ci static void RestoreWorker(napi_env env); 614d6c458bSopenharmony_ci static void StoreDependentId(uint64_t taskId, uint64_t dependentId); 624d6c458bSopenharmony_ci static void StoreDependentTaskId(uint64_t taskId, uint64_t dependentId); 634d6c458bSopenharmony_ci static void StoreTaskDuration(uint64_t taskId); 644d6c458bSopenharmony_ci static void InitTaskManager(napi_env env); 654d6c458bSopenharmony_ci static void NotifyDependencyTaskInfo(napi_env env); 664d6c458bSopenharmony_ci static void StoreTaskDependency(napi_env env); 674d6c458bSopenharmony_ci static void RemoveTaskDependency(napi_env env); 684d6c458bSopenharmony_ci static void ReleaseTaskData(napi_env env); 694d6c458bSopenharmony_ci static void CheckTask(napi_env env); 704d6c458bSopenharmony_ci static void CancelGroupTask(napi_env env); 714d6c458bSopenharmony_ci static void TriggerSeqRunner(napi_env env); 724d6c458bSopenharmony_ci static void UpdateGroupState(napi_env env); 734d6c458bSopenharmony_ci static void ReleaseWorkerHandles(napi_env env); 744d6c458bSopenharmony_ci static void DebuggerOnPostTask(napi_env env); 754d6c458bSopenharmony_ci static void PerformTask(napi_env env); 764d6c458bSopenharmony_ci static void NotifyHandleTaskResult(napi_env env); 774d6c458bSopenharmony_ci static void TaskResultCallback(napi_env env); 784d6c458bSopenharmony_ci static void HandleFunctionException(napi_env env); 794d6c458bSopenharmony_ci static void* WorkerConstructor(napi_env env); 804d6c458bSopenharmony_ci static pid_t GetWorkerTid(uv_timer_t* handle); 814d6c458bSopenharmony_ci 824d6c458bSopenharmony_ci class ExceptionScope { 834d6c458bSopenharmony_ci public: 844d6c458bSopenharmony_ci explicit ExceptionScope(napi_env env) : env_(env) {} 854d6c458bSopenharmony_ci ~ExceptionScope() 864d6c458bSopenharmony_ci { 874d6c458bSopenharmony_ci napi_value exception = nullptr; 884d6c458bSopenharmony_ci napi_get_and_clear_last_exception(env_, &exception); 894d6c458bSopenharmony_ci } 904d6c458bSopenharmony_ci private: 914d6c458bSopenharmony_ci napi_env env_ = nullptr; 924d6c458bSopenharmony_ci }; 934d6c458bSopenharmony_ci 944d6c458bSopenharmony_ciprotected: 954d6c458bSopenharmony_ci NativeEngine *engine_ = nullptr; 964d6c458bSopenharmony_ci}; 974d6c458bSopenharmony_ci 984d6c458bSopenharmony_ciclass SendableUtils { 994d6c458bSopenharmony_cipublic: 1004d6c458bSopenharmony_ci SendableUtils() = default; 1014d6c458bSopenharmony_ci ~SendableUtils() = default; 1024d6c458bSopenharmony_ci 1034d6c458bSopenharmony_ci static napi_value CreateSendableClass(napi_env env); 1044d6c458bSopenharmony_ci static napi_value CreateSendableInstance(napi_env env); 1054d6c458bSopenharmony_ci static napi_value Foo(napi_env env, napi_callback_info info); 1064d6c458bSopenharmony_ci static napi_value Bar(napi_env env, napi_callback_info info); 1074d6c458bSopenharmony_ci}; 1084d6c458bSopenharmony_ci} // namespace Commonlibrary::Concurrent::TaskPoolModule 1094d6c458bSopenharmony_ci#endif // TEST_CONVERTXML_UNITTEST_TEST_H