1/* 2 * Copyright (c) 2023 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#ifndef FFRT_QUEUE_MONITOR_H 16#define FFRT_QUEUE_MONITOR_H 17 18#include <vector> 19#include <shared_mutex> 20#include "sched/execute_ctx.h" 21#include "queue_handler.h" 22 23namespace ffrt { 24class QueueMonitor { 25public: 26 static QueueMonitor &GetInstance(); 27 void RegisterQueueId(uint32_t queueId, QueueHandler* queueStruct); 28 void ResetQueueInfo(uint32_t queueId); 29 void ResetQueueStruct(uint32_t queueId); 30 void UpdateQueueInfo(uint32_t queueId, const uint64_t &taskId); 31 uint64_t QueryQueueStatus(uint32_t queueId); 32 bool HasQueueActive(); 33 34private: 35 QueueMonitor(); 36 ~QueueMonitor(); 37 QueueMonitor(const QueueMonitor &) = delete; 38 QueueMonitor(QueueMonitor &&) = delete; 39 QueueMonitor &operator=(const QueueMonitor &) = delete; 40 QueueMonitor &operator=(QueueMonitor &&) = delete; 41 42 void SendDelayedWorker(TimePoint delay); 43 void CheckQueuesStatus(); 44 void ResetTaskTimestampAfterWarning(uint32_t queueId, const uint64_t &taskId); 45 46 WaitUntilEntry* we_ = nullptr; 47 uint64_t timeoutUs_ = 0; 48 std::shared_mutex mutex_; 49 std::vector<std::pair<uint64_t, TimePoint>> queuesRunningInfo_; 50 std::vector<QueueHandler*> queuesStructInfo_; 51 std::atomic_bool exit_ { false }; 52 std::atomic_bool abortSendTimer_ { false }; 53 std::vector<uint64_t> lastReportedTask_; 54}; 55} // namespace ffrt 56 57#endif // FFRT_QUEUE_MONITOR_H 58