diff --git a/frameworks/ans/BUILD.gn b/frameworks/ans/BUILD.gn index 6a7fcd5cfb2cf889c43bfa3e42d1534198209992..cb4b0040e53e16f88f0e1413c366e9ec2ae01a54 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 3444b0cecb6f45b6f09de5ba07ffeab5597714a6..fad2ff86d3f0ecdf977e1943333e24633bee7773 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 6d26825a8e2f3ed4a374ae61806b27e6f8682d24..9f49651aa2a3508e12fe42ddcbf3ee32081c5e92 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 685d2c7d1e865bcff29840dac1bb7301a3c3e2a0..4f0c75027654aaa1db62493e5f956e082085e457 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 e7f3b096cb66733d506337100c2859af11e98ad7..8e2b91967c56f91f24d0bcb338e2b38b4be95196 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 87945431e989cd915df8b7d8b75598cc50f0e967..0f2947f8ae77a9737db986e793f3fdc35f077565 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 389b5bb2414b696ed2592faf3abd421c52c3b5f2..c8b604fb63855a9aacacb2273ce8f8aa3aa5cb16 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 f1bc5ce08eceee73c9fbf8cfa66c77437bc03d24..6ae602d310ef0d88137f63bb051c557112b4e306 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 d0f9dc245d4d6cb512168f5188306b205ac5b312..11f9c6c3c89c17bad8114c0fc356fe3b8d026594 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) {