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