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