1020a203aSopenharmony_ci/* 2020a203aSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3020a203aSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4020a203aSopenharmony_ci * you may not use this file except in compliance with the License. 5020a203aSopenharmony_ci * You may obtain a copy of the License at 6020a203aSopenharmony_ci * 7020a203aSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8020a203aSopenharmony_ci * 9020a203aSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10020a203aSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11020a203aSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12020a203aSopenharmony_ci * See the License for the specific language governing permissions and 13020a203aSopenharmony_ci * limitations under the License. 14020a203aSopenharmony_ci */ 15020a203aSopenharmony_ci 16020a203aSopenharmony_ci#include "AppLaunchMonitor.h" 17020a203aSopenharmony_ci#include "AppLaunchMonitorConverter.h" 18020a203aSopenharmony_ci#include "ActionId.h" 19020a203aSopenharmony_ci#include "JlogId.h" 20020a203aSopenharmony_ci#include "hiview_logger.h" 21020a203aSopenharmony_ci 22020a203aSopenharmony_cinamespace OHOS { 23020a203aSopenharmony_cinamespace HiviewDFX { 24020a203aSopenharmony_ciDEFINE_LOG_LABEL(0xD002D66, "Hiview-XPerformance"); 25020a203aSopenharmony_ci 26020a203aSopenharmony_ciusing AppStartCheckPointData = IAppLaunchSceneDataProcessor::AppStartCheckPointData; 27020a203aSopenharmony_ci 28020a203aSopenharmony_ciAppLaunchMonitor::AppLaunchMonitor(IMonitorRegistry* registry, IAppThrExecutor* exec, IAppStartReporter* reporter, 29020a203aSopenharmony_ci IAppLaunchSceneDataProcessor* scene) 30020a203aSopenharmony_ci{ 31020a203aSopenharmony_ci this->registry = registry; 32020a203aSopenharmony_ci this->exec = exec; 33020a203aSopenharmony_ci this->reporter = reporter; 34020a203aSopenharmony_ci this->scene = scene; 35020a203aSopenharmony_ci this->actionId = APP_START; 36020a203aSopenharmony_ci} 37020a203aSopenharmony_ci 38020a203aSopenharmony_civoid AppLaunchMonitor::HandleEvt(std::shared_ptr<XperfEvt> evt) 39020a203aSopenharmony_ci{ 40020a203aSopenharmony_ci HIVIEW_LOGI("AppLaunchMonitor::HandleEvt"); 41020a203aSopenharmony_ci if (exec != nullptr) { 42020a203aSopenharmony_ci IAppThrExecutor::AppEvtData appEvtData = AppLaunchMonitorConverter::ConvertXperfEvtToAppEvtData(*evt.get()); 43020a203aSopenharmony_ci exec->ExecuteHandleEvtInMainThr(this, appEvtData); 44020a203aSopenharmony_ci } else { 45020a203aSopenharmony_ci HIVIEW_LOGE("[AppLaunchMonitor::HandleEvt] exec is null"); 46020a203aSopenharmony_ci } 47020a203aSopenharmony_ci} 48020a203aSopenharmony_ci 49020a203aSopenharmony_civoid AppLaunchMonitor::ExecuteProcessAppEvtTaskInMainThr(const IAppThrExecutor::AppEvtData& data) 50020a203aSopenharmony_ci{ 51020a203aSopenharmony_ci HIVIEW_LOGI("AppLaunchMonitor::ExecuteProcessAppEvtTaskInMainThr"); 52020a203aSopenharmony_ci try { 53020a203aSopenharmony_ci AppStartCheckPointData cpData = AppLaunchMonitorConverter::ConvertAppEvtDataToCheckPointData(data); 54020a203aSopenharmony_ci if (scene != nullptr) { 55020a203aSopenharmony_ci scene->ProcessSceneData(cpData); 56020a203aSopenharmony_ci } else { 57020a203aSopenharmony_ci HIVIEW_LOGE("[AppLaunchMonitor::ExecuteProcessAppEvtTaskInMainThr] scene is null"); 58020a203aSopenharmony_ci } 59020a203aSopenharmony_ci } catch (std::logic_error& ex) { 60020a203aSopenharmony_ci HIVIEW_LOGD("exception error:%{public}s", std::string(ex.what()).c_str()); 61020a203aSopenharmony_ci } 62020a203aSopenharmony_ci} 63020a203aSopenharmony_ci 64020a203aSopenharmony_civoid AppLaunchMonitor::ReportMetrics(const AppStartMetrics& metrics) 65020a203aSopenharmony_ci{ 66020a203aSopenharmony_ci HIVIEW_LOGI("AppLaunchMonitor::ReportMetrics"); 67020a203aSopenharmony_ci try { 68020a203aSopenharmony_ci ReportNormal(metrics); 69020a203aSopenharmony_ci } catch (std::logic_error& ex) { 70020a203aSopenharmony_ci HIVIEW_LOGE("ReportMetrics error: %{public}s", std::string(ex.what()).c_str()); 71020a203aSopenharmony_ci } 72020a203aSopenharmony_ci} 73020a203aSopenharmony_ci 74020a203aSopenharmony_civoid AppLaunchMonitor::ReportNormal(const AppStartMetrics& metrics) 75020a203aSopenharmony_ci{ 76020a203aSopenharmony_ci HIVIEW_LOGI("AppLaunchMonitor::ReportNormal"); 77020a203aSopenharmony_ci if (reporter == nullptr) { 78020a203aSopenharmony_ci HIVIEW_LOGE("reporter is null."); 79020a203aSopenharmony_ci return; 80020a203aSopenharmony_ci } 81020a203aSopenharmony_ci AppStartReportEvent reportEvent = ConstructReportEvent(metrics); 82020a203aSopenharmony_ci reporter->ReportNormal(reportEvent); 83020a203aSopenharmony_ci} 84020a203aSopenharmony_ci 85020a203aSopenharmony_ci 86020a203aSopenharmony_ciAppStartReportEvent AppLaunchMonitor::ConstructReportEvent(const AppStartMetrics& metrics) 87020a203aSopenharmony_ci{ 88020a203aSopenharmony_ci AppStartReportEvent re = AppLaunchMonitorConverter::ConvertMetricToReportEvent(metrics); 89020a203aSopenharmony_ci return re; 90020a203aSopenharmony_ci} 91020a203aSopenharmony_ci} // HiviewDFX 92020a203aSopenharmony_ci} // OHOS