diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-15 00:43:26 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-15 00:43:26 +0000 |
commit | d0578dc703a1b0f7af53ad40c50c3ef2cf14feb8 (patch) | |
tree | 2449c76b3be543273c376d9811f2b2ed2daea0fb | |
parent | 9ee1f6e341b21dc1b3374c16f449cec319b573c3 (diff) | |
parent | dd6812f5375184cafc2834da6d5e4208b2f821ca (diff) | |
download | chre-android14-qpr2-release.tar.gz |
Snap for 11220357 from dd6812f5375184cafc2834da6d5e4208b2f821ca to 24Q1-releaseandroid-14.0.0_r33android-14.0.0_r32android-14.0.0_r31android-14.0.0_r30android-14.0.0_r29android14-qpr2-s3-releaseandroid14-qpr2-s2-releaseandroid14-qpr2-s1-releaseandroid14-qpr2-release
Change-Id: Ib0a54f61691294c3175420764ffe0263020c868d
-rw-r--r-- | host/hal_generic/common/hal_client_manager.cc | 19 | ||||
-rw-r--r-- | host/hal_generic/common/hal_client_manager.h | 15 | ||||
-rw-r--r-- | host/test/hal_generic/common/hal_client_manager_test.cc | 13 |
3 files changed, 37 insertions, 10 deletions
diff --git a/host/hal_generic/common/hal_client_manager.cc b/host/hal_generic/common/hal_client_manager.cc index da114044..4658c837 100644 --- a/host/hal_generic/common/hal_client_manager.cc +++ b/host/hal_generic/common/hal_client_manager.cc @@ -54,6 +54,12 @@ std::string getUuid(const std::shared_ptr<IContextHubCallback> &callback) { return oStringStream.str(); } +std::string getName(const std::shared_ptr<IContextHubCallback> &callback) { + std::string name; + callback->getName(&name); + return name; +} + bool isCallbackV3Enabled(const std::shared_ptr<IContextHubCallback> &callback) { int32_t callbackVersion; callback->getInterfaceVersion(&callbackVersion); @@ -117,13 +123,18 @@ bool HalClientManager::createClientLocked( mClients.size()); return false; } - mClients.emplace_back(uuid, mNextClientId, pid, callback, + std::string name{"undefined"}; + if (isCallbackV3Enabled(callback)) { + name = getName(callback); + } + mClients.emplace_back(uuid, name, mNextClientId, pid, callback, deathRecipientCookie); // Update the json list with the new mapping Json::Value mappings; for (const auto &client : mClients) { Json::Value mapping; mapping[kJsonUuid] = client.uuid; + mapping[kJsonName] = client.name; mapping[kJsonClientId] = client.clientId; mappings.append(mapping); } @@ -474,13 +485,15 @@ HalClientManager::HalClientManager( } else { for (int i = 0; i < mappings.size(); i++) { Json::Value mapping = mappings[i]; - if (!mapping.isMember(kJsonClientId) || !mapping.isMember(kJsonUuid)) { + if (!mapping.isMember(kJsonClientId) || !mapping.isMember(kJsonUuid) || + !mapping.isMember(kJsonName)) { LOGE("Unable to find expected key name for the entry %d", i); continue; } std::string uuid = mapping[kJsonUuid].asString(); + std::string name = mapping[kJsonName].asString(); auto clientId = static_cast<HalClientId>(mapping[kJsonClientId].asUInt()); - mClients.emplace_back(uuid, clientId); + mClients.emplace_back(uuid, name, clientId); } } updateNextClientIdLocked(); diff --git a/host/hal_generic/common/hal_client_manager.h b/host/hal_generic/common/hal_client_manager.h index 1590b7d1..80f20896 100644 --- a/host/hal_generic/common/hal_client_manager.h +++ b/host/hal_generic/common/hal_client_manager.h @@ -89,15 +89,18 @@ class HalClientManager { struct HalClient { static constexpr pid_t PID_UNSET = 0; - explicit HalClient(const std::string &uuid, const HalClientId clientId) - : HalClient(uuid, clientId, /* pid= */ PID_UNSET, + explicit HalClient(const std::string &uuid, const std::string &name, + const HalClientId clientId) + : HalClient(uuid, name, clientId, /* pid= */ PID_UNSET, /* callback= */ nullptr, /* deathRecipientCookie= */ nullptr) {} - explicit HalClient(std::string uuid, const HalClientId clientId, pid_t pid, + explicit HalClient(std::string uuid, std::string name, + const HalClientId clientId, pid_t pid, const std::shared_ptr<IContextHubCallback> &callback, void *deathRecipientCookie) : uuid{std::move(uuid)}, + name{std::move(name)}, clientId{clientId}, pid{pid}, callback{callback}, @@ -114,6 +117,7 @@ class HalClientManager { } const std::string uuid; + std::string name; const HalClientId clientId; pid_t pid{}; std::shared_ptr<IContextHubCallback> callback{}; @@ -313,6 +317,7 @@ class HalClientManager { static constexpr char kVendorClientUuid[] = "vendor-client"; static constexpr char kJsonClientId[] = "ClientId"; static constexpr char kJsonUuid[] = "uuid"; + static constexpr char kJsonName[] = "name"; static constexpr int64_t kTransactionTimeoutThresholdMs = 5000; // 5 seconds static constexpr HostEndpointId kMaxVendorEndpointId = (1 << kNumOfBitsForEndpointId) - 1; @@ -444,7 +449,7 @@ class HalClientManager { DeadClientUnlinker mDeadClientUnlinker{}; - std::string mClientMappingFilePath{}; + std::string mClientMappingFilePath; // next available client id HalClientId mNextClientId = ::chre::kHostClientIdUnspecified; @@ -455,7 +460,7 @@ class HalClientManager { // The lock guarding the access to clients' states and pending transactions std::mutex mLock; - std::vector<HalClient> mClients{}; + std::vector<HalClient> mClients; // States tracking pending transactions std::optional<PendingLoadTransaction> mPendingLoadTransaction = std::nullopt; diff --git a/host/test/hal_generic/common/hal_client_manager_test.cc b/host/test/hal_generic/common/hal_client_manager_test.cc index 6236db71..b8e7a5f9 100644 --- a/host/test/hal_generic/common/hal_client_manager_test.cc +++ b/host/test/hal_generic/common/hal_client_manager_test.cc @@ -59,7 +59,7 @@ constexpr pid_t kVendorPid = 1001; const std::string kVendorUuid = "6e406b36cf4f4c0d8183db3708f45d8f"; const std::string kClientIdMappingFilePath = "./chre_hal_clients.json"; -const std::string kClientName = "HalClientManagerUnitTest"; +const std::string kClientName = "HalClientManagerTest"; class ContextHubCallbackForTest : public BnContextHubCallback { public: @@ -114,6 +114,7 @@ class ContextHubCallbackForTest : public BnContextHubCallback { } private: + const std::string kClientName = "HalClientManagerUnitTest"; std::array<uint8_t, 16> mUuid{}; }; @@ -132,7 +133,10 @@ class HalClientManagerForTest : public HalClientManager { bool createClientForTest(const std::string &uuid, pid_t pid) { // No need to hold the lock during a unit test which is single-threaded - return createClientLocked(uuid, pid, /* callback= */ nullptr, + std::shared_ptr<ContextHubCallbackForTest> callback = + ContextHubCallbackForTest::make<ContextHubCallbackForTest>( + kSystemServerUuid); + return createClientLocked(uuid, pid, callback, /* deathRecipientCookie= */ nullptr); } @@ -151,6 +155,10 @@ class HalClientManagerForTest : public HalClientManager { static const char *getUuidTag() { return kJsonUuid; } + + static const char *getNameTag() { + return kJsonName; + } }; class HalClientManagerTest : public ::testing::Test { @@ -187,6 +195,7 @@ TEST_F(HalClientManagerTest, ClientIdMappingFile) { Json::Value mapping; mapping[HalClientManagerForTest::getClientIdTag()] = systemClientId; mapping[HalClientManagerForTest::getUuidTag()] = kSystemServerUuid; + mapping[HalClientManagerForTest::getNameTag()] = kClientName; mappings.append(mapping); Json::StreamWriterBuilder factory; std::unique_ptr<Json::StreamWriter> const writer(factory.newStreamWriter()); |