• 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 #include "config_filter.h"
27 
28 namespace SysTuning {
29 namespace TraceStreamer {
30 using namespace SysTuning::base;
31 enum StartupApp {
32     PROCESS_TOUCH = 0,
33     START_UI_ABILITY_BY_SCB,
34     LOAD_ABILITY,
35     APPLICATION_LAUNCHING,
36     UI_ABILITY_LAUNCHING,
37     UI_ABILITY_ONFOREGROUND,
38     FIRST_FRAME_APP_PHASE,
39     FIRST_FRAME_RENDER_PHASE
40 };
41 class APPStartupData {
42 public:
APPStartupData(uint32_t callid,uint32_t ipid,uint32_t tid,uint64_t startTime,uint64_t endTime)43     APPStartupData(uint32_t callid, uint32_t ipid, uint32_t tid, uint64_t startTime, uint64_t endTime)
44         : callid_(callid), ipid_(ipid), tid_(tid), startTime_(startTime), endTime_(endTime)
45     {
46     }
47     uint32_t callid_;
48     uint32_t ipid_;
49     uint32_t tid_;
50     uint64_t startTime_;
51     uint64_t endTime_;
52 };
53 
54 class APPStartupFilter : private FilterBase {
55 public:
56     APPStartupFilter(TraceDataCache *dataCache, const TraceStreamerFilters *filter);
57     APPStartupFilter(const APPStartupFilter &) = delete;
58     APPStartupFilter &operator=(const APPStartupFilter &) = delete;
59     ~APPStartupFilter() override;
60     void FilterAllAPPStartupData();
61 
62 private:
63     using appMap = std::unordered_map<DataIndex, std::map<uint32_t, std::unique_ptr<APPStartupData>>>;
64     void ParserSoInitalization();
65     void CalcDepthByTimeStamp(std::map<uint32_t, std::map<uint64_t, uint32_t>>::iterator it,
66                               uint32_t &depth,
67                               uint64_t endTime,
68                               uint64_t startTime);
69     void ParserAppStartup();
70     void UpdatePidByNameIndex(const appMap &mAPPStartupData);
71     bool CaclRsDataByPid(appMap &mAPPStartupData);
72     void AppenAllData(const appMap &mAPPStartupData);
73     void AppendAssociatedData(DataIndex packedNameIndex,
74                               const std::map<uint32_t, std::unique_ptr<APPStartupData>> &stagesData);
75     bool UpdateAPPStartupData(uint32_t row, const std::string &nameString, uint32_t startIndex);
76     bool ProcAbilityLaunchData(const std::string &nameString, uint64_t raw);
77     void ProcForegroundData(uint64_t raw);
78 
79 private:
80     std::deque<std::unique_ptr<APPStartupData>> procTouchItems_;
81     std::deque<std::unique_ptr<APPStartupData>> startUIAbilityBySCBItems_;
82     std::deque<std::unique_ptr<APPStartupData>> loadAbilityItems_;
83     appMap mAPPStartupData_;
84     std::map<uint32_t, appMap> mAPPStartupDataWithPid_;
85     const std::string dlopenCmd_ = "dlopen:";
86 };
87 } // namespace TraceStreamer
88 } // namespace SysTuning
89 
90 #endif // APP_START_FILTER_H
91