From e06b1f41391b886b879f2e092b21e7f4292e3075 Mon Sep 17 00:00:00 2001 From: wufarong Date: Tue, 10 Jun 2025 18:50:30 +0800 Subject: [PATCH] hitrace Signed-off-by: wufarong --- frameworks/ans/BUILD.gn | 1 + frameworks/js/napi/src/manager/BUILD.gn | 1 + .../js/napi/src/manager/napi_publish.cpp | 3 +++ frameworks/js/napi/src/subscribe.cpp | 15 ++++++++++++-- frameworks/js/napi/src/subscribe/BUILD.gn | 1 + services/ans/BUILD.gn | 1 + .../include/advanced_notification_service.h | 2 ++ .../advanced_notification_publish.cpp | 20 +++++++++++++++++++ .../common/notification_analytics_util.cpp | 13 ++++++++++++ 9 files changed, 55 insertions(+), 2 deletions(-) diff --git a/frameworks/ans/BUILD.gn b/frameworks/ans/BUILD.gn index 6a7fcd5cf..cb4b0040e 100644 --- a/frameworks/ans/BUILD.gn +++ b/frameworks/ans/BUILD.gn @@ -162,6 +162,7 @@ ohos_shared_library("ans_innerkits") { "eventhandler:libeventhandler", "hicollie:libhicollie", "hilog:libhilog", + "hitrace:libhitracechain", "i18n:intl_util", "ipc:ipc_core", "samgr:samgr_proxy", diff --git a/frameworks/js/napi/src/manager/BUILD.gn b/frameworks/js/napi/src/manager/BUILD.gn index 3444b0cec..fad2ff86d 100644 --- a/frameworks/js/napi/src/manager/BUILD.gn +++ b/frameworks/js/napi/src/manager/BUILD.gn @@ -115,6 +115,7 @@ ohos_shared_library("notificationmanager") { "ace_engine:ace_uicontent", "c_utils:utils", "hilog:libhilog", + "hitrace:libhitracechain", "image_framework:image", "ipc:ipc_single", "napi:ace_napi", diff --git a/frameworks/js/napi/src/manager/napi_publish.cpp b/frameworks/js/napi/src/manager/napi_publish.cpp index 6d26825a8..9f49651aa 100644 --- a/frameworks/js/napi/src/manager/napi_publish.cpp +++ b/frameworks/js/napi/src/manager/napi_publish.cpp @@ -17,6 +17,7 @@ #include "ans_inner_errors.h" #include "publish.h" +#include "hitrace_util.h" namespace OHOS { namespace NotificationNapi { @@ -24,6 +25,7 @@ namespace NotificationNapi { napi_value NapiPublish(napi_env env, napi_callback_info info) { ANS_LOGD("enter"); + TraceChainUtil traceChain = TraceChainUtil(); ParametersInfoPublish params; if (ParseParameters(env, info, params) == nullptr) { Common::NapiThrow(env, ERROR_PARAM_INVALID); @@ -149,6 +151,7 @@ napi_value NapiShowNotification(napi_env env, napi_callback_info info) napi_value NapiPublishAsBundle(napi_env env, napi_callback_info info) { ANS_LOGD("enter"); + TraceChainUtil traceChain = TraceChainUtil(); ParametersInfoPublish params; if (ParsePublishAsBundleParameters(env, info, params) == nullptr) { Common::NapiThrow(env, ERROR_PARAM_INVALID); diff --git a/frameworks/js/napi/src/subscribe.cpp b/frameworks/js/napi/src/subscribe.cpp index 685d2c7d1..4f0c75027 100644 --- a/frameworks/js/napi/src/subscribe.cpp +++ b/frameworks/js/napi/src/subscribe.cpp @@ -17,6 +17,7 @@ #include "ans_inner_errors.h" #include #include +#include "hitrace_util.h" namespace OHOS { namespace NotificationNapi { @@ -351,9 +352,19 @@ bool SubscriberInstance::HasOnBatchCancelCallback() void ThreadSafeOnConsumed(napi_env env, napi_value jsCallback, void* context, void* data) { - ANS_LOGI("OnConsumed thread safe start"); - auto dataWorkerData = reinterpret_cast(data); + auto additionalData = dataWorkerData->request.GetNotificationRequest().GetAdditionalData(); + if (additionalData && additionalData->HasParam("_oh_ans_sys_traceid")) { + std::stringstream sin(additionalData->GetStringParam("_oh_ans_sys_traceid")); + uint64_t chainId; + if(sin >> std::hex >>chainId) { + TraceChainUtil traceChainUtil = TraceChainUtil(); + OHOS::HiviewDFX::HiTraceId traceId = OHOS::HiviewDFX::HiTraceChain::GetId(); + traceId.SetChainId(chainId); + OHOS::HiviewDFX::HiTraceChain::SetId(traceId); + } + } + ANS_LOGI("OnConsumed thread safe start"); if (dataWorkerData == nullptr) { ANS_LOGE("dataWorkerData is null."); return; diff --git a/frameworks/js/napi/src/subscribe/BUILD.gn b/frameworks/js/napi/src/subscribe/BUILD.gn index e7f3b096c..8e2b91967 100644 --- a/frameworks/js/napi/src/subscribe/BUILD.gn +++ b/frameworks/js/napi/src/subscribe/BUILD.gn @@ -82,6 +82,7 @@ ohos_shared_library("notificationsubscribe") { "ability_runtime:wantagent_innerkits", "c_utils:utils", "hilog:libhilog", + "hitrace:libhitracechain", "image_framework:image", "ipc:ipc_single", "libuv:uv", diff --git a/services/ans/BUILD.gn b/services/ans/BUILD.gn index 87945431e..0f2947f8a 100644 --- a/services/ans/BUILD.gn +++ b/services/ans/BUILD.gn @@ -184,6 +184,7 @@ ohos_source_set("ans_service_sources") { "data_share:datashare_permission", "device_manager:devicemanagersdk", "ffrt:libffrt", + "hitrace:libhitracechain", "i18n:intl_util", "image_framework:image_native", "init:libbegetutil", diff --git a/services/ans/include/advanced_notification_service.h b/services/ans/include/advanced_notification_service.h index 389b5bb24..c8b604fb6 100644 --- a/services/ans/include/advanced_notification_service.h +++ b/services/ans/include/advanced_notification_service.h @@ -1667,6 +1667,8 @@ private: return true; } + void SetChainIdToExtraInfo(const sptr &request, OHOS::HiviewDFX::HiTraceId traceId); + private: static sptr instance_; static std::mutex instanceMutex_; diff --git a/services/ans/src/advanced_notification_manager/advanced_notification_publish.cpp b/services/ans/src/advanced_notification_manager/advanced_notification_publish.cpp index f1bc5ce08..6ae602d31 100644 --- a/services/ans/src/advanced_notification_manager/advanced_notification_publish.cpp +++ b/services/ans/src/advanced_notification_manager/advanced_notification_publish.cpp @@ -28,6 +28,8 @@ #include "notification_analytics_util.h" #include "os_account_manager.h" #include "os_account_manager_helper.h" +#include "string_wrapper.h" +#include "hitrace_util.h" namespace OHOS { namespace Notification { @@ -46,6 +48,8 @@ ErrCode AdvancedNotificationService::PublishWithMaxCapacity( ErrCode AdvancedNotificationService::Publish(const std::string &label, const sptr &request) { HITRACE_METER_NAME(HITRACE_TAG_NOTIFICATION, __PRETTY_FUNCTION__); + TraceChainUtil traceChain = TraceChainUtil(); + OHOS::HiviewDFX::HiTraceId traceId = OHOS::HiviewDFX::HiTraceChain::GetId(); ANS_LOGD("%{public}s", __FUNCTION__); if (!request) { @@ -53,6 +57,7 @@ ErrCode AdvancedNotificationService::Publish(const std::string &label, const spt return ERR_ANS_INVALID_PARAM; } + SetChainIdToExtraInfo(request, traceId); if (request->GetDistributedCollaborate()) { return CollaboratePublish(request); } @@ -133,6 +138,21 @@ ErrCode AdvancedNotificationService::Publish(const std::string &label, const spt return result; } +void AdvancedNotificationService::SetChainIdToExtraInfo + (const sptr &request, OHOS::HiviewDFX::HiTraceId traceId) +{ + std::shared_ptr additionalData = request->GetAdditionalData(); + if (!additionalData) { + additionalData = std::make_shared(); + } + std::stringstream chainId; + chainId << std::hex << traceId.GetChainId(); + std::string hexTransId; + chainId >> std::hex >> hexTransId; + additionalData->SetParam("_oh_ans_sys_traceid", AAFwk::String::Box(hexTransId)); + request->SetAdditionalData(additionalData); +} + ErrCode AdvancedNotificationService::PublishNotificationForIndirectProxyWithMaxCapacity( const sptr& request) { diff --git a/services/ans/src/common/notification_analytics_util.cpp b/services/ans/src/common/notification_analytics_util.cpp index d0f9dc245..11f9c6c3c 100644 --- a/services/ans/src/common/notification_analytics_util.cpp +++ b/services/ans/src/common/notification_analytics_util.cpp @@ -32,6 +32,7 @@ #include "os_account_manager_helper.h" #include "notification_constant.h" #include "advanced_notification_inline.h" +#include "hitrace_util.h" namespace OHOS { namespace Notification { @@ -626,6 +627,12 @@ std::string NotificationAnalyticsUtil::BuildAnsData(const sptr( std::chrono::system_clock::now().time_since_epoch()).count(); ansData["time"] = now; + OHOS::HiviewDFX::HiTraceId traceId = OHOS::HiviewDFX::HiTraceChain::GetId(); + std::stringstream chainId; + chainId << std::hex << traceId.GetChainId(); + std::string hexTransId; + chainId >> std::hex >> hexTransId; + ansData["traceId"] = hexTransId; ANS_LOGI("Ansdata built, the controlFlags is %{public}d, deviceStatus is %{public}s", controlFlags, GetDeviceStatus(request).c_str()); return ansData.dump(-1, ' ', false, nlohmann::json::error_handler_t::replace); @@ -921,6 +928,12 @@ std::string NotificationAnalyticsUtil::BuildExtraInfoWithReq(const HaMetaMessage std::chrono::system_clock::now().time_since_epoch()).count(); reason["time"] = now; + OHOS::HiviewDFX::HiTraceId traceId = OHOS::HiviewDFX::HiTraceChain::GetId(); + std::stringstream chainId; + chainId << std::hex << traceId.GetChainId(); + std::string hexTransId; + chainId >> std::hex >> hexTransId; + reason["traceId"] = hexTransId; std::shared_ptr extraInfo = nullptr; if (request->GetUnifiedGroupInfo() != nullptr && request->GetUnifiedGroupInfo()->GetExtraInfo() != nullptr) { -- Gitee