14d6c458bSopenharmony_ci/* 24d6c458bSopenharmony_ci * Copyright (c) 2023 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 JS_CONCURRENT_MODULE_TASKPOOL_RUNNER_H 174d6c458bSopenharmony_ci#define JS_CONCURRENT_MODULE_TASKPOOL_RUNNER_H 184d6c458bSopenharmony_ci 194d6c458bSopenharmony_ci#include <queue> 204d6c458bSopenharmony_ci#include <unordered_map> 214d6c458bSopenharmony_ci 224d6c458bSopenharmony_ci#include "task.h" 234d6c458bSopenharmony_ci 244d6c458bSopenharmony_cinamespace Commonlibrary::Concurrent::TaskPoolModule { 254d6c458bSopenharmony_ciclass SequenceRunner { 264d6c458bSopenharmony_cipublic: 274d6c458bSopenharmony_ci SequenceRunner() = default; 284d6c458bSopenharmony_ci ~SequenceRunner() = default; 294d6c458bSopenharmony_ci 304d6c458bSopenharmony_ci static napi_value SeqRunnerConstructor(napi_env env, napi_callback_info cbinfo); 314d6c458bSopenharmony_ci static napi_value Execute(napi_env env, napi_callback_info cbinfo); 324d6c458bSopenharmony_ci 334d6c458bSopenharmony_ciprivate: 344d6c458bSopenharmony_ci SequenceRunner(const SequenceRunner &) = delete; 354d6c458bSopenharmony_ci SequenceRunner& operator=(const SequenceRunner &) = delete; 364d6c458bSopenharmony_ci SequenceRunner(SequenceRunner &&) = delete; 374d6c458bSopenharmony_ci SequenceRunner& operator=(SequenceRunner &&) = delete; 384d6c458bSopenharmony_ci 394d6c458bSopenharmony_ci static void ExecuteTaskImmediately(uint64_t taskId, Priority priority); 404d6c458bSopenharmony_ci static void SequenceRunnerDestructor(napi_env env, void* data, void* hint); 414d6c458bSopenharmony_ci static void SeqRunnerConstructorInner(napi_env env, napi_value &thisVar, SequenceRunner *seqRunner); 424d6c458bSopenharmony_ci 434d6c458bSopenharmony_ci friend class NativeEngineTest; 444d6c458bSopenharmony_cipublic: 454d6c458bSopenharmony_ci uint64_t seqRunnerId_ {}; 464d6c458bSopenharmony_ci std::atomic<uint64_t> currentTaskId_ {}; 474d6c458bSopenharmony_ci Priority priority_ {Priority::DEFAULT}; 484d6c458bSopenharmony_ci std::queue<Task*> seqRunnerTasks_ {}; 494d6c458bSopenharmony_ci std::shared_mutex seqRunnerMutex_; 504d6c458bSopenharmony_ci 514d6c458bSopenharmony_ci // for global SequenceRunner 524d6c458bSopenharmony_ci std::string seqName_ {}; 534d6c458bSopenharmony_ci napi_ref seqRunnerRef_ = nullptr; 544d6c458bSopenharmony_ci bool isGlobalRunner_ {false}; 554d6c458bSopenharmony_ci uint64_t count_ = 0; 564d6c458bSopenharmony_ci std::unordered_map<napi_env, napi_ref> globalSeqRunnerRef_ {}; 574d6c458bSopenharmony_ci}; 584d6c458bSopenharmony_ci} 594d6c458bSopenharmony_ci 604d6c458bSopenharmony_ci#endif // JS_CONCURRENT_MODULE_TASKPOOL_RUNNER_H