• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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 
16 #include "background_task_observer.h"
17 
18 #ifdef CONFIG_BGTASK_MGR
19 #include "res_sched_log.h"
20 #include "res_sched_mgr.h"
21 #include "res_type.h"
22 
23 #undef LOG_TAG
24 #define LOG_TAG "BackgroundTaskObserver"
25 
26 namespace OHOS {
27 namespace ResourceSchedule {
MarshallingTransientTaskAppInfo(const std::shared_ptr<TransientTaskAppInfo> & info,nlohmann::json & payload)28 void BackgroundTaskObserver::MarshallingTransientTaskAppInfo(
29     const std::shared_ptr<TransientTaskAppInfo>& info, nlohmann::json& payload)
30 {
31     payload["pid"] = std::to_string(info->GetPid());
32     payload["uid"] = std::to_string(info->GetUid());
33     payload["bundleName"] = info->GetPackageName();
34 }
35 
OnTransientTaskStart(const std::shared_ptr<TransientTaskAppInfo> & info)36 void BackgroundTaskObserver::OnTransientTaskStart(const std::shared_ptr<TransientTaskAppInfo>& info)
37 {
38     if (!ValidateTaskInfo(info)) {
39         return;
40     }
41 
42     nlohmann::json payload;
43     MarshallingTransientTaskAppInfo(info, payload);
44     ResSchedMgr::GetInstance().ReportData(
45         ResType::RES_TYPE_TRANSIENT_TASK, ResType::TransientTaskStatus::TRANSIENT_TASK_START, payload);
46 }
47 
OnTransientTaskEnd(const std::shared_ptr<TransientTaskAppInfo> & info)48 void BackgroundTaskObserver::OnTransientTaskEnd(const std::shared_ptr<TransientTaskAppInfo>& info)
49 {
50     if (!ValidateTaskInfo(info)) {
51         RESSCHED_LOGE("%{public}s failed, invalid app info!", __func__);
52         return;
53     }
54 
55     nlohmann::json payload;
56     MarshallingTransientTaskAppInfo(info, payload);
57     ResSchedMgr::GetInstance().ReportData(
58         ResType::RES_TYPE_TRANSIENT_TASK, ResType::TransientTaskStatus::TRANSIENT_TASK_END, payload);
59 }
60 
OnTransientTaskErr(const std::shared_ptr<TransientTaskAppInfo> & info)61 void BackgroundTaskObserver::OnTransientTaskErr(const std::shared_ptr<TransientTaskAppInfo>& info)
62 {
63     if (!ValidateTaskInfo(info)) {
64         RESSCHED_LOGE("%{public}s failed, invalid app info!", __func__);
65         return;
66     }
67 
68     nlohmann::json payload;
69     MarshallingTransientTaskAppInfo(info, payload);
70     ResSchedMgr::GetInstance().ReportData(
71         ResType::RES_TYPE_TRANSIENT_TASK, ResType::TransientTaskStatus::TRANSIENT_TASK_ERR, payload);
72 }
73 
OnAppTransientTaskStart(const std::shared_ptr<TransientTaskAppInfo> & info)74 void BackgroundTaskObserver::OnAppTransientTaskStart(const std::shared_ptr<TransientTaskAppInfo>& info)
75 {
76     nlohmann::json payload;
77     MarshallingTransientTaskAppInfo(info, payload);
78     ResSchedMgr::GetInstance().ReportData(
79         ResType::RES_TYPE_TRANSIENT_TASK, ResType::TransientTaskStatus::APP_TRANSIENT_TASK_START, payload);
80 }
81 
OnAppTransientTaskEnd(const std::shared_ptr<TransientTaskAppInfo> & info)82 void BackgroundTaskObserver::OnAppTransientTaskEnd(const std::shared_ptr<TransientTaskAppInfo>& info)
83 {
84     nlohmann::json payload;
85     MarshallingTransientTaskAppInfo(info, payload);
86     ResSchedMgr::GetInstance().ReportData(
87         ResType::RES_TYPE_TRANSIENT_TASK, ResType::TransientTaskStatus::APP_TRANSIENT_TASK_END, payload);
88 }
89 
MarshallingContinuousTaskCallbackInfo(const std::shared_ptr<ContinuousTaskCallbackInfo> & continuousTaskCallbackInfo,nlohmann::json & payload)90 void BackgroundTaskObserver::MarshallingContinuousTaskCallbackInfo(
91     const std::shared_ptr<ContinuousTaskCallbackInfo>& continuousTaskCallbackInfo, nlohmann::json& payload)
92 {
93     payload["pid"] = std::to_string(continuousTaskCallbackInfo->GetCreatorPid());
94     payload["uid"] = std::to_string(continuousTaskCallbackInfo->GetCreatorUid());
95     payload["abilityName"] = continuousTaskCallbackInfo->GetAbilityName();
96     payload["isBatchApi"] =  std::to_string(continuousTaskCallbackInfo->IsBatchApi());
97     payload["typeId"] = std::to_string(continuousTaskCallbackInfo->GetTypeId());
98     payload["abilityId"] = std::to_string(continuousTaskCallbackInfo->GetAbilityId());
99     payload["isFromWebview"] = continuousTaskCallbackInfo->IsFromWebview();
100     payload["typeIds"] = continuousTaskCallbackInfo->GetTypeIds();
101     payload["tokenId"] = continuousTaskCallbackInfo->GetTokenId();
102 }
103 
OnContinuousTaskStart(const std::shared_ptr<ContinuousTaskCallbackInfo> & continuousTaskCallbackInfo)104 void BackgroundTaskObserver::OnContinuousTaskStart(
105     const std::shared_ptr<ContinuousTaskCallbackInfo> &continuousTaskCallbackInfo)
106 {
107     if (!ValidateTaskInfo(continuousTaskCallbackInfo)) {
108         RESSCHED_LOGE("%{public}s failed, invalid event data!", __func__);
109         return;
110     }
111 
112     nlohmann::json payload;
113     MarshallingContinuousTaskCallbackInfo(continuousTaskCallbackInfo, payload);
114     ResSchedMgr::GetInstance().ReportData(
115         ResType::RES_TYPE_CONTINUOUS_TASK, ResType::ContinuousTaskStatus::CONTINUOUS_TASK_START, payload);
116 }
117 
OnContinuousTaskStop(const std::shared_ptr<ContinuousTaskCallbackInfo> & continuousTaskCallbackInfo)118 void BackgroundTaskObserver::OnContinuousTaskStop(
119     const std::shared_ptr<ContinuousTaskCallbackInfo> &continuousTaskCallbackInfo)
120 {
121     if (!ValidateTaskInfo(continuousTaskCallbackInfo)) {
122         RESSCHED_LOGE("%{public}s failed, invalid event data!", __func__);
123         return;
124     }
125 
126     nlohmann::json payload;
127     MarshallingContinuousTaskCallbackInfo(continuousTaskCallbackInfo, payload);
128     ResSchedMgr::GetInstance().ReportData(
129         ResType::RES_TYPE_CONTINUOUS_TASK, ResType::ContinuousTaskStatus::CONTINUOUS_TASK_END, payload);
130 }
131 
OnContinuousTaskUpdate(const std::shared_ptr<ContinuousTaskCallbackInfo> & continuousTaskCallbackInfo)132 void BackgroundTaskObserver::OnContinuousTaskUpdate(
133     const std::shared_ptr<ContinuousTaskCallbackInfo> &continuousTaskCallbackInfo)
134 {
135     if (!ValidateTaskInfo(continuousTaskCallbackInfo)) {
136         RESSCHED_LOGE("%{public}s failed, invalid event data!", __func__);
137         return;
138     }
139 
140     nlohmann::json payload;
141     MarshallingContinuousTaskCallbackInfo(continuousTaskCallbackInfo, payload);
142     ResSchedMgr::GetInstance().ReportData(
143         ResType::RES_TYPE_CONTINUOUS_TASK, ResType::ContinuousTaskStatus::CONTINUOUS_TASK_UPDATE, payload);
144 }
145 
OnRemoteDied(const wptr<IRemoteObject> & object)146 void BackgroundTaskObserver::OnRemoteDied(const wptr<IRemoteObject> &object)
147 {
148     RESSCHED_LOGI("%{public}s.", __func__);
149 }
150 
MarshallingResourceInfo(const std::shared_ptr<BackgroundTaskMgr::ResourceCallbackInfo> & resourceInfo,nlohmann::json & payload)151 void BackgroundTaskObserver::MarshallingResourceInfo(
152     const std::shared_ptr<BackgroundTaskMgr::ResourceCallbackInfo> &resourceInfo, nlohmann::json &payload)
153 {
154     if (!resourceInfo) {
155         RESSCHED_LOGE("%{public}s : resourceInfo nullptr!", __func__);
156         return;
157     }
158     payload["pid"] = resourceInfo->GetPid();
159     payload["uid"] = resourceInfo->GetUid();
160     payload["resourceNumber"] = resourceInfo->GetResourceNumber();
161     payload["bundleName"] = resourceInfo->GetBundleName();
162 }
163 
OnAppEfficiencyResourcesApply(const std::shared_ptr<BackgroundTaskMgr::ResourceCallbackInfo> & resourceInfo)164 void BackgroundTaskObserver::OnAppEfficiencyResourcesApply(
165     const std::shared_ptr<BackgroundTaskMgr::ResourceCallbackInfo> &resourceInfo)
166 {
167     nlohmann::json payload;
168     MarshallingResourceInfo(resourceInfo, payload);
169     ResSchedMgr::GetInstance().ReportData(
170         ResType::RES_TYPE_EFFICIENCY_RESOURCES_STATE_CHANGED,
171         ResType::EfficiencyResourcesStatus::APP_EFFICIENCY_RESOURCES_APPLY,
172         payload);
173 }
174 
OnAppEfficiencyResourcesReset(const std::shared_ptr<BackgroundTaskMgr::ResourceCallbackInfo> & resourceInfo)175 void BackgroundTaskObserver::OnAppEfficiencyResourcesReset(
176     const std::shared_ptr<BackgroundTaskMgr::ResourceCallbackInfo> &resourceInfo)
177 {
178     nlohmann::json payload;
179     MarshallingResourceInfo(resourceInfo, payload);
180     ResSchedMgr::GetInstance().ReportData(
181         ResType::RES_TYPE_EFFICIENCY_RESOURCES_STATE_CHANGED,
182         ResType::EfficiencyResourcesStatus::APP_EFFICIENCY_RESOURCES_RESET,
183         payload);
184 }
185 
OnProcEfficiencyResourcesApply(const std::shared_ptr<BackgroundTaskMgr::ResourceCallbackInfo> & resourceInfo)186 void BackgroundTaskObserver::OnProcEfficiencyResourcesApply(
187     const std::shared_ptr<BackgroundTaskMgr::ResourceCallbackInfo> &resourceInfo)
188 {
189     nlohmann::json payload;
190     MarshallingResourceInfo(resourceInfo, payload);
191     ResSchedMgr::GetInstance().ReportData(
192         ResType::RES_TYPE_EFFICIENCY_RESOURCES_STATE_CHANGED,
193         ResType::EfficiencyResourcesStatus::PROC_EFFICIENCY_RESOURCES_APPLY,
194         payload);
195 }
196 
OnProcEfficiencyResourcesReset(const std::shared_ptr<BackgroundTaskMgr::ResourceCallbackInfo> & resourceInfo)197 void BackgroundTaskObserver::OnProcEfficiencyResourcesReset(
198     const std::shared_ptr<BackgroundTaskMgr::ResourceCallbackInfo> &resourceInfo)
199 {
200     nlohmann::json payload;
201     MarshallingResourceInfo(resourceInfo, payload);
202     ResSchedMgr::GetInstance().ReportData(
203         ResType::RES_TYPE_EFFICIENCY_RESOURCES_STATE_CHANGED,
204         ResType::EfficiencyResourcesStatus::PROC_EFFICIENCY_RESOURCES_RESET,
205         payload);
206 }
207 } // namespace ResourceSchedule
208 } // namespace OHOS
209 #endif
210