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 "AnimatorSceneDataProcessor.h"
17 #include "JankAnimatorMonitor.h"
18 #include "AppLaunchSceneDataProcessor.h"
19 #include "AppLaunchMonitor.h"
20 #include "AppLaunchSceneDbAdapter.h"
21 #include "SceneTimerOhImpl.h"
22 #include "AppTimerAdapter.h"
23 #include "AppStartReporter.h"
24 #include "JankAnimatorReporter.h"
25 #include "NormalContext.h"
26 #include "AppStartReporterAdapter.h"
27 #include "JankAnimatorReporterAdapter.h"
28 #include "JlogId.h"
29 #include "ActionId.h"
30
31 namespace OHOS {
32 namespace HiviewDFX {
33 namespace {
34 enum TimerUser {
35 APP_START,
36 };
37 }
38
CreateContext()39 void NormalContext::CreateContext()
40 {
41 /* init monitor */
42 NormalContext::CommonParts common = MakeCommonParts();
43 /* hold on IEventObservable */
44 this->eventObservable = common.eventsPoster;
45
46 InitAppStartMonitor(common);
47 InitJankAnimatorMonitor(common);
48 }
49
MakeCommonParts()50 NormalContext::CommonParts NormalContext::MakeCommonParts()
51 {
52 ThrExecutor* thr = new ThrExecutor();
53 ISceneTimerInfrastructure* sceneTimerInfrastructure = new SceneTimerOhImpl();
54 EventsPoster* eventsPoster = new EventsPoster();
55 return NormalContext::CommonParts(thr, sceneTimerInfrastructure, eventsPoster);
56 }
57
InitAppStartMonitor(const NormalContext::CommonParts& common)58 void NormalContext::InitAppStartMonitor(const NormalContext::CommonParts& common)
59 {
60 IMonitor* appStartMonitor = MakeAppStartMonitor(common);
61 RegisterMonitorByLogID(static_cast<int>(JLID_GRAPHIC_INTERACTION_RESPONSE_LATENCY), appStartMonitor);
62 RegisterMonitorByLogID(static_cast<int>(JLID_START_ABILITY), appStartMonitor);
63 RegisterMonitorByLogID(static_cast<int>(JLID_AAFWK_APP_STARTUP_TYPE), appStartMonitor);
64 RegisterMonitorByLogID(static_cast<int>(JLID_AAFWK_PROCESS_START), appStartMonitor);
65 RegisterMonitorByLogID(static_cast<int>(JLID_APP_ATTACH), appStartMonitor);
66 RegisterMonitorByLogID(static_cast<int>(JLID_APP_FOREGROUND), appStartMonitor);
67 RegisterMonitorByLogID(static_cast<int>(JLID_ABILITY_ONFOREGROUND), appStartMonitor);
68 RegisterMonitorByLogID(static_cast<int>(JLID_WINDOWMANAGER_START_WINDOW), appStartMonitor);
69 RegisterMonitorByLogID(static_cast<int>(JLID_GRAPHIC_FIRST_FRAME_DRAWN), appStartMonitor);
70 RegisterMonitorByLogID(static_cast<int>(JLID_AAFWK_DRAWN_COMPLETED), appStartMonitor);
71 RegisterMonitorByLogID(static_cast<int>(JLID_GRAPHIC_INTERACTION_COMPLETED_LATENCY), appStartMonitor);
72 RegisterMonitorByLogID(static_cast<int>(JLID_ACE_INTERACTION_COMPLETED_LATENCY), appStartMonitor);
73 }
74
MakeAppStartMonitor(const NormalContext::CommonParts& common)75 IMonitor* NormalContext::MakeAppStartMonitor(const NormalContext::CommonParts& common)
76 {
77 IAppLaunchSceneDb* db = new AppLaunchSceneDbAdapter();
78 ITimeoutExecutor* exec = common.thr;
79 AppTimerAdapter* sceneTimer = new AppTimerAdapter(TimerUser::APP_START, common.timerInfra);
80 AppLaunchSceneDataProcessor* processor = new AppLaunchSceneDataProcessor(db, exec, nullptr, sceneTimer);
81 sceneTimer->SetCb(processor);
82 IAppStartReportInfrastructure* infrastructure = new AppStartReporter();
83 IAppStartReporter* reporter = new AppStartReporterAdapter(infrastructure, common.eventsPoster);
84 AppLaunchMonitor* appStartMonitor = new AppLaunchMonitor(this, common.thr, reporter, processor);
85
86 processor->SetMetricReporter(appStartMonitor);
87 return appStartMonitor;
88 }
89
InitJankAnimatorMonitor(const NormalContext::CommonParts& common)90 void NormalContext::InitJankAnimatorMonitor(const NormalContext::CommonParts& common)
91 {
92 IMonitor* animatorMonitor = MakeJankAnimatorMonitor(common);
93 RegisterMonitorByLogID(static_cast<int>(JLID_ACE_INTERACTION_APP_JANK), animatorMonitor);
94 RegisterMonitorByLogID(static_cast<int>(JLID_GRAPHIC_INTERACTION_RENDER_JANK), animatorMonitor);
95 RegisterMonitorByLogID(static_cast<int>(JLID_WINDOWMANAGER_FOCUS_WINDOW), animatorMonitor);
96 }
97
MakeJankAnimatorMonitor(const NormalContext::CommonParts& common)98 IMonitor* NormalContext::MakeJankAnimatorMonitor(const NormalContext::CommonParts& common)
99 {
100 AnimatorSceneDataProcessor* dataProcessor = new AnimatorSceneDataProcessor();
101 IJankAnimatorReportInfrastructure* reporterImpl = new JankAnimatorReporter();
102 IJankAnimatorReporter* reporter = new JankAnimatorReporterAdapter(reporterImpl, common.eventsPoster);
103 JankAnimatorMonitor* animatorMonitor = new JankAnimatorMonitor(common.thr, dataProcessor, reporter);
104 dataProcessor->SetCb(animatorMonitor);
105 return animatorMonitor;
106 }
107 } // HiviewDFX
108 } // OHOS