• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved.
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 #ifndef APP_START_FILTER_H
17 #define APP_START_FILTER_H
18 
19 #include <cstdint>
20 #include <vector>
21 #include "filter_base.h"
22 #include "string_help.h"
23 #include "trace_data_cache.h"
24 #include "trace_streamer_filters.h"
25 #include "ts_common.h"
26 
27 namespace SysTuning {
28 namespace TraceStreamer {
29 using namespace SysTuning::base;
30 enum StartupApp {
31     PROCESS_TOUCH = 0,
32     START_UI_ABILITY_BY_SCB,
33     LOAD_ABILITY,
34     APPLICATION_LAUNCHING,
35     UI_ABILITY_LAUNCHING,
36     UI_ABILITY_ONFOREGROUND,
37     FIRST_FRAME_APP_PHASE,
38     FIRST_FRAME_RENDER_PHASE
39 };
40 class APPStartupData {
41 public:
APPStartupData(uint32_t callid,uint32_t ipid,uint32_t tid,uint64_t startTime,uint64_t endTime)42     APPStartupData(uint32_t callid, uint32_t ipid, uint32_t tid, uint64_t startTime, uint64_t endTime)
43         : callid_(callid), ipid_(ipid), tid_(tid), startTime_(startTime), endTime_(endTime)
44     {
45     }
46     uint32_t callid_;
47     uint32_t ipid_;
48     uint32_t tid_;
49     uint64_t startTime_;
50     uint64_t endTime_;
51 };
52 
53 class APPStartupFilter : private FilterBase {
54 public:
55     APPStartupFilter(TraceDataCache *dataCache, const TraceStreamerFilters *filter);
56     APPStartupFilter(const APPStartupFilter &) = delete;
57     APPStartupFilter &operator=(const APPStartupFilter &) = delete;
58     ~APPStartupFilter() override;
59     void FilterAllAPPStartupData();
60 
61 private:
62     using appMap = std::unordered_map<DataIndex, std::map<uint32_t, std::unique_ptr<APPStartupData>>>;
63     void ParserSoInitalization();
64     void CalcDepthByTimeStamp(std::map<uint32_t, std::map<uint64_t, uint32_t>>::iterator it,
65                               uint32_t &depth,
66                               uint64_t endTime,
67                               uint64_t startTime);
68     void ParserAppStartup();
69     void UpdatePidByNameIndex(const appMap &mAPPStartupData);
70     bool CaclRsDataByPid(appMap &mAPPStartupData);
71     void AppenAllData(const appMap &mAPPStartupData);
72     void AppendAssociatedData(DataIndex packedNameIndex,
73                               const std::map<uint32_t, std::unique_ptr<APPStartupData>> &stagesData);
74     bool UpdateAPPStartupData(uint32_t row, const std::string &nameString, uint32_t startIndex);
75     bool ProcAbilityLaunchData(const std::string &nameString, uint64_t raw);
76     void ProcForegroundData(uint64_t raw);
77 
78 private:
79     std::deque<std::unique_ptr<APPStartupData>> procTouchItems_;
80     std::deque<std::unique_ptr<APPStartupData>> startUIAbilityBySCBItems_;
81     std::deque<std::unique_ptr<APPStartupData>> loadAbilityItems_;
82     appMap mAPPStartupData_;
83     std::map<uint32_t, appMap> mAPPStartupDataWithPid_;
84     const std::string procTouchCmd_ = "H:client dispatch touchId:";
85     const std::string startUIAbilityBySCBCmd_ =
86         "H:OHOS::ErrCode OHOS::AAFwk::AbilityManagerClient::StartUIAbilityBySCB";
87     const std::string loadAbilityCmd_ = "H:virtual void OHOS::AppExecFwk::AppMgrServiceInner::LoadAbility";
88     const std::string appLaunchCmd_ =
89         "H:virtual void OHOS::AppExecFwk::AppMgrServiceInner::AttachApplication(const pid_t, const "
90         "sptr<OHOS::AppExecFwk::IAppScheduler> &)##";
91     const std::string uiLaunchCmd_ =
92         "H:void OHOS::AppExecFwk::MainThread::HandleLaunchAbility(const std::shared_ptr<AbilityLocalRecord> &)##";
93     const std::string uiOnForegroundFirstCmd_ =
94         "H:void OHOS::AbilityRuntime::FAAbilityThread::HandleAbilityTransaction(const OHOS::AbilityRuntime::Want &, "
95         "const OHOS::AbilityRuntime::LifeCycleStateInfo &, sptr<AppExecFwk::SessionInfo>)##";
96     const std::string uiOnForegroundSecCmd_ = "H:void OHOS::AbilityRuntime::UIAbilityThread::HandleAbilityTransaction";
97     const std::string dlopenCmd_ = "dlopen:";
98 };
99 } // namespace TraceStreamer
100 } // namespace SysTuning
101 
102 #endif // APP_START_FILTER_H
103