/* * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef FOUNDATION_RESOURCESCHEDULE_WORKSCHEDULER_WORK_QUEUE_H #define FOUNDATION_RESOURCESCHEDULE_WORKSCHEDULER_WORK_QUEUE_H #include #include #include "work_status.h" #include "detector_value.h" #include "ffrt.h" namespace OHOS { namespace WorkScheduler { class WorkQueue { public: explicit WorkQueue() = default; ~WorkQueue() = default; /** * @brief The OnConditionChanged callback. * * @param type The type. * @param conditionVal The condition val. */ std::vector> OnConditionChanged( WorkCondition::Type type, std::shared_ptr conditionVal); /** * @brief ParseCondition. * * @param type The type. * @param conditionVal The condition val. */ std::shared_ptr ParseCondition(WorkCondition::Type type, std::shared_ptr conditionVal); /** * @brief Push. * * @param workStatusVector The work status vector. */ void Push(std::shared_ptr>> workStatusVector); /** * @brief Push. * * @param workStatus The status of work. */ void Push(std::shared_ptr workStatus); /** * @brief Get work to run by priority. * * @return The status of work. */ std::shared_ptr GetWorkToRunByPriority(); /** * @brief Remove. * * @param workStatus The status of work. * @return True if success,else false. */ bool Remove(std::shared_ptr workStatus); /** * @brief Contains. * * @param workId The id of work. * @return True if success,else false. */ bool Contains(std::shared_ptr workId); /** * @brief Find. * * @param workId The id of work. * @return The id of work. */ std::shared_ptr Find(std::string workId); /** * @brief Get size. * * @return The work list size. */ uint32_t GetSize(); /** * @brief Cancel work. * * @param workStatus The status of work. * @return True if success,else false. */ bool CancelWork(std::shared_ptr workStatus); /** * @brief Get the list of work. * * @return The list of work. */ std::list> GetWorkList(); /** * @brief Remove unready. */ void RemoveUnReady(); /** * @brief Get the count of running. * * @return The count of running. */ int32_t GetRunningCount(); /** * @brief Get work info of running tasks. * * @return get all running works. */ std::list> GetRunningWorks(); /** * @brief Get All DeepIdle Works. * * @return All DeepIdle Works; */ std::list> GetDeepIdleWorks(); /** * @brief Get work id str. * * @param result The result. */ void GetWorkIdStr(std::string& result); /** * @brief Dump. * * @param result The result. */ void Dump(std::string& result); /** * @brief Clear all. */ void ClearAll(); /** * @brief Set min interval by dump. */ void SetMinIntervalByDump(int64_t interval); bool Find(const int32_t userId, const std::string &bundleName); private: ffrt::recursive_mutex workListMutex_; std::list> workList_; }; class WorkComp { public: /** * @brief operator. * * @param w1 The w1. * @param w2 The w2. * @return True if success,else false. */ bool operator () (const std::shared_ptr w1, const std::shared_ptr w2); }; } // namespace WorkScheduler } // namespace OHOS #endif // FOUNDATION_RESOURCESCHEDULE_WORKSCHEDULER_WORK_QUEUE_H