diff --git a/access_token.gni b/access_token.gni index d62e2c4a4b363d44f82ee9dd9b40512174681eaa..71a6aa0fc534f9369dabd9a521ab1088f35f7b58 100644 --- a/access_token.gni +++ b/access_token.gni @@ -164,3 +164,11 @@ if (!defined(global_parts_info) || } else { power_manager_enable = false } + +if (!defined(global_parts_info) || + defined(global_parts_info.resourceschedule_qos_manager)) { + qos_manager_enable = true +} else { + qos_manager_enable = false +} + diff --git a/bundle.json b/bundle.json index 9a569db586553ce268493299cd781be24b951201..77cca8b5352f98c1876d987bdae20356a8608380 100644 --- a/bundle.json +++ b/bundle.json @@ -52,6 +52,7 @@ "napi", "openssl", "power_manager", + "qos_manager", "relational_store", "safwk", "samgr", diff --git a/services/accesstokenmanager/main/cpp/include/dfx/hisysevent_adapter.h b/services/accesstokenmanager/main/cpp/include/dfx/hisysevent_adapter.h index 953fff70af1c74abb434e1e1af0f4351cda2c28e..4e58271b2ef401406d100d6b524150554ee53069 100644 --- a/services/accesstokenmanager/main/cpp/include/dfx/hisysevent_adapter.h +++ b/services/accesstokenmanager/main/cpp/include/dfx/hisysevent_adapter.h @@ -60,7 +60,7 @@ struct AccessTokenDfxInfo { std::string aclInfo; std::string preauthInfo; std::string extendInfo; - uint64_t duration; + int64_t duration; int32_t errorCode; int32_t pid; uint32_t hapSize; diff --git a/services/privacymanager/BUILD.gn b/services/privacymanager/BUILD.gn index f77373b511d9e8b086afcf77dc023bdebf99d49d..431cafefb439c0cbe089ed76a091034badadc0ce 100644 --- a/services/privacymanager/BUILD.gn +++ b/services/privacymanager/BUILD.gn @@ -274,5 +274,13 @@ if (is_standard_system && ability_base_enable == true) { include_dirs += [ "${access_token_path}/services/common/ability_manager/include" ] } + + if (qos_manager_enable) { + cflags_cc += [ "-DQOS_MANAGER_ENABLE" ] + external_deps += [ + "qos_manager:concurrent_task_client", + "qos_manager:qos", + ] + } } } diff --git a/services/privacymanager/include/record/permission_record_manager.h b/services/privacymanager/include/record/permission_record_manager.h index 17f738733380a00281e40aa39a4eaf0cbe49d2e1..0ebc8dd5f0edbf51b96c5409de6890ab52aaeb71 100644 --- a/services/privacymanager/include/record/permission_record_manager.h +++ b/services/privacymanager/include/record/permission_record_manager.h @@ -201,6 +201,10 @@ private: bool ToRemoveRecord(const ContinusPermissionRecord& targetRecord, const IsEqualFunc& isEqualFunc, bool needClearCamera = true); + void ProcRequestAuth(); + void SetCameraThreadQos(const std::string& permissionName); + void ResetCameraThreadQos(const std::string& permissionName); + private: bool hasInited_ = false; OHOS::Utils::RWLock rwLock_; diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index 9dfd852a01548233fb30863b5cfdede8c8e5da2d..db191cf165f73dea3a765840afe58e8fa095a0f0 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -52,6 +52,10 @@ #include "privacy_window_manager_client.h" #include "scene_board_judgement.h" #endif +#ifdef QOS_MANAGER_ENABLE +#include "concurrent_task_client.h" +#include "qos.h" +#endif namespace OHOS { namespace Security { @@ -144,6 +148,31 @@ void PrivacyAppManagerDeathCallback::NotifyAppManagerDeath() PermissionRecordManager::GetInstance().OnAppMgrRemoteDiedHandle(); } +void PermissionRecordManager::SetCameraThreadQos(const std::string& permissionName) +{ + if (permissionName != CAMERA_PERMISSION_NAME) { + return; + } + +#ifdef QOS_MANAGER_ENABLE + int32_t res = QOS::SetThreadQos(QOS::QosLevel::QOS_USER_INTERACTIVE); + if (res != 0) { + LOGE(PRI_DOMAIN, PRI_TAG, "Set thread qos failed, res is %{public}d.", res); + } +#endif +} + +void PermissionRecordManager::ResetCameraThreadQos(const std::string& permissionName) +{ + if (permissionName != CAMERA_PERMISSION_NAME) { + return; + } + +#ifdef QOS_MANAGER_ENABLE + QOS::ResetThreadQos(); +#endif +} + void PermissionRecordManager::AddRecToCacheAndValueVec(const PermissionRecord& record, std::vector& values) { @@ -417,6 +446,7 @@ bool PermissionRecordManager::CheckPermissionUsedRecordToggleStatus(int32_t user int32_t PermissionRecordManager::AddPermissionUsedRecord(const AddPermParamInfo& info) { + SetCameraThreadQos(info.permissionName); HapTokenInfo tokenInfo; if (AccessTokenKit::GetHapTokenInfo(info.tokenId, tokenInfo) != Constant::SUCCESS) { LOGE(PRI_DOMAIN, PRI_TAG, "Invalid tokenId(%{public}d).", info.tokenId); @@ -443,8 +473,11 @@ int32_t PermissionRecordManager::AddPermissionUsedRecord(const AddPermParamInfo& return result; } - return AddOrUpdateUsedTypeIfNeeded( + int32_t res = AddOrUpdateUsedTypeIfNeeded( info.tokenId, record.opCode, info.type) ? Constant::SUCCESS : Constant::FAILURE; + + ResetCameraThreadQos(info.permissionName); + return res; } int32_t PermissionRecordManager::SetPermissionUsedRecordToggleStatus(int32_t userID, bool status) @@ -1331,6 +1364,7 @@ int32_t PermissionRecordManager::StartUsingPermission(const PermissionUsedTypeIn int32_t PermissionRecordManager::StartUsingPermission(const PermissionUsedTypeInfo &info, const sptr& callback, int32_t callerPid) { + SetCameraThreadQos(info.permissionName); AccessTokenID tokenId = info.tokenId; const std::string &permissionName = info.permissionName; LOGI(PRI_DOMAIN, PRI_TAG, @@ -1369,6 +1403,7 @@ int32_t PermissionRecordManager::StartUsingPermission(const PermissionUsedTypeIn if (ret != RET_SUCCESS) { cameraCallbackMap_.Erase(id); } + ResetCameraThreadQos(info.permissionName); return ret; } @@ -1458,6 +1493,7 @@ bool PermissionRecordManager::IsAllowedUsingMicrophone(AccessTokenID tokenId, in bool PermissionRecordManager::IsAllowedUsingPermission(AccessTokenID tokenId, const std::string& permissionName, int32_t pid) { + SetCameraThreadQos(permissionName); if (AccessTokenKit::GetTokenTypeFlag(tokenId) != TOKEN_HAP) { LOGD(PRI_DOMAIN, PRI_TAG, "Id(%{public}d) is not hap.", tokenId); return false; @@ -1469,6 +1505,7 @@ bool PermissionRecordManager::IsAllowedUsingPermission(AccessTokenID tokenId, co return IsAllowedUsingMicrophone(tokenId, pid); } LOGE(PRI_DOMAIN, PRI_TAG, "Invalid permission(%{public}s).", permissionName.c_str()); + ResetCameraThreadQos(permissionName); return false; } @@ -2016,6 +2053,16 @@ bool PermissionRecordManager::IsUserIdValid(int32_t userID) const return userID >= 0 && userID <= MAX_USER_ID; } +void PermissionRecordManager::ProcRequestAuth() +{ +#ifdef QOS_MANAGER_ENABLE + std::unordered_map payload; + payload["pid"] = std::to_string(getpid()); + ConcurrentTask::ConcurrentTaskClient::GetInstance().RequestAuth(payload); +#endif + return; +} + void PermissionRecordManager::Init() { if (hasInited_) { @@ -2024,8 +2071,8 @@ void PermissionRecordManager::Init() LOGI(PRI_DOMAIN, PRI_TAG, "Init"); hasInited_ = true; + ProcRequestAuth(); UpdatePermUsedRecToggleStatusMapFromDb(); - GetConfigValue(); } } // namespace AccessToken diff --git a/services/privacymanager/test/coverage/BUILD.gn b/services/privacymanager/test/coverage/BUILD.gn index bebe39ff1310f01fa1ac82c085daafcba2b0cb53..a145048e7e3b2b95b38975255cd80817e627b2b7 100644 --- a/services/privacymanager/test/coverage/BUILD.gn +++ b/services/privacymanager/test/coverage/BUILD.gn @@ -155,5 +155,13 @@ if (is_standard_system && ability_base_enable == true) { include_dirs += [ "${access_token_path}/services/common/ability_manager/include" ] } + + if (qos_manager_enable) { + cflags_cc += [ "-DQOS_MANAGER_ENABLE" ] + external_deps += [ + "qos_manager:concurrent_task_client", + "qos_manager:qos", + ] + } } } diff --git a/services/privacymanager/test/unittest/BUILD.gn b/services/privacymanager/test/unittest/BUILD.gn index 48ea15a506789ecee23948b567cf947b2c25efa6..5f820519f6ca4a3bd8d062520f2764ed5c898489 100644 --- a/services/privacymanager/test/unittest/BUILD.gn +++ b/services/privacymanager/test/unittest/BUILD.gn @@ -162,5 +162,13 @@ if (is_standard_system && ability_base_enable == true) { include_dirs += [ "${access_token_path}/services/common/ability_manager/include" ] } + + if (qos_manager_enable) { + cflags_cc += [ "-DQOS_MANAGER_ENABLE" ] + external_deps += [ + "qos_manager:concurrent_task_client", + "qos_manager:qos", + ] + } } } diff --git a/test/fuzztest/services/privacy/privacy_service_fuzz.gni b/test/fuzztest/services/privacy/privacy_service_fuzz.gni index 285586d633e867b07bb37b13582bb4425f231ef0..6893986615c0ff6a591a6e153c8634220db3b36c 100644 --- a/test/fuzztest/services/privacy/privacy_service_fuzz.gni +++ b/test/fuzztest/services/privacy/privacy_service_fuzz.gni @@ -150,3 +150,11 @@ if (camera_framework_enable) { privacy_cflags_cc += [ "-DCAMERA_FRAMEWORK_ENABLE" ] privacy_external_deps += [ "camera_framework:camera_framework" ] } + +if (qos_manager_enable) { + privacy_cflags_cc += [ "-DQOS_MANAGER_ENABLE" ] + privacy_external_deps += [ + "qos_manager:concurrent_task_client", + "qos_manager:qos", + ] +}