aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-15 00:43:26 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-15 00:43:26 +0000
commitd0578dc703a1b0f7af53ad40c50c3ef2cf14feb8 (patch)
tree2449c76b3be543273c376d9811f2b2ed2daea0fb
parent9ee1f6e341b21dc1b3374c16f449cec319b573c3 (diff)
parentdd6812f5375184cafc2834da6d5e4208b2f821ca (diff)
downloadchre-android14-qpr2-s2-release.tar.gz
Change-Id: Ib0a54f61691294c3175420764ffe0263020c868d
-rw-r--r--host/hal_generic/common/hal_client_manager.cc19
-rw-r--r--host/hal_generic/common/hal_client_manager.h15
-rw-r--r--host/test/hal_generic/common/hal_client_manager_test.cc13
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());