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#ifndef UTIL_FFRTFACADE_HPP 16484543d1Sopenharmony_ci#define UTIL_FFRTFACADE_HPP 17484543d1Sopenharmony_ci#include "tm/cpu_task.h" 18484543d1Sopenharmony_ci#include "sched/scheduler.h" 19484543d1Sopenharmony_ci#include "eu/execute_unit.h" 20484543d1Sopenharmony_ci#include "dm/dependence_manager.h" 21484543d1Sopenharmony_ci#include "sync/poller.h" 22484543d1Sopenharmony_ci#include "sync/delayed_worker.h" 23484543d1Sopenharmony_cinamespace ffrt { 24484543d1Sopenharmony_cibool GetExitFlag(); 25484543d1Sopenharmony_cistd::shared_mutex& GetExitMtx(); 26484543d1Sopenharmony_ci 27484543d1Sopenharmony_ciclass FFRTFacade { 28484543d1Sopenharmony_cipublic: 29484543d1Sopenharmony_ci static inline ExecuteUnit& GetEUInstance() 30484543d1Sopenharmony_ci { 31484543d1Sopenharmony_ci static ExecuteUnit& inst = Instance().GetEUInstanceImpl(); 32484543d1Sopenharmony_ci return inst; 33484543d1Sopenharmony_ci } 34484543d1Sopenharmony_ci 35484543d1Sopenharmony_ci static inline DependenceManager& GetDMInstance() 36484543d1Sopenharmony_ci { 37484543d1Sopenharmony_ci static DependenceManager& inst = Instance().GetDMInstanceImpl(); 38484543d1Sopenharmony_ci return inst; 39484543d1Sopenharmony_ci } 40484543d1Sopenharmony_ci 41484543d1Sopenharmony_ci static inline PollerProxy& GetPPInstance() 42484543d1Sopenharmony_ci { 43484543d1Sopenharmony_ci PollerProxy& inst = Instance().GetPPInstanceImpl(); 44484543d1Sopenharmony_ci return inst; 45484543d1Sopenharmony_ci } 46484543d1Sopenharmony_ci 47484543d1Sopenharmony_ci static inline DelayedWorker& GetDWInstance() 48484543d1Sopenharmony_ci { 49484543d1Sopenharmony_ci DelayedWorker& inst = Instance().GetDWInstanceImpl(); 50484543d1Sopenharmony_ci return inst; 51484543d1Sopenharmony_ci } 52484543d1Sopenharmony_ci 53484543d1Sopenharmony_ci static inline FFRTScheduler* GetSchedInstance() 54484543d1Sopenharmony_ci { 55484543d1Sopenharmony_ci FFRTScheduler* inst = Instance().GetSchedInstanceImpl(); 56484543d1Sopenharmony_ci return inst; 57484543d1Sopenharmony_ci } 58484543d1Sopenharmony_ci 59484543d1Sopenharmony_ciprivate: 60484543d1Sopenharmony_ci FFRTFacade(); 61484543d1Sopenharmony_ci 62484543d1Sopenharmony_ci static FFRTFacade& Instance() 63484543d1Sopenharmony_ci { 64484543d1Sopenharmony_ci static FFRTFacade facade; 65484543d1Sopenharmony_ci return facade; 66484543d1Sopenharmony_ci } 67484543d1Sopenharmony_ci 68484543d1Sopenharmony_ci inline ExecuteUnit& GetEUInstanceImpl() 69484543d1Sopenharmony_ci { 70484543d1Sopenharmony_ci return ExecuteUnit::Instance(); 71484543d1Sopenharmony_ci } 72484543d1Sopenharmony_ci 73484543d1Sopenharmony_ci inline DependenceManager& GetDMInstanceImpl() 74484543d1Sopenharmony_ci { 75484543d1Sopenharmony_ci return DependenceManager::Instance(); 76484543d1Sopenharmony_ci } 77484543d1Sopenharmony_ci 78484543d1Sopenharmony_ci inline PollerProxy& GetPPInstanceImpl() 79484543d1Sopenharmony_ci { 80484543d1Sopenharmony_ci return PollerProxy::Instance(); 81484543d1Sopenharmony_ci } 82484543d1Sopenharmony_ci 83484543d1Sopenharmony_ci inline DelayedWorker& GetDWInstanceImpl() 84484543d1Sopenharmony_ci { 85484543d1Sopenharmony_ci return DelayedWorker::GetInstance(); 86484543d1Sopenharmony_ci } 87484543d1Sopenharmony_ci 88484543d1Sopenharmony_ci inline FFRTScheduler* GetSchedInstanceImpl() 89484543d1Sopenharmony_ci { 90484543d1Sopenharmony_ci return FFRTScheduler::Instance(); 91484543d1Sopenharmony_ci } 92484543d1Sopenharmony_ci}; 93484543d1Sopenharmony_ci 94484543d1Sopenharmony_ci} // namespace FFRT 95484543d1Sopenharmony_ci#endif