From a2cead5598dc6bd7c55038b58ca50b96e872f862 Mon Sep 17 00:00:00 2001 From: tlzhou0731 Date: Tue, 26 Aug 2025 16:41:02 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=9F=B3=E9=87=8F=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E6=89=93=E7=82=B9=20VOLUME=5FAPI=5FINVOKE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tlzhou0731 --- frameworks/js/napi/BUILD.gn | 2 + .../napi/audiomanager/napi_audio_manager.cpp | 31 +++++++++- .../napi_audio_stream_manager.cpp | 12 ++++ .../napi_audio_volume_group_manager.cpp | 58 ++++++++++++++++++- .../napi_audio_volume_manager.cpp | 43 ++++++++++++++ frameworks/js/napi/common/napi_dfx_utils.cpp | 36 ++++++++++++ frameworks/js/napi/common/napi_dfx_utils.h | 29 ++++++++++ hisysevent.yaml | 10 +++- 8 files changed, 215 insertions(+), 6 deletions(-) create mode 100644 frameworks/js/napi/common/napi_dfx_utils.cpp create mode 100644 frameworks/js/napi/common/napi_dfx_utils.h diff --git a/frameworks/js/napi/BUILD.gn b/frameworks/js/napi/BUILD.gn index cfe12e053d..7e1e928285 100644 --- a/frameworks/js/napi/BUILD.gn +++ b/frameworks/js/napi/BUILD.gn @@ -133,6 +133,8 @@ ohos_shared_library("audio") { "ipc:ipc_single", "libuv:uv", "napi:ace_napi", + "media_foundation::media_monitor_client", + "media_foundation::media_monitor_common", ] if (audio_framework_feature_hiview_enable) { diff --git a/frameworks/js/napi/audiomanager/napi_audio_manager.cpp b/frameworks/js/napi/audiomanager/napi_audio_manager.cpp index bf2d8e1783..9f79322cef 100644 --- a/frameworks/js/napi/audiomanager/napi_audio_manager.cpp +++ b/frameworks/js/napi/audiomanager/napi_audio_manager.cpp @@ -28,6 +28,7 @@ #include "napi_param_utils.h" #include "audio_errors.h" #include "audio_manager_log.h" +#include "napi_dfx_utils.h" #ifdef FEATURE_HIVIEW_ENABLE #if !defined(ANDROID_PLATFORM) && !defined(IOS_PLATFORM) #include "xpower_event_js.h" @@ -384,6 +385,10 @@ napi_value NapiAudioManager::SetVolume(napi_env env, napi_callback_info info) auto *napiAudioManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioManagerStatus(napiAudioManager, context), "audio manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "setVolume", context->volType); + context->intValue = napiAudioManager->audioMngr_->SetVolume( NapiAudioEnum::GetNativeAudioVolumeType(context->volType), context->volLevel); if (context->intValue != SUCCESS) { @@ -424,6 +429,10 @@ napi_value NapiAudioManager::GetVolume(napi_env env, napi_callback_info info) auto *napiAudioManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioManagerStatus(napiAudioManager, context), "audio manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getVolume", context->volType); + context->volLevel = napiAudioManager->audioMngr_->GetVolume( NapiAudioEnum::GetNativeAudioVolumeType(context->volType)); }; @@ -461,6 +470,10 @@ napi_value NapiAudioManager::GetMaxVolume(napi_env env, napi_callback_info info) auto *napiAudioManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioManagerStatus(napiAudioManager, context), "audio manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getMaxVolume", context->volType); + context->intValue = napiAudioManager->audioMngr_->GetMaxVolume( NapiAudioEnum::GetNativeAudioVolumeType(context->volType)); }; @@ -498,6 +511,10 @@ napi_value NapiAudioManager::GetMinVolume(napi_env env, napi_callback_info info) auto *napiAudioManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioManagerStatus(napiAudioManager, context), "audio manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getMinVolume", context->volType); + context->intValue = napiAudioManager->audioMngr_->GetMinVolume( NapiAudioEnum::GetNativeAudioVolumeType(context->volType)); }; @@ -575,6 +592,10 @@ napi_value NapiAudioManager::SetStreamMute(napi_env env, napi_callback_info info auto *napiAudioManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioManagerStatus(napiAudioManager, context), "audio manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "mute", context->volType); + context->intValue = napiAudioManager->audioMngr_->SetMute( NapiAudioEnum::GetNativeAudioVolumeType(context->volType), context->isMute); NAPI_CHECK_ARGS_RETURN_VOID(context, context->intValue == SUCCESS, "SetMute failed", @@ -614,6 +635,10 @@ napi_value NapiAudioManager::IsStreamMute(napi_env env, napi_callback_info info) auto *napiAudioManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioManagerStatus(napiAudioManager, context), "audio manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "isMute", context->volType); + context->isMute = napiAudioManager->audioMngr_->IsStreamMute( NapiAudioEnum::GetNativeAudioVolumeType(context->volType)); }; @@ -651,6 +676,10 @@ napi_value NapiAudioManager::IsStreamActive(napi_env env, napi_callback_info inf auto *napiAudioManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioManagerStatus(napiAudioManager, context), "audio manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "isActive", context->volType); + context->isActive = napiAudioManager->audioMngr_->IsStreamActive( NapiAudioEnum::GetNativeAudioVolumeType(context->volType)); }; @@ -1568,7 +1597,7 @@ napi_value NapiAudioManager::GetCollaborativeManager(napi_env env, napi_callback { CHECK_AND_RETURN_RET_LOG(PermissionUtil::VerifySelfPermission(), NapiAudioError::ThrowErrorAndReturn(env, NAPI_ERR_PERMISSION_DENIED), "No system permission"); - + napi_status status; size_t argCount = 0; diff --git a/frameworks/js/napi/audiomanager/napi_audio_stream_manager.cpp b/frameworks/js/napi/audiomanager/napi_audio_stream_manager.cpp index da44dd66f0..581092f0c0 100644 --- a/frameworks/js/napi/audiomanager/napi_audio_stream_manager.cpp +++ b/frameworks/js/napi/audiomanager/napi_audio_stream_manager.cpp @@ -24,6 +24,7 @@ #include "audio_manager_log.h" #include "napi_audio_renderer_state_callback.h" #include "napi_audio_capturer_state_callback.h" +#include "napi_dfx_utils.h" namespace OHOS { namespace AudioStandard { @@ -313,6 +314,10 @@ napi_value NapiAudioStreamMgr::IsStreamActive(napi_env env, napi_callback_info i auto *napiStreamMgr = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioStreamManagerStatus(napiStreamMgr, context), "context object state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "isActive", context->volType); + context->isActive = napiStreamMgr->audioStreamMngr_->IsStreamActive( NapiAudioEnum::GetNativeAudioVolumeType(context->volType)); context->isTrue = context->isActive; @@ -345,6 +350,9 @@ napi_value NapiAudioStreamMgr::IsStreamActiveSync(napi_env env, napi_callback_in NapiAudioError::ThrowErrorAndReturn(env, NAPI_ERR_INVALID_PARAM, "parameter verification failed: The param of volumeType must be enum AudioVolumeType"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "isActiveSync", volType); + CHECK_AND_RETURN_RET_LOG(napiStreamMgr != nullptr, result, "napiStreamMgr is nullptr"); CHECK_AND_RETURN_RET_LOG(napiStreamMgr->audioStreamMngr_ != nullptr, result, "audioStreamMngr_ is nullptr"); @@ -378,6 +386,10 @@ napi_value NapiAudioStreamMgr::IsStreamActiveByStreamUsage(napi_env env, napi_ca CHECK_AND_RETURN_RET_LOG(napiStreamMgr != nullptr, result, "napiStreamMgr is nullptr"); CHECK_AND_RETURN_RET_LOG(napiStreamMgr->audioStreamMngr_ != nullptr, result, "audioStreamMngr_ is nullptr"); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "isStreamActive", streamUsage); + bool isActive = napiStreamMgr->audioStreamMngr_-> IsStreamActiveByStreamUsage(NapiAudioEnum::GetNativeStreamUsage(streamUsage)); NapiParamUtils::SetValueBoolean(env, isActive, result); diff --git a/frameworks/js/napi/audiomanager/napi_audio_volume_group_manager.cpp b/frameworks/js/napi/audiomanager/napi_audio_volume_group_manager.cpp index 9826766edd..4f10a0a146 100644 --- a/frameworks/js/napi/audiomanager/napi_audio_volume_group_manager.cpp +++ b/frameworks/js/napi/audiomanager/napi_audio_volume_group_manager.cpp @@ -25,6 +25,7 @@ #include "napi_audio_micstatechange_callback.h" #include "audio_errors.h" #include "audio_manager_log.h" +#include "napi_dfx_utils.h" #ifdef FEATURE_HIVIEW_ENABLE #if !defined(ANDROID_PLATFORM) && !defined(IOS_PLATFORM) #include "xpower_event_js.h" @@ -278,6 +279,10 @@ napi_value NapiAudioVolumeGroupManager::GetVolume(napi_env env, napi_callback_in auto *napiAudioVolumeGroupManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioVolumeGroupManagerStatus(napiAudioVolumeGroupManager, context), "audio volume group manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getVolume", context->volType); + context->volLevel = napiAudioVolumeGroupManager->audioGroupMngr_->GetVolume( NapiAudioEnum::GetNativeAudioVolumeType(context->volType)); }; @@ -309,6 +314,9 @@ napi_value NapiAudioVolumeGroupManager::GetVolumeSync(napi_env env, napi_callbac NapiAudioError::ThrowErrorAndReturn(env, NAPI_ERR_INVALID_PARAM, "parameter verification failed: The param of volumeType must be enum AudioVolumeType"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getVolumeSync", volType); + CHECK_AND_RETURN_RET_LOG(napiAudioVolumeGroupManager != nullptr, result, "napiAudioVolumeGroupManager is nullptr"); CHECK_AND_RETURN_RET_LOG(napiAudioVolumeGroupManager->audioGroupMngr_ != nullptr, result, "audioGroupMngr_ is nullptr"); @@ -339,7 +347,7 @@ napi_value NapiAudioVolumeGroupManager::GetSystemVolumeByUid(napi_env env, napi_ CHECK_AND_RETURN_RET_LOG(NapiAudioEnum::IsLegalInputArgumentVolType(volType), NapiAudioError::ThrowErrorAndReturn(env, NAPI_ERR_INVALID_PARAM, "parameter verification failed: The param of volumeType must be enum AudioVolumeType"), "get volType failed"); - + int32_t uid; NapiParamUtils::GetValueInt32(env, uid, args[PARAM1]); CHECK_AND_RETURN_RET_LOG(uid >= 0, @@ -393,6 +401,10 @@ napi_value NapiAudioVolumeGroupManager::SetVolume(napi_env env, napi_callback_in auto *napiAudioVolumeGroupManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioVolumeGroupManagerStatus(napiAudioVolumeGroupManager, context), "audio volume group manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "setVolume", context->volType); + context->intValue = napiAudioVolumeGroupManager->audioGroupMngr_->SetVolume( NapiAudioEnum::GetNativeAudioVolumeType(context->volType), context->volLevel); NAPI_CHECK_ARGS_RETURN_VOID(context, context->intValue == SUCCESS, "setvolume failed", @@ -445,6 +457,10 @@ napi_value NapiAudioVolumeGroupManager::SetVolumeWithFlag(napi_env env, napi_cal auto *napiAudioVolumeGroupManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioVolumeGroupManagerStatus(napiAudioVolumeGroupManager, context), "audio volume group manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "setVolumeWithFlag", context->volType); + context->intValue = napiAudioVolumeGroupManager->audioGroupMngr_->SetVolume( NapiAudioEnum::GetNativeAudioVolumeType(context->volType), context->volLevel, context->volFlag); NAPI_CHECK_ARGS_RETURN_VOID(context, context->intValue == SUCCESS, "setvolumeWithFlag failed", @@ -533,6 +549,10 @@ napi_value NapiAudioVolumeGroupManager::GetMaxVolume(napi_env env, napi_callback auto *napiAudioVolumeGroupManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioVolumeGroupManagerStatus(napiAudioVolumeGroupManager, context), "audio volume group manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getMaxVolume", context->volType); + context->volLevel = napiAudioVolumeGroupManager->audioGroupMngr_->GetMaxVolume( NapiAudioEnum::GetNativeAudioVolumeType(context->volType)); }; @@ -564,6 +584,9 @@ napi_value NapiAudioVolumeGroupManager::GetMaxVolumeSync(napi_env env, napi_call NapiAudioError::ThrowErrorAndReturn(env, NAPI_ERR_INVALID_PARAM, "parameter verification failed: The param of volumeType must be enum AudioVolumeType"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getMaxVolumeSync", volType); + CHECK_AND_RETURN_RET_LOG(napiAudioVolumeGroupManager != nullptr, result, "napiAudioVolumeGroupManager is nullptr"); CHECK_AND_RETURN_RET_LOG(napiAudioVolumeGroupManager->audioGroupMngr_ != nullptr, result, "audioGroupMngr_ is nullptr"); @@ -602,6 +625,10 @@ napi_value NapiAudioVolumeGroupManager::GetMinVolume(napi_env env, napi_callback auto *napiAudioVolumeGroupManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioVolumeGroupManagerStatus(napiAudioVolumeGroupManager, context), "audio volume group manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getMinVolume", context->volType); + context->volLevel = napiAudioVolumeGroupManager->audioGroupMngr_->GetMinVolume( NapiAudioEnum::GetNativeAudioVolumeType(context->volType)); }; @@ -633,6 +660,9 @@ napi_value NapiAudioVolumeGroupManager::GetMinVolumeSync(napi_env env, napi_call NapiAudioError::ThrowErrorAndReturn(env, NAPI_ERR_INVALID_PARAM, "parameter verification failed: The param of volumeType must be enum AudioVolumeType"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getMinVolumeSync", volType); + CHECK_AND_RETURN_RET_LOG(napiAudioVolumeGroupManager != nullptr, result, "napiAudioVolumeGroupManager is nullptr"); CHECK_AND_RETURN_RET_LOG(napiAudioVolumeGroupManager->audioGroupMngr_ != nullptr, result, "audioGroupMngr_ is nullptr"); @@ -675,6 +705,10 @@ napi_value NapiAudioVolumeGroupManager::SetMute(napi_env env, napi_callback_info auto *napiAudioVolumeGroupManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioVolumeGroupManagerStatus(napiAudioVolumeGroupManager, context), "audio volume group manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "mute", context->volType); + context->intValue = napiAudioVolumeGroupManager->audioGroupMngr_->SetMute( NapiAudioEnum::GetNativeAudioVolumeType(context->volType), context->isMute); NAPI_CHECK_ARGS_RETURN_VOID(context, context->intValue == SUCCESS, "setmute failed", @@ -715,6 +749,9 @@ napi_value NapiAudioVolumeGroupManager::IsStreamMute(napi_env env, napi_callback auto *napiAudioVolumeGroupManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioVolumeGroupManagerStatus(napiAudioVolumeGroupManager, context), "audio volume group manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "isMute", context->volType); context->intValue = napiAudioVolumeGroupManager->audioGroupMngr_->IsStreamMute( NapiAudioEnum::GetNativeAudioVolumeType(context->volType), context->isMute); NAPI_CHECK_ARGS_RETURN_VOID(context, context->intValue == SUCCESS, "isstreammute failed", @@ -749,6 +786,9 @@ napi_value NapiAudioVolumeGroupManager::IsStreamMuteSync(napi_env env, napi_call NapiAudioError::ThrowErrorAndReturn(env, NAPI_ERR_INVALID_PARAM, "parameter verification failed: The param of volumeType must be enum AudioVolumeType"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "isMuteSync", volType); + CHECK_AND_RETURN_RET_LOG(napiAudioVolumeGroupManager != nullptr, result, "napiAudioVolumeGroupManager is nullptr"); CHECK_AND_RETURN_RET_LOG(napiAudioVolumeGroupManager->audioGroupMngr_ != nullptr, result, "audioGroupMngr_ is nullptr"); @@ -1144,6 +1184,10 @@ napi_value NapiAudioVolumeGroupManager::AdjustSystemVolumeByStep(napi_env env, n auto *napiAudioVolumeGroupManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioVolumeGroupManagerStatus(napiAudioVolumeGroupManager, context), "audio volume group manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "adjustSystemVolumeByStep", context->volType); + context->volumeAdjustStatus = napiAudioVolumeGroupManager->audioGroupMngr_->AdjustSystemVolumeByStep( NapiAudioEnum::GetNativeAudioVolumeType(context->volType), static_cast(context->adjustType)); @@ -1202,6 +1246,10 @@ napi_value NapiAudioVolumeGroupManager::GetSystemVolumeInDb(napi_env env, napi_c auto *napiAudioVolumeGroupManager = objectGuard.GetPtr(); CHECK_AND_RETURN_LOG(CheckAudioVolumeGroupManagerStatus(napiAudioVolumeGroupManager, context), "audio volume group manager state is error."); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getSystemVolumeInDb", context->volType); + context->volumeInDb = napiAudioVolumeGroupManager->audioGroupMngr_->GetSystemVolumeInDb( NapiAudioEnum::GetNativeAudioVolumeType(context->volType), context->volLevel, static_cast(context->deviceType)); @@ -1249,6 +1297,10 @@ napi_value NapiAudioVolumeGroupManager::GetSystemVolumeInDbSync(napi_env env, na CHECK_AND_RETURN_RET_LOG(napiAudioVolumeGroupManager != nullptr, result, "napiAudioVolumeGroupManager is nullptr"); CHECK_AND_RETURN_RET_LOG(napiAudioVolumeGroupManager->audioGroupMngr_ != nullptr, result, "audioGroupMngr_ is nullptr"); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getSystemVolumeInDbSync", volType); + double volumeInDb = napiAudioVolumeGroupManager->audioGroupMngr_->GetSystemVolumeInDb( NapiAudioEnum::GetNativeAudioVolumeType(volType), volLevel, static_cast(deviceType)); CHECK_AND_RETURN_RET_LOG(!FLOAT_COMPARE_EQ(static_cast(volumeInDb), static_cast(ERR_INVALID_PARAM)), @@ -1365,7 +1417,7 @@ void NapiAudioVolumeGroupManager::UnregisterRingerModeCallback( "ringerModecallbackNapi is null"); std::shared_ptr cb = std::static_pointer_cast( napiAudioVolumeGroupManager->ringerModecallbackNapi_); - + napi_value callback = nullptr; if (argc == ARGS_TWO) { callback = args[PARAM1]; @@ -1388,7 +1440,7 @@ void NapiAudioVolumeGroupManager::UnregisterMicStateChangeCallback( std::shared_ptr cb = std::static_pointer_cast( napiAudioVolumeGroupManager->micStateChangeCallbackNapi_); - + napi_value callback = nullptr; if (argc == ARGS_TWO) { callback = args[PARAM1]; diff --git a/frameworks/js/napi/audiomanager/napi_audio_volume_manager.cpp b/frameworks/js/napi/audiomanager/napi_audio_volume_manager.cpp index f564ff131f..49480e4d54 100644 --- a/frameworks/js/napi/audiomanager/napi_audio_volume_manager.cpp +++ b/frameworks/js/napi/audiomanager/napi_audio_volume_manager.cpp @@ -25,6 +25,7 @@ #include "napi_param_utils.h" #include "audio_errors.h" #include "audio_manager_log.h" +#include "napi_dfx_utils.h" namespace OHOS { namespace AudioStandard { @@ -535,6 +536,9 @@ napi_value NapiAudioVolumeManager::GetSystemVolume(napi_env env, napi_callback_i "parameter verification failed: The param of volType must be enum AudioVolumeType"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getSystemVolume", volType); + if (napiAudioVolumeManager == nullptr || napiAudioVolumeManager->audioSystemMngr_ == nullptr) { AUDIO_ERR_LOG("napiAudioVolumeManager or audioSystemMngr is nullptr!"); return nullptr; @@ -570,6 +574,9 @@ napi_value NapiAudioVolumeManager::GetMinSystemVolume(napi_env env, napi_callbac "parameter verification failed: The param of volType must be enum AudioVolumeType"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getMinSystemVolume", volType); + if (napiAudioVolumeManager == nullptr || napiAudioVolumeManager->audioSystemMngr_ == nullptr) { AUDIO_ERR_LOG("napiAudioVolumeManager or audioSystemMngr is nullptr!"); return nullptr; @@ -605,6 +612,9 @@ napi_value NapiAudioVolumeManager::GetMaxSystemVolume(napi_env env, napi_callbac "parameter verification failed: The param of volType must be enum AudioVolumeType"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getMaxSystemVolume", volType); + if (napiAudioVolumeManager == nullptr || napiAudioVolumeManager->audioSystemMngr_ == nullptr) { AUDIO_ERR_LOG("napiAudioVolumeManager or audioSystemMngr is nullptr!"); return nullptr; @@ -640,6 +650,9 @@ napi_value NapiAudioVolumeManager::IsSystemMuted(napi_env env, napi_callback_inf "parameter verification failed: The param of volType must be enum AudioVolumeType"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "isSystemMuted", volType); + if (napiAudioVolumeManager == nullptr || napiAudioVolumeManager->audioSystemMngr_ == nullptr) { AUDIO_ERR_LOG("napiAudioVolumeManager or audioSystemMngr is nullptr!"); return nullptr; @@ -682,6 +695,10 @@ napi_value NapiAudioVolumeManager::GetVolumeInUnitOfDb(napi_env env, napi_callba NapiAudioError::ThrowErrorAndReturn(env, NAPI_ERR_INVALID_PARAM, "parameter verification failed: The param of deviceType must be enum DeviceType"), "get deviceType failed"); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getVolumeInUnitOfDb", volType); + if (napiAudioVolumeManager == nullptr) { AUDIO_ERR_LOG("napiAudioVolumeManager is nullptr!"); return nullptr; @@ -718,6 +735,9 @@ napi_value NapiAudioVolumeManager::GetVolumeByStream(napi_env env, napi_callback "parameter verification failed: The param of streamUsage must be enum StreamUsage"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getVolumeByStream", streamUsage); + if (napiAudioVolumeManager == nullptr || napiAudioVolumeManager->audioSystemMngr_ == nullptr) { AUDIO_ERR_LOG("napiAudioVolumeManager or audioSystemMngr is nullptr!"); return nullptr; @@ -756,6 +776,9 @@ napi_value NapiAudioVolumeManager::GetMinVolumeByStream(napi_env env, napi_callb "parameter verification failed: The param of streamUsage must be enum StreamUsage"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getMinVolumeByStream", streamUsage); + if (napiAudioVolumeManager == nullptr || napiAudioVolumeManager->audioSystemMngr_ == nullptr) { AUDIO_ERR_LOG("napiAudioVolumeManager or audioSystemMngr is nullptr!"); return nullptr; @@ -794,6 +817,9 @@ napi_value NapiAudioVolumeManager::GetMaxVolumeByStream(napi_env env, napi_callb "parameter verification failed: The param of streamUsage must be enum StreamUsage"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getMaxVolumeByStream", streamUsage); + if (napiAudioVolumeManager == nullptr || napiAudioVolumeManager->audioSystemMngr_ == nullptr) { AUDIO_ERR_LOG("napiAudioVolumeManager or audioSystemMngr is nullptr!"); return nullptr; @@ -832,6 +858,9 @@ napi_value NapiAudioVolumeManager::IsSystemMutedForStream(napi_env env, napi_cal "parameter verification failed: The param of streamUsage must be enum StreamUsage"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "isSystemMutedForStream", streamUsage); + if (napiAudioVolumeManager == nullptr || napiAudioVolumeManager->audioSystemMngr_ == nullptr) { AUDIO_ERR_LOG("napiAudioVolumeManager or audioSystemMngr is nullptr!"); return nullptr; @@ -878,6 +907,10 @@ napi_value NapiAudioVolumeManager::GetVolumeInUnitOfDbByStream(napi_env env, nap NapiAudioError::ThrowErrorAndReturn(env, NAPI_ERR_INVALID_PARAM, "parameter verification failed: The param of deviceType must be enum DeviceType"), "get deviceType failed"); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getVolumeInUnitOfDbByStream", streamUsage); + if (napiAudioVolumeManager == nullptr || napiAudioVolumeManager->audioSystemMngr_ == nullptr) { AUDIO_ERR_LOG("napiAudioVolumeManager or audioSystemMngr_ is nullptr!"); return nullptr; @@ -941,6 +974,9 @@ napi_value NapiAudioVolumeManager::GetAudioVolumeTypeByStreamUsage(napi_env env, "parameter verification failed: The param of streamUsage must be enum StreamUsage"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getAudioVolumeTypeByStreamUsage", streamUsage); + if (napiAudioVolumeManager == nullptr || napiAudioVolumeManager->audioSystemMngr_ == nullptr) { AUDIO_ERR_LOG("napiAudioVolumeManager or audioSystemMngr is nullptr!"); return nullptr; @@ -980,6 +1016,9 @@ napi_value NapiAudioVolumeManager::GetStreamUsagesByVolumeType(napi_env env, nap "parameter verification failed: The param of volType must be enum AudioVolumeType"), "get volType failed"); + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "getStreamUsagesByVolumeType", volType); + if (napiAudioVolumeManager == nullptr || napiAudioVolumeManager->audioSystemMngr_ == nullptr) { AUDIO_ERR_LOG("napiAudioVolumeManager or audioSystemMngr is nullptr!"); return nullptr; @@ -1227,6 +1266,10 @@ napi_value NapiAudioVolumeManager::RegisterStreamVolumeChangeCallback(napi_env e napi_get_undefined(env, &result); int32_t streamUsage = 0; NapiParamUtils::GetValueInt32(env, streamUsage, args[PARAM1]); + + NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), + "on streamVolumeChange", volType); + if (napiAudioVolumeManager->streamVolumeChangeCallbackNapi_ == nullptr) { napiAudioVolumeManager->streamVolumeChangeCallbackNapi_ = std::make_shared(env); diff --git a/frameworks/js/napi/common/napi_dfx_utils.cpp b/frameworks/js/napi/common/napi_dfx_utils.cpp new file mode 100644 index 0000000000..504e5ae2e0 --- /dev/null +++ b/frameworks/js/napi/common/napi_dfx_utils.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "napi_dfx_utils.h" +#include "audio_common_log.h" +#include "media_monitor_manager.h" +#include "media_monitor_info.h" + +namespace OHOS { +namespace AudioStandard { + +void NapiDfxUtils::SendVolumeApiInvokeEvent(int32_t uid, std::string functionName, int32_t paramValue) +{ + std::shared_ptr bean = std::make_shared( + Media::MediaMonitor::ModuleId::AUDIO, Media::MediaMonitor::EventId::VOLUME_API_INVOKE, + Media::MediaMonitor::EventType::FREQUENCY_AGGREGATION_EVENT); + bean->Add("CLIENT_UID", uid); + bean->Add("FUNC_NAME", functionName); + bean->Add("PARAM_VALUE", paramValue); + Media::MediaMonitor::MediaMonitorManager::GetInstance().WriteLogMsg(bean); +} +} // namespace AudioStandard +} // namespace OHOS \ No newline at end of file diff --git a/frameworks/js/napi/common/napi_dfx_utils.h b/frameworks/js/napi/common/napi_dfx_utils.h new file mode 100644 index 0000000000..5adebedde6 --- /dev/null +++ b/frameworks/js/napi/common/napi_dfx_utils.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef NAPI_DFX_UTILS_H +#define NAPI_DFX_UTILS_H + +#include + +namespace OHOS { +namespace AudioStandard { + +class NapiDfxUtils { +public: + static void SendVolumeApiInvokeEvent(int32_t uid, std::string functionName, int32_t paramValue); +}; +} // namespace AudioStandard +} // namespace OHOS +#endif // NAPI_DFX_UTILS_H diff --git a/hisysevent.yaml b/hisysevent.yaml index a4fbc5c5c6..d48e834d80 100644 --- a/hisysevent.yaml +++ b/hisysevent.yaml @@ -278,7 +278,7 @@ SYSTEM_TONE_PLAYBACK: VIBRATION_STATE: {type: BOOL, arrsize: 100, desc: vibration state} VOLUME_LEVEL: {type: UINT8, arrsize: 100, desc: volume level} TIME_STAMP: {type: INT64, arrsize: 100, desc: the time stamp} - + RECORD_ERROR: __BASE: {type: FAULT, level: CRITICAL, tag: AudioRecord, desc: AudioRecordErrorEvent} INCOMING_SOURCE: {type: UINT8, desc: source of incoming record} @@ -316,4 +316,10 @@ DEVICE_CHANGE_EXCEPTION: DEVICE_TYPE: {type: INT32, desc: device type} ERROR_CASE: {type: UINT32, desc: error case} ERROR_MSG: {type: INT32, desc: error message} - ERROR_DESCRIPTION: {type: STRING, desc: error description} \ No newline at end of file + ERROR_DESCRIPTION: {type: STRING, desc: error description} + +VOLUME_API_INVOKE: + __BASE: {type: STATISTIC, level: CRITICAL, desc: Ivocation of volume-related APIs} + APP_NAME: {type: STRING, desc: application name} + FUNC_NAME: {type: STRING, desc: function name} + PARAM_VALUE: {type: INT32, desc: streamUsage or audioVolumeType enum value} \ No newline at end of file -- Gitee From 52db5aaee295db54d79b185909da1d120e2a37f7 Mon Sep 17 00:00:00 2001 From: tlzhou0731 Date: Fri, 29 Aug 2025 11:47:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=9F=B3=E9=87=8F=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E6=89=93=E7=82=B9=20VOLUME=5FAPI=5FINVOKE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tlzhou0731 --- frameworks/js/napi/BUILD.gn | 1 + frameworks/js/napi/audiomanager/napi_audio_volume_manager.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/frameworks/js/napi/BUILD.gn b/frameworks/js/napi/BUILD.gn index 7e1e928285..c0c6b97bf8 100644 --- a/frameworks/js/napi/BUILD.gn +++ b/frameworks/js/napi/BUILD.gn @@ -95,6 +95,7 @@ ohos_shared_library("audio") { "common/napi_audio_enum.cpp", "common/napi_audio_error.cpp", "common/napi_param_utils.cpp", + "common/napi_dfx_utils.cpp", ] } diff --git a/frameworks/js/napi/audiomanager/napi_audio_volume_manager.cpp b/frameworks/js/napi/audiomanager/napi_audio_volume_manager.cpp index 49480e4d54..f9d21fcba9 100644 --- a/frameworks/js/napi/audiomanager/napi_audio_volume_manager.cpp +++ b/frameworks/js/napi/audiomanager/napi_audio_volume_manager.cpp @@ -1268,7 +1268,7 @@ napi_value NapiAudioVolumeManager::RegisterStreamVolumeChangeCallback(napi_env e NapiParamUtils::GetValueInt32(env, streamUsage, args[PARAM1]); NapiDfxUtils::SendVolumeApiInvokeEvent(static_cast(getuid()), - "on streamVolumeChange", volType); + "on streamVolumeChange", streamUsage); if (napiAudioVolumeManager->streamVolumeChangeCallbackNapi_ == nullptr) { napiAudioVolumeManager->streamVolumeChangeCallbackNapi_ = -- Gitee