1484543d1Sopenharmony_ci/* 2484543d1Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3484543d1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4484543d1Sopenharmony_ci * you may not use this file except in compliance with the License. 5484543d1Sopenharmony_ci * You may obtain a copy of the License at 6484543d1Sopenharmony_ci * 7484543d1Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8484543d1Sopenharmony_ci * 9484543d1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10484543d1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11484543d1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12484543d1Sopenharmony_ci * See the License for the specific language governing permissions and 13484543d1Sopenharmony_ci * limitations under the License. 14484543d1Sopenharmony_ci */ 15484543d1Sopenharmony_ci 16484543d1Sopenharmony_ci#ifndef FFRT_SDEPENDENCE_MANAGER_H 17484543d1Sopenharmony_ci#define FFRT_SDEPENDENCE_MANAGER_H 18484543d1Sopenharmony_ci 19484543d1Sopenharmony_ci#include "dependence_manager.h" 20484543d1Sopenharmony_ci 21484543d1Sopenharmony_cinamespace ffrt { 22484543d1Sopenharmony_ciclass SDependenceManager : public DependenceManager { 23484543d1Sopenharmony_cipublic: 24484543d1Sopenharmony_ci static SDependenceManager& Instance() 25484543d1Sopenharmony_ci { 26484543d1Sopenharmony_ci static SDependenceManager ins; 27484543d1Sopenharmony_ci return ins; 28484543d1Sopenharmony_ci } 29484543d1Sopenharmony_ci 30484543d1Sopenharmony_ci void onSubmit(bool has_handle, ffrt_task_handle_t &handle, ffrt_function_header_t *f, const ffrt_deps_t *ins, 31484543d1Sopenharmony_ci const ffrt_deps_t *outs, const task_attr_private *attr) override; 32484543d1Sopenharmony_ci 33484543d1Sopenharmony_ci void onWait() override; 34484543d1Sopenharmony_ci 35484543d1Sopenharmony_ci#ifdef QOS_DEPENDENCY 36484543d1Sopenharmony_ci void onWait(const ffrt_deps_t* deps, int64_t deadline = -1) override; 37484543d1Sopenharmony_ci#else 38484543d1Sopenharmony_ci void onWait(const ffrt_deps_t* deps) override; 39484543d1Sopenharmony_ci#endif 40484543d1Sopenharmony_ci 41484543d1Sopenharmony_ci int onExecResults(ffrt_task_handle_t handle) override; 42484543d1Sopenharmony_ci 43484543d1Sopenharmony_ci void onTaskDone(CPUEUTask* task) override; 44484543d1Sopenharmony_ci 45484543d1Sopenharmony_ci int onSkip(ffrt_task_handle_t handle) override; 46484543d1Sopenharmony_ci 47484543d1Sopenharmony_ciprivate: 48484543d1Sopenharmony_ci SDependenceManager(); 49484543d1Sopenharmony_ci ~SDependenceManager() override; 50484543d1Sopenharmony_ci 51484543d1Sopenharmony_ci void RemoveRepeatedDeps(std::vector<CPUEUTask*>& in_handles, const ffrt_deps_t* ins, const ffrt_deps_t* outs, 52484543d1Sopenharmony_ci std::vector<const void *>& insNoDup, std::vector<const void *>& outsNoDup); 53484543d1Sopenharmony_ci void MapSignature2Deps(SCPUEUTask* task, const std::vector<const void*>& inDeps, 54484543d1Sopenharmony_ci const std::vector<const void*>& outDeps, std::vector<std::pair<VersionCtx*, NestType>>& inVersions, 55484543d1Sopenharmony_ci std::vector<std::pair<VersionCtx*, NestType>>& outVersions); 56484543d1Sopenharmony_ci 57484543d1Sopenharmony_ci fast_mutex& criticalMutex_; 58484543d1Sopenharmony_ci}; 59484543d1Sopenharmony_ci} // namespace ffrt 60484543d1Sopenharmony_ci#endif