1 /* 2 * Copyright (c) 2021 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 #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 AppendData(const appMap& mAPPStartupData); 72 bool UpdateAPPStartupData(uint32_t row, const std::string& nameString, uint32_t startIndex); 73 bool ProcAbilityLaunchData(const std::string& nameString, uint64_t raw); 74 void ProcForegroundData(uint64_t raw); 75 76 private: 77 std::deque<std::unique_ptr<APPStartupData>> procTouchItems_; 78 std::deque<std::unique_ptr<APPStartupData>> startUIAbilityBySCBItems_; 79 std::deque<std::unique_ptr<APPStartupData>> loadAbilityItems_; 80 appMap mAPPStartupData_; 81 std::unordered_map<uint32_t, appMap> mAPPStartupDataWithPid_; 82 const std::string procTouchCmd_ = "H:client dispatch touchId:"; 83 const std::string startUIAbilityBySCBCmd_ = 84 "H:OHOS::ErrCode OHOS::AAFwk::AbilityManagerClient::StartUIAbilityBySCB"; 85 const std::string loadAbilityCmd_ = "H:virtual void OHOS::AppExecFwk::AppMgrServiceInner::LoadAbility"; 86 const std::string appLaunchCmd_ = 87 "H:virtual void OHOS::AppExecFwk::AppMgrServiceInner::AttachApplication(const pid_t, const " 88 "sptr<OHOS::AppExecFwk::IAppScheduler> &)##"; 89 const std::string uiLaunchCmd_ = 90 "H:void OHOS::AppExecFwk::MainThread::HandleLaunchAbility(const std::shared_ptr<AbilityLocalRecord> &)##"; 91 const std::string uiOnForegroundFirstCmd_ = 92 "H:void OHOS::AbilityRuntime::FAAbilityThread::HandleAbilityTransaction(const OHOS::AbilityRuntime::Want &, " 93 "const OHOS::AbilityRuntime::LifeCycleStateInfo &, sptr<AppExecFwk::SessionInfo>)##"; 94 const std::string uiOnForegroundSecCmd_ = "H:void OHOS::AbilityRuntime::UIAbilityThread::HandleAbilityTransaction"; 95 const std::string dlopenCmd_ = "dlopen:"; 96 }; 97 } // namespace TraceStreamer 98 } // namespace SysTuning 99 100 #endif // APP_START_FILTER_H 101