From efdc25d85a71bd00b2836d5ef843586db857d81f Mon Sep 17 00:00:00 2001 From: xuxiaoqing Date: Tue, 13 Jun 2023 07:14:31 +0000 Subject: [PATCH] fix: add init process for sa Signed-off-by: xuxiaoqing --- services/BUILD.gn | 10 +++++ .../include/device_manager/etx_device_mgr.h | 4 +- .../drivers_pkg_manager/driver_pkg_manager.h | 20 +++++----- .../src/device_manager/etx_device_mgr.cpp | 37 ++++++++++++++++- .../src/driver_etx_mgr.cpp | 21 ++++++++-- .../driver_pkg_manager.cpp | 26 ++++++------ .../bus_extension_core_mt.cpp | 4 ++ .../src/usb_subscriber_test.cpp | 1 - .../src/driver_pkg_manager_test.cpp | 40 +++++++------------ utils/include/ext_object.h | 5 ++- utils/include/single_instance.h | 1 + 11 files changed, 113 insertions(+), 56 deletions(-) diff --git a/services/BUILD.gn b/services/BUILD.gn index 2519186..0acbcc1 100644 --- a/services/BUILD.gn +++ b/services/BUILD.gn @@ -24,11 +24,21 @@ ohos_shared_library("driver_extension_manager") { "${ext_mgr_path}/services/native/driver_extension_manager/include", "${ext_mgr_path}/interfaces/innerkits/", "${ext_mgr_path}/services/zidl/include/", + "${ext_mgr_path}/services/native/driver_extension_manager/include/drivers_pkg_manager", + "${ext_mgr_path}/services/native/driver_extension_manager/include/device_manager", ] configs = [ "${utils_path}:utils_config" ] + deps = [ + ":drivers_pkg_manager", + "${ext_mgr_path}/services/native/driver_extension_manager/src/bus_extension:bus_extension", + "${ext_mgr_path}/services/native/driver_extension_manager/src/device_manager:bus_extension_core", + ] external_deps = [ "ability_runtime:ability_manager", + "bundle_framework:appexecfwk_base", + "bundle_framework:appexecfwk_core", "c_utils:utils", + "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", "safwk:system_ability_fwk", "samgr:samgr_proxy", diff --git a/services/native/driver_extension_manager/include/device_manager/etx_device_mgr.h b/services/native/driver_extension_manager/include/device_manager/etx_device_mgr.h index f7cc5c8..c40fad5 100644 --- a/services/native/driver_extension_manager/include/device_manager/etx_device_mgr.h +++ b/services/native/driver_extension_manager/include/device_manager/etx_device_mgr.h @@ -38,13 +38,15 @@ private: }; class ExtDeviceManager final { - DECLARE_SINGLE_INSTANCE(ExtDeviceManager); + DECLARE_SINGLE_INSTANCE_BASE(ExtDeviceManager); public: + ~ExtDeviceManager() = default; int32_t Init(); int32_t RegisterDevice(std::shared_ptr devInfo); void UnRegisterDevice(const std::shared_ptr devInfo); private: + ExtDeviceManager() = default; std::unordered_map>> deviceMap_; std::mutex deviceMapMutex_; }; diff --git a/services/native/driver_extension_manager/include/drivers_pkg_manager/driver_pkg_manager.h b/services/native/driver_extension_manager/include/drivers_pkg_manager/driver_pkg_manager.h index 6af3075..1267d30 100644 --- a/services/native/driver_extension_manager/include/drivers_pkg_manager/driver_pkg_manager.h +++ b/services/native/driver_extension_manager/include/drivers_pkg_manager/driver_pkg_manager.h @@ -16,13 +16,13 @@ #ifndef DRIVER_PKG_MANAGER_H #define DRIVER_PKG_MANAGER_H -#include #include +#include #include "bundle_monitor.h" - -#include "ibus_extension.h" #include "drv_bundle_state_callback.h" +#include "ibus_extension.h" +#include "single_instance.h" namespace OHOS { namespace ExternalDeviceManager { using namespace std; @@ -41,12 +41,10 @@ struct BundleInfoNames { }; class DriverPkgManager { -public: - DriverPkgManager(); - ~DriverPkgManager(); + DECLARE_SINGLE_INSTANCE_BASE(DriverPkgManager); +public: void PrintTest(); - /** * @brief Called at first before Monitor DriverExtension Package. * @param bundleName Indicates the bundle name of the application. @@ -54,11 +52,10 @@ public: * @return Returns true if the function is successfully called; returns false otherwise. */ int32_t Init(); - shared_ptr QueryMatchDriver(shared_ptr devInfo); - int32_t RegisterOnBundleUpdate(PCALLBACKFUN pFun); int32_t UnRegisterOnBundleUpdate(); + ~DriverPkgManager(); private: shared_ptr bundleMonitor_ = nullptr; sptr bundleStateCallback_ = nullptr; @@ -66,7 +63,8 @@ private: int32_t RegisterCallback(const sptr &callback); int32_t UnRegisterCallback(); + DriverPkgManager(); }; -} // namespace -} +} // namespace ExternalDeviceManager +} // namespace OHOS #endif // DRIVER_PKG_MANAGER_H \ No newline at end of file diff --git a/services/native/driver_extension_manager/src/device_manager/etx_device_mgr.cpp b/services/native/driver_extension_manager/src/device_manager/etx_device_mgr.cpp index 72da2bc..4cb137e 100644 --- a/services/native/driver_extension_manager/src/device_manager/etx_device_mgr.cpp +++ b/services/native/driver_extension_manager/src/device_manager/etx_device_mgr.cpp @@ -13,19 +13,54 @@ * limitations under the License. */ -#include "etx_device_mgr.h" +#include +#include + #include "cinttypes" #include "edm_errors.h" #include "hilog_wrapper.h" #include "ibus_extension.h" +#include "etx_device_mgr.h" + +#ifdef __aarch64__ +static constexpr const char *BUS_EXTENSION_SO_PATH = "/system/lib64"; +#else +static constexpr const char *BUS_EXTENSION_SO_PATH = "/system/lib"; +#endif +static constexpr const char *HDI_SO_SUFFIX = ".z.so"; +static constexpr const char *HDI_SO_PREFIX = "lib"; +static constexpr const char *USB_BUS_EXTENSION = "bus_extension"; namespace OHOS { namespace ExternalDeviceManager { IMPLEMENT_SINGLE_INSTANCE(BusExtensionCore); IMPLEMENT_SINGLE_INSTANCE(ExtDeviceManager); +static void LoadLib() +{ + for (BusType i = BUS_TYPE_USB; i < BUS_TYPE_MAX; i = (BusType)(i + 1)) { + std::ostringstream libPath; + libPath << BUS_EXTENSION_SO_PATH << "/" << HDI_SO_PREFIX; + switch (i) { + case BUS_TYPE_USB: + libPath << USB_BUS_EXTENSION; + break; + default: + EDM_LOGE(MODULE_DEV_MGR, "invalid bus type"); + continue; + } + libPath << HDI_SO_SUFFIX; + void *handler = dlopen(libPath.str().c_str(), RTLD_LAZY); + if (handler == nullptr) { + EDM_LOGE(MODULE_DEV_MGR, "failed to dlopen %{public}s, %{public}s", libPath.str().c_str(), dlerror()); + continue; + } + } +} + int32_t BusExtensionCore::Init() { + LoadLib(); int ret = EDM_OK; for (auto &iter : busExtensions_) { std::shared_ptr callback = diff --git a/services/native/driver_extension_manager/src/driver_etx_mgr.cpp b/services/native/driver_extension_manager/src/driver_etx_mgr.cpp index ac409b7..4ee5244 100644 --- a/services/native/driver_extension_manager/src/driver_etx_mgr.cpp +++ b/services/native/driver_extension_manager/src/driver_etx_mgr.cpp @@ -14,7 +14,10 @@ */ #include "driver_ext_mgr.h" - +#include "driver_pkg_manager.h" +#include "edm_errors.h" +#include "etx_device_mgr.h" +#include "hilog_wrapper.h" #include "iservice_registry.h" #include "system_ability_definition.h" @@ -26,9 +29,21 @@ const bool G_REGISTER_RESULT = DriverExtMgr::DriverExtMgr() : SystemAbility(HDF_EXTERNAL_DEVICE_MANAGER_SA_ID, true) {} DriverExtMgr::~DriverExtMgr() {} -void DriverExtMgr::OnStart() {} +void DriverExtMgr::OnStart() +{ + EDM_LOGI(MODULE_DEV_MGR, "hdf_ext_devmgr OnStart"); + DriverPkgManager::GetInstance().Init(); + ExtDeviceManager::GetInstance().Init(); + BusExtensionCore::GetInstance().Init(); +} -void DriverExtMgr::OnStop() {} +void DriverExtMgr::OnStop() +{ + EDM_LOGI(MODULE_DEV_MGR, "hdf_ext_devmgr OnStop"); + delete &(DriverPkgManager::GetInstance()); + delete &(ExtDeviceManager::GetInstance()); + delete &(BusExtensionCore::GetInstance()); +} int DriverExtMgr::Dump(int fd, const std::vector &args) { diff --git a/services/native/driver_extension_manager/src/drivers_pkg_manager/driver_pkg_manager.cpp b/services/native/driver_extension_manager/src/drivers_pkg_manager/driver_pkg_manager.cpp index 21dc77a..c4ee0b4 100644 --- a/services/native/driver_extension_manager/src/drivers_pkg_manager/driver_pkg_manager.cpp +++ b/services/native/driver_extension_manager/src/drivers_pkg_manager/driver_pkg_manager.cpp @@ -13,17 +13,17 @@ * limitations under the License. */ -#include "driver_pkg_manager.h" -#include "usb_bus_extension.h" - -#include #include +#include -#include "common_event_subscribe_info.h" -#include "common_event_support.h" +#include "hdf_log.h" +#include "hilog_wrapper.h" #include "matching_skills.h" +#include "usb_bus_extension.h" +#include "common_event_support.h" +#include "common_event_subscribe_info.h" +#include "driver_pkg_manager.h" -#include "hdf_log.h" namespace OHOS { namespace ExternalDeviceManager { using namespace std; @@ -32,6 +32,8 @@ using namespace OHOS::AAFwk; using namespace OHOS::AppExecFwk; using namespace OHOS::ExternalDeviceManager; +IMPLEMENT_SINGLE_INSTANCE(DriverPkgManager); + DriverPkgManager::DriverPkgManager() { cout << "DriverPkgManager" << endl; @@ -116,10 +118,8 @@ shared_ptr DriverPkgManager::QueryMatchDriver(shared_ptrMatchDriver(val, *devInfo)) { string bundleName = key; - ret->bundleName = - bundleName.substr(0, bundleName.find_first_of(bundleStateCallback_->GetStiching())); - ret->abilityName = - bundleName.substr(bundleName.find_last_of(bundleStateCallback_->GetStiching()) + 1); + ret->bundleName = bundleName.substr(0, bundleName.find_first_of(bundleStateCallback_->GetStiching())); + ret->abilityName = bundleName.substr(bundleName.find_last_of(bundleStateCallback_->GetStiching()) + 1); return ret; } } @@ -201,5 +201,5 @@ int32_t DriverPkgManager::UnRegisterOnBundleUpdate() bundleStateCallback_->m_pFun = nullptr; return EDM_OK; } -} -} \ No newline at end of file +} // namespace ExternalDeviceManager +} // namespace OHOS \ No newline at end of file diff --git a/test/moduletest/bus_extension_core_mt/bus_extension_core_mt.cpp b/test/moduletest/bus_extension_core_mt/bus_extension_core_mt.cpp index 49c527e..1c2e591 100644 --- a/test/moduletest/bus_extension_core_mt/bus_extension_core_mt.cpp +++ b/test/moduletest/bus_extension_core_mt/bus_extension_core_mt.cpp @@ -22,6 +22,9 @@ #include "etx_device_mgr.h" #undef private +constexpr const char *START_TEXT = "Begin to loop and listen usb event:\n\ +enter q to exit.\n\ +enter p to print all usb device."; using namespace OHOS::ExternalDeviceManager; using namespace std; static void PrintAllDevice() @@ -46,6 +49,7 @@ int main(int argc, char **argv) cout << "dlopen libbus_extension.z.so failed" << endl; return -1; } + cout << START_TEXT << endl; BusExtensionCore &core = BusExtensionCore::GetInstance(); size_t size = core.busExtensions_.size(); cout << "busExtensions_.size: " << size << endl; diff --git a/test/unittest/bus_extension_test/src/usb_subscriber_test.cpp b/test/unittest/bus_extension_test/src/usb_subscriber_test.cpp index 037737a..ef68552 100644 --- a/test/unittest/bus_extension_test/src/usb_subscriber_test.cpp +++ b/test/unittest/bus_extension_test/src/usb_subscriber_test.cpp @@ -42,7 +42,6 @@ public: void TearDown() override { cout << "UsbSubscriberTest TearDown" << endl; - delete mockUsb; mockUsb = nullptr; } diff --git a/test/unittest/drivers_pkg_manager_test/src/driver_pkg_manager_test.cpp b/test/unittest/drivers_pkg_manager_test/src/driver_pkg_manager_test.cpp index cb4ca1f..39742d3 100644 --- a/test/unittest/drivers_pkg_manager_test/src/driver_pkg_manager_test.cpp +++ b/test/unittest/drivers_pkg_manager_test/src/driver_pkg_manager_test.cpp @@ -129,44 +129,34 @@ HWTEST_F(DriverPkgManagerTest, DrvExt_QueryMatch_Null_ID_Test, TestSize.Level1) class DriverPkgManagerPtrTest : public testing::Test { public: - DriverPkgManager *drvPkgMgrInstance = nullptr; - void SetUp() override - { - drvPkgMgrInstance = new DriverPkgManager(); - cout << "DriverPkgManagerPtrTest SetUp" << endl; - } - void TearDown() override - { - if (drvPkgMgrInstance != nullptr) { - delete drvPkgMgrInstance; - drvPkgMgrInstance = nullptr; - } - cout << "DriverPkgManagerPtrTest TearDown" << endl; - } + void SetUp() override {} + void TearDown() override {} }; +HWTEST_F(DriverPkgManagerPtrTest, DrvExt_QueryMatch_Before_Init_Test, TestSize.Level1) +{ + DriverPkgManager &drvPkgMgrInstance = DriverPkgManager::GetInstance(); + std::shared_ptr devInfo = std::make_shared(0); + std::shared_ptr bundle = drvPkgMgrInstance.QueryMatchDriver(devInfo); + EXPECT_EQ(nullptr, bundle); + cout << "DrvExt_QueryMatch_Before_Init_Test" << endl; +} + HWTEST_F(DriverPkgManagerPtrTest, DrvExt_New_Test, TestSize.Level1) { - int32_t ret = drvPkgMgrInstance->Init(); + DriverPkgManager &drvPkgMgrInstance = DriverPkgManager::GetInstance(); + bool ret = drvPkgMgrInstance.Init(); if (ret != 0) { EXPECT_EQ(0, ret); return; } - EXPECT_NE(nullptr, drvPkgMgrInstance); + EXPECT_NE(nullptr, &drvPkgMgrInstance); cout << "DrvExt_New_Test" << endl; } -HWTEST_F(DriverPkgManagerPtrTest, DrvExt_QueryMatch_Before_Init_Test, TestSize.Level1) -{ - std::shared_ptr devInfo = std::make_shared( - 0); - std::shared_ptr bundle = drvPkgMgrInstance->QueryMatchDriver(devInfo); - EXPECT_EQ(nullptr, bundle); - cout << "DrvExt_QueryMatch_Before_Init_Test" << endl; -} - HWTEST_F(DriverPkgManagerPtrTest, DrvExt_Delete_Test, TestSize.Level1) { + auto drvPkgMgrInstance = &(DriverPkgManager::GetInstance()); if (drvPkgMgrInstance != nullptr) { delete drvPkgMgrInstance; drvPkgMgrInstance = nullptr; diff --git a/utils/include/ext_object.h b/utils/include/ext_object.h index cb10f00..0279458 100644 --- a/utils/include/ext_object.h +++ b/utils/include/ext_object.h @@ -25,6 +25,7 @@ namespace ExternalDeviceManager { enum BusType : uint32_t { BUS_TYPE_INVALID = 0, BUS_TYPE_USB = 1, + BUS_TYPE_MAX, BUS_TYPE_TEST, }; class IBusExtension; @@ -108,13 +109,15 @@ private: }; class BusExtensionCore { - DECLARE_SINGLE_INSTANCE(BusExtensionCore); + DECLARE_SINGLE_INSTANCE_BASE(BusExtensionCore); public: + ~BusExtensionCore() = default; int32_t Init(); int32_t Register(BusType busType, std::shared_ptr busExtension); private: + BusExtensionCore() = default; std::unordered_map> busExtensions_; const uint32_t MAX_BUS_EXTENSIONS = 100; }; diff --git a/utils/include/single_instance.h b/utils/include/single_instance.h index dc6036f..3ce4ee2 100644 --- a/utils/include/single_instance.h +++ b/utils/include/single_instance.h @@ -35,6 +35,7 @@ private: \ className() = default; \ ~className() = default; +// please remeber release instance #define IMPLEMENT_SINGLE_INSTANCE(className) \ className &className::GetInstance() \ { \ -- Gitee