• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 JS_CONCURRENT_MODULE_TASKPOOL_SEQ_RUNNER_MANAGER_H
17 #define JS_CONCURRENT_MODULE_TASKPOOL_SEQ_RUNNER_MANAGER_H
18 
19 #include "sequence_runner.h"
20 
21 namespace Commonlibrary::Concurrent::TaskPoolModule {
22 class SequenceRunnerManager {
23 public:
24     static SequenceRunnerManager& GetInstance();
25     SequenceRunner* GetSeqRunner(uint64_t seqRunnerId);
26 
27     SequenceRunner* CreateOrGetGlobalRunner(napi_env env, napi_value thisVar, size_t argc,
28                                             const std::string& name, uint32_t priority);
29     void SequenceRunnerDestructor(SequenceRunner* seqRunner);
30     void AddTaskToSeqRunner(uint64_t seqRunnerId, Task* task);
31     bool TriggerSeqRunner(napi_env env, Task* lastTask);
32     void StoreSequenceRunner(uint64_t seqRunnerId, SequenceRunner* seqRunner);
33     void RemoveWaitingTask(Task* task);
34     bool FindRunnerAndRef(uint64_t seqRunnerId);
35 
36 private:
37     SequenceRunnerManager() = default;
38     ~SequenceRunnerManager() = default;
39     SequenceRunnerManager(const SequenceRunnerManager &) = delete;
40     SequenceRunnerManager& operator=(const SequenceRunnerManager &) = delete;
41     SequenceRunnerManager(SequenceRunnerManager &&) = delete;
42     SequenceRunnerManager& operator=(SequenceRunnerManager &&) = delete;
43     void RemoveSequenceRunnerByName(const std::string& name);
44     void RemoveSequenceRunner(uint64_t seqRunnerId);
45     bool UnrefAndDestroyRunner(SequenceRunner* seqRunner);
46 
47     // <<name1, seqRunner>, <name2, seqRunner>, ...>
48     std::unordered_map<std::string, SequenceRunner*> globalSeqRunner_ {};
49     std::mutex globalSeqRunnerMutex_;
50     // <seqRunnerId, SequenceRunner>
51     std::unordered_map<uint64_t, SequenceRunner*> seqRunners_ {};
52     std::mutex seqRunnersMutex_;
53 
54     friend class NativeEngineTest;
55 };
56 } // namespace Commonlibrary::Concurrent::TaskPoolModule
57 #endif // JS_CONCURRENT_MODULE_TASKPOOL_SEQ_RUNNER_MANAGER_H