1 /* 2 * Copyright (c) 2024 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 #include "module_update.h" 17 #include "module_update_task.h" 18 #include "log/log.h" 19 20 namespace OHOS { 21 namespace SysInstaller { 22 using namespace Updater; 23 namespace { TaskCallback(ModuleUpdateTask task)24void TaskCallback(ModuleUpdateTask task) 25 { 26 std::string hmpName = task.GetHmpName(); 27 LOG(INFO) << "module update callback, hmp name=" << hmpName; 28 ModuleUpdateStatus status; 29 status.hmpName = hmpName; 30 auto ret = ModuleUpdate::GetInstance().DoModuleUpdate(status); 31 ModuleUpdateTaskManager::GetInstance().SetTaskResult(ret); 32 } 33 } 34 ModuleUpdateTask(const std::string & hmpName)35ModuleUpdateTask::ModuleUpdateTask(const std::string &hmpName) 36 { 37 SetHmpName(hmpName); 38 } 39 SetHmpName(const std::string & hmpName)40void ModuleUpdateTask::SetHmpName(const std::string &hmpName) 41 { 42 hmpName_ = hmpName; 43 } 44 GetHmpName()45std::string &ModuleUpdateTask::GetHmpName() 46 { 47 return hmpName_; 48 } 49 SetTaskResult(bool result)50void ModuleUpdateTaskManager::SetTaskResult(bool result) 51 { 52 taskResult_ = taskResult_ && result; 53 } 54 GetTaskResult()55bool ModuleUpdateTaskManager::GetTaskResult() 56 { 57 return taskResult_; 58 } 59 ClearTask()60void ModuleUpdateTaskManager::ClearTask() 61 { 62 taskNum_ = 0; 63 } 64 AddTask(const std::string & hmpName)65bool ModuleUpdateTaskManager::AddTask(const std::string &hmpName) 66 { 67 LOG(INFO) << "add task, hmp name=" << hmpName; 68 if (taskNum_ >= MAX_TASK_NUM) { 69 LOG(ERROR) << "add task failed:" << taskNum_; 70 return false; 71 } 72 pool_.AddTask([hmpName] { 73 ModuleUpdateTask task = ModuleUpdateTask(hmpName); 74 TaskCallback(task); 75 }); 76 taskNum_++; 77 return true; 78 } 79 GetCurTaskNum()80size_t ModuleUpdateTaskManager::GetCurTaskNum() 81 { 82 return pool_.GetCurTaskNum(); 83 } 84 Stop()85void ModuleUpdateTaskManager::Stop() 86 { 87 pool_.Stop(); 88 } 89 Start()90void ModuleUpdateTaskManager::Start() 91 { 92 pool_.Start(1); 93 pool_.SetMaxTaskNum(MAX_TASK_NUM); 94 taskNum_ = 0; 95 } 96 } 97 }