diff --git a/frameworks/native/backup_ext/BUILD.gn b/frameworks/native/backup_ext/BUILD.gn index 379f3c72b0d248cd51269d8ceba195bc1f740d83..b87936530cd211f358ff1b818833651f7a44b0c6 100644 --- a/frameworks/native/backup_ext/BUILD.gn +++ b/frameworks/native/backup_ext/BUILD.gn @@ -61,6 +61,7 @@ ohos_shared_library("backup_extension_ability_native") { "ability_runtime:app_context", "ability_runtime:appkit_native", "ability_runtime:runtime", + "hitrace:hitrace_meter", "access_token:libaccesstoken_sdk", "bundle_framework:appexecfwk_core", "c_utils:utils", diff --git a/frameworks/native/backup_ext/src/ext_extension.cpp b/frameworks/native/backup_ext/src/ext_extension.cpp index 2697e0413c6f57f5ea85a3a020d2adcf091c1d58..621d5e4ec8158a78fbced7d879ff4ef0bb948b3c 100644 --- a/frameworks/native/backup_ext/src/ext_extension.cpp +++ b/frameworks/native/backup_ext/src/ext_extension.cpp @@ -40,6 +40,7 @@ #include "b_json/b_json_entity_ext_manage.h" #include "b_resources/b_constants.h" #include "b_tarball/b_tarball_factory.h" +#include "base/hiviewdfx/hitrace/interfaces/native/innerkits/include/hitrace_meter/hitrace_meter.h" #include "filemgmt_libhilog.h" #include "service_proxy.h" #include "tar_file.h" @@ -47,16 +48,17 @@ namespace OHOS::FileManagement::Backup { const string DEFAULT_TAR_PKG = "1.tar"; -const string INDEX_FILE_BACKUP = string(BConstants::PATH_BUNDLE_BACKUP_HOME). - append(BConstants::SA_BUNDLE_BACKUP_BACKUP). - append(BConstants::EXT_BACKUP_MANAGE); -const string INDEX_FILE_RESTORE = string(BConstants::PATH_BUNDLE_BACKUP_HOME). - append(BConstants::SA_BUNDLE_BACKUP_RESTORE). - append(BConstants::EXT_BACKUP_MANAGE); +const string INDEX_FILE_BACKUP = string(BConstants::PATH_BUNDLE_BACKUP_HOME) + .append(BConstants::SA_BUNDLE_BACKUP_BACKUP) + .append(BConstants::EXT_BACKUP_MANAGE); +const string INDEX_FILE_RESTORE = string(BConstants::PATH_BUNDLE_BACKUP_HOME) + .append(BConstants::SA_BUNDLE_BACKUP_RESTORE) + .append(BConstants::EXT_BACKUP_MANAGE); using namespace std; void BackupExtExtension::VerifyCaller() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("begin"); uint32_t tokenCaller = IPCSkeleton::GetCallingTokenID(); int tokenType = Security::AccessToken::AccessTokenKit::GetTokenType(tokenCaller); @@ -72,6 +74,7 @@ void BackupExtExtension::VerifyCaller() static string GenerateHashForFileName(const string &fName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); ostringstream strHex; strHex << hex; @@ -83,6 +86,7 @@ static string GenerateHashForFileName(const string &fName) static bool CheckIfTarSuffix(const string &fileName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); if (auto suffix = string_view(".tar"); fileName.length() > suffix.length() && equal(fileName.rbegin(), next(fileName.rbegin(), suffix.length()), suffix.rbegin(), suffix.rend())) { @@ -93,6 +97,7 @@ static bool CheckIfTarSuffix(const string &fileName) UniqueFd BackupExtExtension::GetFileHandle(const string &fileName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { if (extension_->GetExtensionAction() != BConstants::ExtensionAction::RESTORE) { HILOGI("Failed to get file handle, because action is %{public}d invalid", extension_->GetExtensionAction()); @@ -128,6 +133,7 @@ UniqueFd BackupExtExtension::GetFileHandle(const string &fileName) ErrCode BackupExtExtension::HandleClear() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("begin clear"); if (extension_->GetExtensionAction() == BConstants::ExtensionAction::INVALID) { throw BError(BError::Codes::EXT_INVAL_ARG, "Action is invalid"); @@ -139,6 +145,7 @@ ErrCode BackupExtExtension::HandleClear() static ErrCode IndexFileReady(const TarMap &pkgInfo, sptr proxy) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); BJsonCachedEntity cachedEntity( UniqueFd(open(INDEX_FILE_BACKUP.data(), O_RDWR | O_CREAT, S_IRUSR | S_IWUSR))); auto cache = cachedEntity.Structuralize(); @@ -161,6 +168,7 @@ static ErrCode IndexFileReady(const TarMap &pkgInfo, sptr proxy) static ErrCode BigFileReady(sptr proxy) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); BJsonCachedEntity cachedEntity(UniqueFd(open(INDEX_FILE_BACKUP.data(), O_RDONLY))); auto cache = cachedEntity.Structuralize(); auto pkgInfo = cache.GetExtManageInfo(); @@ -192,6 +200,7 @@ static ErrCode BigFileReady(sptr proxy) static bool IsAllFileReceived(vector tars) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); // 是否已收到索引文件 if (find(tars.begin(), tars.end(), string(BConstants::EXT_BACKUP_MANAGE)) == tars.end()) { return false; @@ -214,6 +223,7 @@ static bool IsAllFileReceived(vector tars) ErrCode BackupExtExtension::PublishFile(const string &fileName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGE("begin publish file. fileName is %{public}s", fileName.data()); try { if (extension_->GetExtensionAction() != BConstants::ExtensionAction::RESTORE) { @@ -265,6 +275,7 @@ ErrCode BackupExtExtension::PublishFile(const string &fileName) ErrCode BackupExtExtension::HandleBackup() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); string usrConfig = extension_->GetUsrConfig(); BJsonCachedEntity cachedEntity(usrConfig); auto cache = cachedEntity.Structuralize(); @@ -279,6 +290,7 @@ ErrCode BackupExtExtension::HandleBackup() static bool IsUserTar(const string &tarFile, const string &indexFile) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); if (tarFile.empty()) { return false; } @@ -286,8 +298,7 @@ static bool IsUserTar(const string &tarFile, const string &indexFile) BJsonCachedEntity cachedEntity(UniqueFd(open(filePath.data(), O_RDONLY))); auto cache = cachedEntity.Structuralize(); auto info = cache.GetExtManageInfo(); - auto iter = find_if(info.begin(), info.end(), - [&tarFile](const auto& item) { return item.hashName == tarFile; }); + auto iter = find_if(info.begin(), info.end(), [&tarFile](const auto &item) { return item.hashName == tarFile; }); if (iter != info.end()) { HILOGI("tarFile:%{public}s isUserTar:%{public}d", tarFile.data(), iter->isUserTar); return iter->isUserTar; @@ -298,6 +309,7 @@ static bool IsUserTar(const string &tarFile, const string &indexFile) static pair> GetFileInfos(const vector &includes, const vector &excludes) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); auto [errCode, files, smallFiles] = BDir::GetBigFiles(includes, excludes); if (errCode != 0) { return {}; @@ -333,6 +345,7 @@ static pair> GetFileInfos(const vector &includes, int BackupExtExtension::DoBackup(const BJsonEntityExtensionConfig &usrConfig) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Do backup"); if (extension_->GetExtensionAction() != BConstants::ExtensionAction::BACKUP) { return EPERM; @@ -375,6 +388,7 @@ int BackupExtExtension::DoBackup(const BJsonEntityExtensionConfig &usrConfig) int BackupExtExtension::DoRestore(const string &fileName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Do restore"); if (extension_->GetExtensionAction() != BConstants::ExtensionAction::RESTORE) { return EPERM; @@ -416,6 +430,7 @@ int BackupExtExtension::DoRestore(const string &fileName) void BackupExtExtension::AsyncTaskBackup(const string config) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); auto task = [obj {wptr(this)}, config]() { auto ptr = obj.promote(); BExcepUltils::BAssert(ptr, BError::Codes::EXT_BROKEN_FRAMEWORK, @@ -452,9 +467,12 @@ void BackupExtExtension::AsyncTaskBackup(const string config) }); } -static bool RestoreBigFilesWithPath(string& fileName, const string& path, - const string& hashName, const string& filePath) +static bool RestoreBigFilesWithPath(string &fileName, + const string &path, + const string &hashName, + const string &filePath) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); // 带路径的文件名在这里转换为hash值 HILOGD("RestoreBigFiles: fileName include path symbol, need to make hash."); fileName = path + GenerateHashForFileName(hashName); @@ -475,8 +493,9 @@ static bool RestoreBigFilesWithPath(string& fileName, const string& path, return true; } -static bool CheckAndCreateDirectory(const string& filePath) +static bool CheckAndCreateDirectory(const string &filePath) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); size_t pos = filePath.rfind('/'); if (pos == string::npos) { return true; @@ -488,13 +507,13 @@ static bool CheckAndCreateDirectory(const string& filePath) return false; } } - + return true; } -static bool RestoreBigFilePrecheck(string& fileName, const string& path, - const string& hashName, const string& filePath) +static bool RestoreBigFilePrecheck(string &fileName, const string &path, const string &hashName, const string &filePath) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); if (filePath.empty()) { HILOGE("file path is empty. %{public}s", filePath.c_str()); return false; @@ -511,7 +530,7 @@ static bool RestoreBigFilePrecheck(string& fileName, const string& path, HILOGI("file does not exist"); return false; } - + // 目录不存在且只有大文件时,不能通过untar创建,需要检查并创建 if (!CheckAndCreateDirectory(filePath)) { HILOGE("failed to create directory %{public}s", filePath.c_str()); @@ -522,9 +541,12 @@ static bool RestoreBigFilePrecheck(string& fileName, const string& path, return true; } -static void RestoreBigFileAfter(const string& fileName, const string& filePath, const struct stat& sta, - const set& lks) +static void RestoreBigFileAfter(const string &fileName, + const string &filePath, + const struct stat &sta, + const set &lks) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); if (chmod(filePath.c_str(), sta.st_mode) != 0) { HILOGE("Failed to chmod filePath, err = %{public}d", errno); } @@ -563,6 +585,7 @@ static void RestoreBigFileAfter(const string& fileName, const string& filePath, static void RestoreBigFiles(bool appendTargetPath) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); // 获取索引文件内容 string path = string(BConstants::PATH_BUNDLE_BACKUP_HOME).append(BConstants::SA_BUNDLE_BACKUP_RESTORE); BJsonCachedEntity cachedEntity(UniqueFd(open(INDEX_FILE_RESTORE.data(), O_RDONLY))); @@ -585,13 +608,14 @@ static void RestoreBigFiles(bool appendTargetPath) HILOGE("failed to copy the file. err = %{public}d", errno); continue; } - + RestoreBigFileAfter(fileName, filePath, item.sta, cache.GetHardLinkInfo(item.hashName)); } } static void DeleteBackupTars() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); // The directory include tars and manage.json which would be deleted BJsonCachedEntity cachedEntity(UniqueFd(open(INDEX_FILE_RESTORE.data(), O_RDONLY))); auto cache = cachedEntity.Structuralize(); @@ -613,6 +637,7 @@ static void DeleteBackupTars() void BackupExtExtension::AsyncTaskRestore() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); auto task = [obj {wptr(this)}, tars {tars_}]() { auto ptr = obj.promote(); BExcepUltils::BAssert(ptr, BError::Codes::EXT_BROKEN_FRAMEWORK, @@ -627,8 +652,8 @@ void BackupExtExtension::AsyncTaskRestore() } // 恢复用户tar包以及大文件 // 目的地址是否需要拼接path(临时目录),FullBackupOnly为true并且非特殊场景 - bool appendTargetPath = ptr->extension_->UseFullBackupOnly() && - !ptr->extension_->SpeicalVersionForCloneAndCloud(); + bool appendTargetPath = + ptr->extension_->UseFullBackupOnly() && !ptr->extension_->SpeicalVersionForCloneAndCloud(); RestoreBigFiles(appendTargetPath); // delete 1.tar/manage.json @@ -666,6 +691,7 @@ void BackupExtExtension::AsyncTaskRestore() void BackupExtExtension::AsyncTaskRestoreForUpgrade() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); auto task = [obj {wptr(this)}]() { auto ptr = obj.promote(); try { @@ -709,12 +735,14 @@ void BackupExtExtension::AsyncTaskRestoreForUpgrade() void BackupExtExtension::ExtClear() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("ext begin clear"); DoClear(); } void BackupExtExtension::DoClear() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { string backupCache = string(BConstants::PATH_BUNDLE_BACKUP_HOME).append(BConstants::SA_BUNDLE_BACKUP_BACKUP); string restoreCache = string(BConstants::PATH_BUNDLE_BACKUP_HOME).append(BConstants::SA_BUNDLE_BACKUP_RESTORE); @@ -740,6 +768,7 @@ void BackupExtExtension::DoClear() void BackupExtExtension::AppDone(ErrCode errCode) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); auto proxy = ServiceProxy::GetInstance(); BExcepUltils::BAssert(proxy, BError::Codes::EXT_BROKEN_IPC, "Failed to obtain the ServiceProxy handle"); auto ret = proxy->AppDone(errCode); @@ -750,6 +779,7 @@ void BackupExtExtension::AppDone(ErrCode errCode) void BackupExtExtension::AsyncTaskOnBackup() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); auto task = [obj {wptr(this)}]() { auto ptr = obj.promote(); try { @@ -791,6 +821,7 @@ void BackupExtExtension::AsyncTaskOnBackup() ErrCode BackupExtExtension::HandleRestore() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); VerifyCaller(); if (extension_->GetExtensionAction() != BConstants::ExtensionAction::RESTORE) { HILOGI("Failed to get file handle, because action is %{public}d invalid", extension_->GetExtensionAction()); diff --git a/frameworks/native/backup_kit_inner/src/service_proxy.cpp b/frameworks/native/backup_kit_inner/src/service_proxy.cpp index 43e01a9942b6e5af5805dc557c778526d84d667f..3af920d254a1803e8e348c0846a23bb74ebe6e0f 100644 --- a/frameworks/native/backup_kit_inner/src/service_proxy.cpp +++ b/frameworks/native/backup_kit_inner/src/service_proxy.cpp @@ -21,6 +21,7 @@ #include "b_error/b_error.h" #include "b_error/b_excep_utils.h" #include "b_resources/b_constants.h" +#include "base/hiviewdfx/hitrace/interfaces/native/innerkits/include/hitrace_meter/hitrace_meter.h" #include "filemgmt_libhilog.h" #include "svc_death_recipient.h" @@ -29,6 +30,7 @@ using namespace std; ErrCode ServiceProxy::InitRestoreSession(sptr remote) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -56,6 +58,7 @@ ErrCode ServiceProxy::InitRestoreSession(sptr remote) ErrCode ServiceProxy::InitBackupSession(sptr remote) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -83,6 +86,7 @@ ErrCode ServiceProxy::InitBackupSession(sptr remote) ErrCode ServiceProxy::Start() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -103,6 +107,7 @@ ErrCode ServiceProxy::Start() UniqueFd ServiceProxy::GetLocalCapabilities() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -126,6 +131,7 @@ UniqueFd ServiceProxy::GetLocalCapabilities() ErrCode ServiceProxy::PublishFile(const BFileInfo &fileInfo) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -151,6 +157,7 @@ ErrCode ServiceProxy::PublishFile(const BFileInfo &fileInfo) ErrCode ServiceProxy::AppFileReady(const string &fileName, UniqueFd fd) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -178,6 +185,7 @@ ErrCode ServiceProxy::AppFileReady(const string &fileName, UniqueFd fd) ErrCode ServiceProxy::AppDone(ErrCode errCode) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -202,6 +210,7 @@ ErrCode ServiceProxy::AppDone(ErrCode errCode) ErrCode ServiceProxy::GetFileHandle(const string &bundleName, const string &fileName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -233,6 +242,7 @@ ErrCode ServiceProxy::AppendBundlesRestoreSession(UniqueFd fd, RestoreTypeEnum restoreType, int32_t userId) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -267,6 +277,7 @@ ErrCode ServiceProxy::AppendBundlesRestoreSession(UniqueFd fd, ErrCode ServiceProxy::AppendBundlesBackupSession(const vector &bundleNames) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -292,6 +303,7 @@ ErrCode ServiceProxy::AppendBundlesBackupSession(const vector &bundl ErrCode ServiceProxy::Finish() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -312,6 +324,7 @@ ErrCode ServiceProxy::Finish() sptr ServiceProxy::GetInstance() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); unique_lock lock(proxyMutex_); if (serviceProxy_ != nullptr) { return serviceProxy_; @@ -346,6 +359,7 @@ sptr ServiceProxy::GetInstance() void ServiceProxy::InvaildInstance() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("invalid instance"); unique_lock lock(proxyMutex_); serviceProxy_ = nullptr; @@ -354,6 +368,7 @@ void ServiceProxy::InvaildInstance() void ServiceProxy::ServiceProxyLoadCallback::OnLoadSystemAbilitySuccess(int32_t systemAbilityId, const OHOS::sptr &remoteObject) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Load backup sa success, systemAbilityId: %{private}d, remoteObject result:%{private}s", systemAbilityId, (remoteObject != nullptr) ? "true" : "false"); if (systemAbilityId != FILEMANAGEMENT_BACKUP_SERVICE_SA_ID || remoteObject == nullptr) { @@ -384,6 +399,7 @@ void ServiceProxy::ServiceProxyLoadCallback::OnLoadSystemAbilitySuccess(int32_t void ServiceProxy::ServiceProxyLoadCallback::OnLoadSystemAbilityFail(int32_t systemAbilityId) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGE("Load backup sa failed, systemAbilityId:%{private}d", systemAbilityId); unique_lock lock(proxyMutex_); serviceProxy_ = nullptr; diff --git a/services/backup_sa/BUILD.gn b/services/backup_sa/BUILD.gn index e89cb1f28dd16d72ad8f3b6427789ec36326b5eb..43765dbc84f4e9029401e44d7772a0cd4fcb799f 100644 --- a/services/backup_sa/BUILD.gn +++ b/services/backup_sa/BUILD.gn @@ -64,6 +64,7 @@ ohos_shared_library("backup_sa") { "ipc:ipc_core", "safwk:system_ability_fwk", "samgr:samgr_proxy", + "hitrace:hitrace_meter", "storage_service:storage_manager_sa_proxy", ] diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 2f90faa05de4fa6ae4a438aed15803864aa85681..77e81e6fd99787082ee235bff86dca1987588353 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -45,6 +45,7 @@ #include "b_ohos/startup/backup_para.h" #include "b_process/b_multiuser.h" #include "b_resources/b_constants.h" +#include "base/hiviewdfx/hitrace/interfaces/native/innerkits/include/hitrace_meter/hitrace_meter.h" #include "bundle_mgr_client.h" #include "filemgmt_libhilog.h" #include "ipc_skeleton.h" @@ -67,6 +68,7 @@ constexpr int32_t DEBUG_ID = 100; /* Shell/Xts user id equal to 0/1, we need set default 100 */ static inline int32_t GetUserIdDefault() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); auto [isDebug, debugId] = BackupPara().GetBackupDebugOverrideAccount(); if (isDebug && debugId > DEBUG_ID) { return debugId; @@ -80,6 +82,7 @@ static inline int32_t GetUserIdDefault() void Service::OnStart() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); bool res = SystemAbility::Publish(sptr(this)); sched_ = sptr(new SchedScheduler(wptr(this), wptr(session_))); sched_->StartTimer(); @@ -88,6 +91,7 @@ void Service::OnStart() void Service::OnStop() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Called"); sched_ = nullptr; session_ = nullptr; @@ -95,6 +99,7 @@ void Service::OnStop() UniqueFd Service::GetLocalCapabilities() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGI("Begin"); /* @@ -135,11 +140,13 @@ UniqueFd Service::GetLocalCapabilities() void Service::StopAll(const wptr &obj, bool force) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); session_->Deactive(obj, force); } string Service::VerifyCallerAndGetCallerName() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); uint32_t tokenCaller = IPCSkeleton::GetCallingTokenID(); int tokenType = Security::AccessToken::AccessTokenKit::GetTokenType(tokenCaller); if (tokenType == Security::AccessToken::ATokenTypeEnum::TOKEN_HAP) { @@ -157,6 +164,7 @@ string Service::VerifyCallerAndGetCallerName() void Service::VerifyCaller() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); uint32_t tokenCaller = IPCSkeleton::GetCallingTokenID(); int tokenType = Security::AccessToken::AccessTokenKit::GetTokenType(tokenCaller); switch (tokenType) { @@ -183,12 +191,14 @@ void Service::VerifyCaller() void Service::VerifyCaller(IServiceReverse::Scenario scenario) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); session_->VerifyCallerAndScenario(IPCSkeleton::GetCallingTokenID(), scenario); VerifyCaller(); } ErrCode Service::InitRestoreSession(sptr remote) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { VerifyCaller(); session_->Active({ @@ -212,6 +222,7 @@ ErrCode Service::InitRestoreSession(sptr remote) ErrCode Service::InitBackupSession(sptr remote) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { VerifyCaller(); session_->Active({ @@ -229,6 +240,7 @@ ErrCode Service::InitBackupSession(sptr remote) ErrCode Service::Start() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); VerifyCaller(session_->GetScenario()); session_->Start(); @@ -238,6 +250,7 @@ ErrCode Service::Start() static bool SpeicalVersion(const string &versionName, uint32_t versionCode) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); auto iter = find_if(BConstants::DEFAULT_VERSION_NAMES_VEC.begin(), BConstants::DEFAULT_VERSION_NAMES_VEC.end(), [&versionName](const auto &version) { return version == versionName; }); if (versionCode == BConstants::DEFAULT_VERSION_CODE && iter != BConstants::DEFAULT_VERSION_NAMES_VEC.end()) { @@ -250,6 +263,7 @@ static vector GetRestoreBundleNames(UniqueFd fd, sptr session, const vector &bundleNames) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); // BundleMgrAdapter::GetBundleInfos可能耗时 auto restoreInfos = BundleMgrAdapter::GetBundleInfos(bundleNames, session->GetSessionUserId()); BJsonCachedEntity cachedEntity(move(fd)); @@ -284,6 +298,7 @@ ErrCode Service::AppendBundlesRestoreSession(UniqueFd fd, RestoreTypeEnum restoreType, int32_t userId) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGI("Begin"); session_->IncreaseSessionCnt(); @@ -335,6 +350,7 @@ ErrCode Service::AppendBundlesRestoreSession(UniqueFd fd, ErrCode Service::AppendBundlesBackupSession(const vector &bundleNames) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGI("Begin"); session_->IncreaseSessionCnt(); // BundleMgrAdapter::GetBundleInfos可能耗时 @@ -370,6 +386,7 @@ ErrCode Service::AppendBundlesBackupSession(const vector &bundleName ErrCode Service::Finish() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Begin"); VerifyCaller(session_->GetScenario()); session_->Finish(); @@ -379,6 +396,7 @@ ErrCode Service::Finish() ErrCode Service::PublishFile(const BFileInfo &fileInfo) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGI("Begin"); VerifyCaller(IServiceReverse::Scenario::RESTORE); @@ -408,6 +426,7 @@ ErrCode Service::PublishFile(const BFileInfo &fileInfo) ErrCode Service::AppFileReady(const string &fileName, UniqueFd fd) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGI("Begin"); string callerName = VerifyCallerAndGetCallerName(); @@ -451,6 +470,7 @@ ErrCode Service::AppFileReady(const string &fileName, UniqueFd fd) ErrCode Service::AppDone(ErrCode errCode) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGI("Begin"); string callerName = VerifyCallerAndGetCallerName(); @@ -486,6 +506,7 @@ ErrCode Service::AppDone(ErrCode errCode) ErrCode Service::LaunchBackupExtension(const BundleName &bundleName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGE("begin %{public}s", bundleName.data()); IServiceReverse::Scenario scenario = session_->GetScenario(); @@ -528,6 +549,7 @@ ErrCode Service::LaunchBackupExtension(const BundleName &bundleName) ErrCode Service::GetFileHandle(const string &bundleName, const string &fileName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGI("Begin"); VerifyCaller(IServiceReverse::Scenario::RESTORE); @@ -561,6 +583,7 @@ ErrCode Service::GetFileHandle(const string &bundleName, const string &fileName) void Service::OnBackupExtensionDied(const string &&bundleName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { string callName = move(bundleName); session_->VerifyBundleName(callName); @@ -602,6 +625,7 @@ void Service::OnBackupExtensionDied(const string &&bundleName) void Service::ExtConnectDied(const string &callName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGI("Begin"); /* Clear Timer */ @@ -622,6 +646,7 @@ void Service::ExtConnectDied(const string &callName) void Service::ExtStart(const string &bundleName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGE("begin %{public}s", bundleName.data()); IServiceReverse::Scenario scenario = session_->GetScenario(); @@ -665,6 +690,7 @@ void Service::ExtStart(const string &bundleName) int Service::Dump(int fd, const vector &args) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); if (fd < 0) { HILOGI("HiDumper handle invalid"); return -1; @@ -676,6 +702,7 @@ int Service::Dump(int fd, const vector &args) void Service::ExtConnectFailed(const string &bundleName, ErrCode ret) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGE("begin %{public}s", bundleName.data()); IServiceReverse::Scenario scenario = session_->GetScenario(); @@ -703,6 +730,7 @@ void Service::ExtConnectFailed(const string &bundleName, ErrCode ret) void Service::NoticeClientFinish(const string &bundleName, ErrCode errCode) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); auto scenario = session_->GetScenario(); if (scenario == IServiceReverse::Scenario::BACKUP) { session_->GetServiceReverseProxy()->BackupOnBundleFinished(errCode, bundleName); @@ -715,6 +743,7 @@ void Service::NoticeClientFinish(const string &bundleName, ErrCode errCode) void Service::ExtConnectDone(string bundleName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); /* Callback for App Ext Timeout Process. */ auto timeoutCallback = [ptr {wptr(this)}, bundleName]() { auto thisPtr = ptr.promote(); @@ -751,6 +780,7 @@ void Service::ExtConnectDone(string bundleName) void Service::ClearSessionAndSchedInfo(const string &bundleName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { session_->RemoveExtInfo(bundleName); sched_->RemoveExtConn(bundleName); @@ -769,6 +799,7 @@ void Service::ClearSessionAndSchedInfo(const string &bundleName) void Service::HandleRestoreDepsBundle(const string &bundleName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); if (session_->GetScenario() != IServiceReverse::Scenario::RESTORE) { return; } @@ -808,6 +839,7 @@ void Service::HandleRestoreDepsBundle(const string &bundleName) void Service::OnAllBundlesFinished(ErrCode errCode) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); if (session_->IsOnAllBundlesFinished()) { IServiceReverse::Scenario scenario = session_->GetScenario(); if (scenario == IServiceReverse::Scenario::BACKUP) { @@ -821,6 +853,7 @@ void Service::OnAllBundlesFinished(ErrCode errCode) void Service::OnStartSched() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); if (session_->IsOnOnStartSched()) { for (int num = 0; num < BConstants::EXT_CONNECT_MAX_COUNT; num++) { sched_->Sched(); @@ -830,6 +863,7 @@ void Service::OnStartSched() void Service::SendAppGalleryNotify(const BundleName &bundleName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); IServiceReverse::Scenario scenario = session_->GetScenario(); if (scenario == IServiceReverse::Scenario::RESTORE) { DisposeErr disposeErr = AppGalleryDisposeProxy::GetInstance()->StartRestore(bundleName); @@ -840,6 +874,7 @@ void Service::SendAppGalleryNotify(const BundleName &bundleName) void Service::SessionDeactive() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGI("Begin"); // 结束定时器 diff --git a/services/backup_sa/src/module_ipc/svc_extension_proxy.cpp b/services/backup_sa/src/module_ipc/svc_extension_proxy.cpp index 8d1c9276c23dbb5afcb0df488a4ec022b15f3e39..4eb98ed57eace26d342d4a15bd7a5f1f71948dcc 100644 --- a/services/backup_sa/src/module_ipc/svc_extension_proxy.cpp +++ b/services/backup_sa/src/module_ipc/svc_extension_proxy.cpp @@ -17,6 +17,7 @@ #include "b_error/b_error.h" #include "b_error/b_excep_utils.h" +#include "base/hiviewdfx/hitrace/interfaces/native/innerkits/include/hitrace_meter/hitrace_meter.h" #include "filemgmt_libhilog.h" #include "iservice_registry.h" #include "system_ability_definition.h" @@ -26,6 +27,7 @@ using namespace std; UniqueFd SvcExtensionProxy::GetFileHandle(const string &fileName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Start"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -52,6 +54,7 @@ UniqueFd SvcExtensionProxy::GetFileHandle(const string &fileName) ErrCode SvcExtensionProxy::HandleClear() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Start"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -72,6 +75,7 @@ ErrCode SvcExtensionProxy::HandleClear() ErrCode SvcExtensionProxy::HandleBackup() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Start"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -92,6 +96,7 @@ ErrCode SvcExtensionProxy::HandleBackup() ErrCode SvcExtensionProxy::PublishFile(const string &fileName) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Start"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; @@ -117,6 +122,7 @@ ErrCode SvcExtensionProxy::PublishFile(const string &fileName) ErrCode SvcExtensionProxy::HandleRestore() { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Start"); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; diff --git a/tools/backup_tool/src/tools_op_backup.cpp b/tools/backup_tool/src/tools_op_backup.cpp index d79b1ba6212944de93c7b55a1647e4d48e716708..5ac0fa07b81fd8e92938657d96d926b6015bd5bc 100644 --- a/tools/backup_tool/src/tools_op_backup.cpp +++ b/tools/backup_tool/src/tools_op_backup.cpp @@ -126,6 +126,7 @@ static string GenHelpMsg() static void OnFileReady(shared_ptr ctx, const BFileInfo &fileInfo, UniqueFd fd) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); printf("FileReady owner = %s, fileName = %s, sn = %u, fd = %d\n", fileInfo.owner.c_str(), fileInfo.fileName.c_str(), fileInfo.sn, fd.Get()); string tmpPath = string(BConstants::BACKUP_TOOL_RECEIVE_DIR) + fileInfo.owner; @@ -150,6 +151,7 @@ static void OnFileReady(shared_ptr ctx, const BFileInfo &fileInfo, Uniq static void OnBundleStarted(shared_ptr ctx, ErrCode err, const BundleName name) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); printf("BundleStarted errCode = %d, BundleName = %s\n", err, name.c_str()); if (err != 0) { ctx->isAllBundelsFinished.store(true); @@ -160,6 +162,7 @@ static void OnBundleStarted(shared_ptr ctx, ErrCode err, const BundleNa static void OnBundleFinished(shared_ptr ctx, ErrCode err, const BundleName name) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); printf("BundleFinished errCode = %d, BundleName = %s\n", err, name.c_str()); ctx->UpdateBundleFinishedCount(); ctx->TryNotify(); @@ -167,6 +170,7 @@ static void OnBundleFinished(shared_ptr ctx, ErrCode err, const BundleN static void OnAllBundlesFinished(shared_ptr ctx, ErrCode err) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); ctx->isAllBundelsFinished.store(true); if (err == 0) { printf("all bundles backup finished end\n"); @@ -180,6 +184,7 @@ static void OnAllBundlesFinished(shared_ptr ctx, ErrCode err) static void OnBackupServiceDied(shared_ptr ctx) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); printf("backupServiceDied\n"); ctx->TryNotify(true); } diff --git a/tools/backup_tool/src/tools_op_restore.cpp b/tools/backup_tool/src/tools_op_restore.cpp index 333099dbd1f4fd160f72439bcdb4d82ae168c8ec..bcc18aaea6b2bf8c14ca8e46327ffeedeb53a5af 100644 --- a/tools/backup_tool/src/tools_op_restore.cpp +++ b/tools/backup_tool/src/tools_op_restore.cpp @@ -122,6 +122,7 @@ static string GenHelpMsg() static void OnFileReady(shared_ptr ctx, const BFileInfo &fileInfo, UniqueFd fd) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); printf("FileReady owner = %s, fileName = %s, sn = %u, fd = %d\n", fileInfo.owner.c_str(), fileInfo.fileName.c_str(), fileInfo.sn, fd.Get()); if (fileInfo.fileName.find('/') != string::npos) { @@ -145,6 +146,7 @@ static void OnFileReady(shared_ptr ctx, const BFileInfo &fileInfo, Uniq static void OnBundleStarted(shared_ptr ctx, ErrCode err, const BundleName name) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); printf("BundleStarted errCode = %d, BundleName = %s\n", err, name.c_str()); if (err != 0) { ctx->UpdateBundleFinishedCount(); @@ -156,6 +158,7 @@ static void OnBundleStarted(shared_ptr ctx, ErrCode err, const BundleNa static void OnBundleFinished(shared_ptr ctx, ErrCode err, const BundleName name) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); printf("BundleFinished errCode = %d, BundleName = %s\n", err, name.c_str()); ctx->UpdateBundleFinishedCount(); if (err != 0) { @@ -167,6 +170,7 @@ static void OnBundleFinished(shared_ptr ctx, ErrCode err, const BundleN static void OnAllBundlesFinished(shared_ptr ctx, ErrCode err) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); ctx->isAllBundelsFinished.store(true); if (err == 0) { printf("all bundles restore finished end\n"); @@ -180,12 +184,14 @@ static void OnAllBundlesFinished(shared_ptr ctx, ErrCode err) static void OnBackupServiceDied(shared_ptr ctx) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); printf("backupServiceDied\n"); ctx->TryNotify(true); } static void RestoreApp(shared_ptr restore, vector &bundleNames) { + HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); StartTrace(HITRACE_TAG_FILEMANAGEMENT, "RestoreApp"); if (!restore || !restore->session_) { throw BError(BError::Codes::TOOL_INVAL_ARG, generic_category().message(errno));