1 /*
2 * Copyright (c) 2022 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 "work_event_handler.h"
17
18 #include "work_scheduler_service.h"
19 #include "work_policy_manager.h"
20 #include "work_sched_hilog.h"
21
22 using namespace std;
23 using namespace OHOS::AppExecFwk;
24
25 namespace OHOS {
26 namespace WorkScheduler {
WorkEventHandler(const shared_ptr<EventRunner>& runner, const std::shared_ptr<WorkSchedulerService>& service)27 WorkEventHandler::WorkEventHandler(const shared_ptr<EventRunner>& runner,
28 const std::shared_ptr<WorkSchedulerService>& service) : EventHandler(runner), service_(service)
29 {
30 WS_HILOGD("instance created.");
31 }
32
ProcessEvent([[maybe_unused]] const InnerEvent::Pointer& event)33 void WorkEventHandler::ProcessEvent([[maybe_unused]] const InnerEvent::Pointer& event)
34 {
35 WS_HILOGD("begin");
36 if (service_.expired()) {
37 WS_HILOGE("service_ expired");
38 return;
39 }
40 auto service = service_.lock();
41 if (!service) {
42 WS_HILOGE("service_ null");
43 return;
44 }
45 WS_HILOGD("eventid = %{public}u", event->GetInnerEventId());
46 switch (event->GetInnerEventId()) {
47 case RETRIGGER_MSG: {
48 service->GetWorkPolicyManager()->CheckWorkToRun();
49 break;
50 }
51 case SERVICE_INIT_MSG: {
52 service->Init(GetEventRunner());
53 break;
54 }
55 case IDE_RETRIGGER_MSG: {
56 service->GetWorkPolicyManager()->TriggerIdeWork();
57 break;
58 }
59 case CHECK_CONDITION_MSG: {
60 service->TriggerWorkIfConditionReady();
61 break;
62 }
63 case CHECK_DEEPIDLE_MSG: {
64 WS_HILOGI("Into deep idle mode");
65 service->GetWorkQueueManager()->OnConditionChanged(WorkCondition::Type::DEEP_IDLE,
66 std::make_shared<DetectorValue>(0, 0, true, std::string()));
67 service->LoadSa();
68 break;
69 }
70 default:
71 return;
72 }
73 }
74 } // namespace WorkScheduler
75 } // namespace OHOS