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 #include "system_load.h"
16
17 #include "dfs_error.h"
18 #include "parameters.h"
19 #include "task_state_manager.h"
20 #include "utils_log.h"
21 #include "res_sched_client.h"
22
23 namespace OHOS::FileManagement::CloudSync {
24
SetDataSycner(std::shared_ptr<CloudFile::DataSyncManager> dataSyncManager)25 void SystemLoadListener::SetDataSycner(std::shared_ptr<CloudFile::DataSyncManager> dataSyncManager)
26 {
27 dataSyncManager_ = dataSyncManager;
28 }
29
RegisterSystemloadCallback(std::shared_ptr<CloudFile::DataSyncManager> dataSyncManager)30 void SystemLoadStatus::RegisterSystemloadCallback(std::shared_ptr<CloudFile::DataSyncManager> dataSyncManager)
31 {
32 sptr<SystemLoadListener> loadListener = new (std::nothrow) SystemLoadListener();
33 if (loadListener == nullptr) {
34 return;
35 }
36 loadListener->SetDataSycner(dataSyncManager);
37 ResourceSchedule::ResSchedClient::GetInstance().RegisterSystemloadNotifier(loadListener);
38 }
39
OnSystemloadLevel(int32_t level)40 void SystemLoadListener::OnSystemloadLevel(int32_t level)
41 {
42 SystemLoadStatus::Setload(level);
43 if (level >= SYSTEMLOADLEVEL_HOT) {
44 LOGI("OnSystemloadLevel over warm");
45 } else if (dataSyncManager_) {
46 std::string systemLoadSync = system::GetParameter(TEMPERATURE_SYSPARAM_SYNC, "");
47 std::string systemLoadThumb = system::GetParameter(TEMPERATURE_SYSPARAM_THUMB, "");
48 LOGI("OnSystemloadLevel is normal, level:%{public}d", level);
49 if (systemLoadSync == "true") {
50 LOGI("SetParameter TEMPERATURE_SYSPARAM_SYNC false");
51 system::SetParameter(TEMPERATURE_SYSPARAM_SYNC, "false");
52 TaskStateManager::GetInstance().StartTask();
53 dataSyncManager_->TriggerRecoverySync(SyncTriggerType::SYSTEM_LOAD_TRIGGER);
54 }
55 if (systemLoadThumb == "true") {
56 LOGI("SetParameter TEMPERATURE_SYSPARAM_THUMB false");
57 system::SetParameter(TEMPERATURE_SYSPARAM_THUMB, "false");
58 TaskStateManager::GetInstance().StartTask();
59 dataSyncManager_->DownloadThumb();
60 }
61 }
62 }
63
GetSystemloadLevel()64 void SystemLoadStatus::GetSystemloadLevel()
65 {
66 loadstatus_ = ResourceSchedule::ResSchedClient::GetInstance().GetSystemloadLevel();
67 LOGI("GetSystemloadLevel finish, loadstatus:%{public}d", loadstatus_);
68 }
69
Setload(int32_t load)70 void SystemLoadStatus::Setload(int32_t load)
71 {
72 loadstatus_ = load;
73 }
74
InitSystemload(std::shared_ptr<CloudFile::DataSyncManager> dataSyncManager)75 void SystemLoadStatus::InitSystemload(std::shared_ptr<CloudFile::DataSyncManager> dataSyncManager)
76 {
77 GetSystemloadLevel();
78 RegisterSystemloadCallback(dataSyncManager);
79 }
80
IsLoadStatusUnderHot(STOPPED_TYPE process)81 bool SystemLoadStatus::IsLoadStatusUnderHot(STOPPED_TYPE process)
82 {
83 if (loadstatus_ > SYSTEMLOADLEVEL_HOT) {
84 if (process == STOPPED_IN_THUMB) {
85 LOGI("SetParameter TEMPERATURE_SYSPARAM_THUMB true");
86 system::SetParameter(TEMPERATURE_SYSPARAM_THUMB, "true");
87 } else if (process == STOPPED_IN_SYNC) {
88 LOGI("SetParameter TEMPERATURE_SYSPARAM_SYNC true");
89 system::SetParameter(TEMPERATURE_SYSPARAM_SYNC, "true");
90 }
91 return false;
92 }
93 return true;
94 }
95 }