From 17512f32589e3b8a8dc3625984e98112d0ae1805 Mon Sep 17 00:00:00 2001 From: yang-jingbo1985 Date: Mon, 15 Jan 2024 20:06:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E7=94=A8=E6=96=B0=E5=A2=9E=E7=9A=84?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=86=85=E5=AD=98=E5=8F=82=E6=95=B0=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=20Signed-off-by:=20yangjingbo10=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ic63c46b78fe4aaf561dd60181aedd0a1a7f850f4 --- frameworks/native/backup_ext/src/tar_file.cpp | 9 +++++++++ .../include/module_external/sms_adapter.h | 7 +++++++ .../include/module_ipc/svc_session_manager.h | 14 ++++++++++++++ .../backup_sa/src/module_external/sms_adapter.cpp | 11 +++++++++++ services/backup_sa/src/module_ipc/service.cpp | 6 ++++++ .../src/module_ipc/svc_session_manager.cpp | 10 ++++++++++ tests/mock/module_external/sms_adapter_mock.cpp | 5 +++++ tests/mock/module_ipc/svc_session_manager_mock.cpp | 7 +++++++ utils/include/b_resources/b_constants.h | 3 +++ 9 files changed, 72 insertions(+) diff --git a/frameworks/native/backup_ext/src/tar_file.cpp b/frameworks/native/backup_ext/src/tar_file.cpp index 8595d911d..80de4451c 100644 --- a/frameworks/native/backup_ext/src/tar_file.cpp +++ b/frameworks/native/backup_ext/src/tar_file.cpp @@ -37,6 +37,8 @@ const uint64_t MAX_FILE_SIZE = 0777777777777L; const uint32_t OCTSTR_LEN = sizeof(off_t) * 3 + 1; const uint32_t DEFAULT_SLICE_SIZE = 100 * MB_TO_BYTE; // 分片文件大小为100M const uint32_t MAX_FILE_COUNT = 6000; // 单个tar包最多包含6000个文件 +const uint32_t WAIT_INDEX = 100000; +const uint32_t WAIT_TIME = 5; const string VERSION = "1.0"; const string LONG_LINK_SYMBOL = "longLinkSymbol"; } // namespace @@ -65,11 +67,18 @@ bool TarFile::Packet(const vector &srcFiles, const string &tarFileName, return false; } + size_t index = 0; for (auto &filePath : srcFiles) { rootPath_ = filePath; if (!TraversalFile(rootPath_)) { HILOGE("Failed to traversal file"); } + index++; + if (index >= WAIT_INDEX) { + HILOGD("Sleep to wait"); + sleep(WAIT_TIME); + index = 0; + } } if (!FillSplitTailBlocks()) { diff --git a/services/backup_sa/include/module_external/sms_adapter.h b/services/backup_sa/include/module_external/sms_adapter.h index 5dd16545b..0e3b51e78 100644 --- a/services/backup_sa/include/module_external/sms_adapter.h +++ b/services/backup_sa/include/module_external/sms_adapter.h @@ -37,6 +37,13 @@ public: * @param userId user id */ static int64_t GetUserStorageStats(const std::string &bundleName, int32_t userId); + + /** + * @brief update memory para + * + * @param size para data + */ + static int32_t UpdateMemPara(int32_t size); }; } // namespace OHOS::FileManagement::Backup #endif // OHOS_FILEMGMT_BACKUP_STORAGE_MGR_ADAPTER_H \ No newline at end of file diff --git a/services/backup_sa/include/module_ipc/svc_session_manager.h b/services/backup_sa/include/module_ipc/svc_session_manager.h index 46671ac84..fbf1614ac 100644 --- a/services/backup_sa/include/module_ipc/svc_session_manager.h +++ b/services/backup_sa/include/module_ipc/svc_session_manager.h @@ -377,6 +377,19 @@ public: */ void ClearSessionData(); + /** + * @brief 获取备份前内存参数 + * + */ + int32_t GetMemParaCurSize(); + + /** + * @brief 记录备份前内存参数 + * + * @param size + */ + void SetMemParaCurSize(int32_t size); + private: /** * @brief 获取backup extension ability @@ -431,6 +444,7 @@ private: uint32_t extConnectNum_ {0}; Utils::Timer extBundleTimer {"backupBundleExtTimer"}; std::atomic sessionCnt_ {0}; + int32_t memoryParaCurSize_ {100}; }; } // namespace OHOS::FileManagement::Backup diff --git a/services/backup_sa/src/module_external/sms_adapter.cpp b/services/backup_sa/src/module_external/sms_adapter.cpp index e6613ed2c..7055d0d3f 100644 --- a/services/backup_sa/src/module_external/sms_adapter.cpp +++ b/services/backup_sa/src/module_external/sms_adapter.cpp @@ -18,6 +18,7 @@ #include #include "b_error/b_error.h" +#include "b_resources/b_constants.h" #include "filemgmt_libhilog.h" #include "iservice_registry.h" #include "system_ability_definition.h" @@ -69,4 +70,14 @@ int64_t StorageMgrAdapter::GetUserStorageStats(const std::string &bundleName, in } return 0; } + +int32_t StorageMgrAdapter::UpdateMemPara(int32_t size) +{ + auto storageMgr = GetStorageManager(); + int32_t oldSize = BConstants::DEF_VFS_CACHE_PRESSURE; + if (storageMgr->UpdateMemoryPara(size, oldSize)) { + HILOGE("An error occured StorageMgrAdapter UpdateMemPara"); + } + return oldSize; +} } // namespace OHOS::FileManagement::Backup diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 2f90faa05..01f1625da 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -50,6 +50,7 @@ #include "ipc_skeleton.h" #include "module_app_gallery/app_gallery_dispose_proxy.h" #include "module_external/bms_adapter.h" +#include "module_external/sms_adapter.h" #include "module_ipc/svc_backup_connection.h" #include "module_ipc/svc_restore_deps_manager.h" #include "parameter.h" @@ -89,6 +90,11 @@ void Service::OnStart() void Service::OnStop() { HILOGI("Called"); + int32_t oldMemoryParaSize = BConstants::DEF_VFS_CACHE_PRESSURE; + if (session_ != nullptr) { + oldMemoryParaSize = session_->GetMemParaCurSize(); + } + StorageMgrAdapter::UpdateMemPara(oldMemoryParaSize); sched_ = nullptr; session_ = nullptr; } diff --git a/services/backup_sa/src/module_ipc/svc_session_manager.cpp b/services/backup_sa/src/module_ipc/svc_session_manager.cpp index 1b245feaa..c2898a340 100644 --- a/services/backup_sa/src/module_ipc/svc_session_manager.cpp +++ b/services/backup_sa/src/module_ipc/svc_session_manager.cpp @@ -628,4 +628,14 @@ void SvcSessionManager::ClearSessionData() } impl_.backupExtNameMap.clear(); } + +int32_t SvcSessionManager::GetMemParaCurSize() +{ + return memoryParaCurSize_; +} + +void SvcSessionManager::SetMemParaCurSize(int32_t size) +{ + memoryParaCurSize_ = size; +} } // namespace OHOS::FileManagement::Backup diff --git a/tests/mock/module_external/sms_adapter_mock.cpp b/tests/mock/module_external/sms_adapter_mock.cpp index 1ef1c8f20..cafd6c621 100644 --- a/tests/mock/module_external/sms_adapter_mock.cpp +++ b/tests/mock/module_external/sms_adapter_mock.cpp @@ -24,4 +24,9 @@ StorageManager::BundleStats StorageMgrAdapter::GetBundleStats(const std::string StorageManager::BundleStats bundleStats; return bundleStats; } + +int32_t StorageMgrAdapter::UpdateMemPara(int32_t size) +{ + return 0; +} } // namespace OHOS::FileManagement::Backup diff --git a/tests/mock/module_ipc/svc_session_manager_mock.cpp b/tests/mock/module_ipc/svc_session_manager_mock.cpp index 8c9ff7ab9..580b034bb 100644 --- a/tests/mock/module_ipc/svc_session_manager_mock.cpp +++ b/tests/mock/module_ipc/svc_session_manager_mock.cpp @@ -313,5 +313,12 @@ void SvcSessionManager::IncreaseSessionCnt() {} void SvcSessionManager::DecreaseSessionCnt() {} +int32_t SvcSessionManager::GetMemParaCurSize() +{ + return 0; +} + +void SvcSessionManager::SetMemParaCurSize(int32_t size) {} + void SvcSessionManager::ClearSessionData() {} } // namespace OHOS::FileManagement::Backup diff --git a/utils/include/b_resources/b_constants.h b/utils/include/b_resources/b_constants.h index da3ab5d0d..077c21b9e 100644 --- a/utils/include/b_resources/b_constants.h +++ b/utils/include/b_resources/b_constants.h @@ -63,6 +63,9 @@ constexpr int EXT_CONNECT_MAX_TIME = 15000; // SA 启动 extension 等待连 constexpr int IPC_MAX_WAIT_TIME = 3000; // IPC通讯最大等待时间(s) +constexpr int DEF_VFS_CACHE_PRESSURE = 100; // 默认内存回收参数 +constexpr int BACKUP_VFS_CACHE_PRESSURE = 5000; // 备份过程修改参数 + // backup.para内配置项的名称,该配置项值为true时可在不更新hap包的情况下,可以读取包管理元数据配置文件的内容 static inline std::string BACKUP_DEBUG_OVERRIDE_EXTENSION_CONFIG_KEY = "backup.debug.overrideExtensionConfig"; -- Gitee