Merge "libhidl_test: fatal -> error warning"
diff --git a/base/include/hidl/HidlInternal.h b/base/include/hidl/HidlInternal.h
index 3cd246a..3d1a444 100644
--- a/base/include/hidl/HidlInternal.h
+++ b/base/include/hidl/HidlInternal.h
@@ -201,7 +201,10 @@
// A list of registered instrumentation callbacks.
std::vector<InstrumentationCallback> mInstrumentationCallbacks;
// Flag whether to enable instrumentation.
- bool mEnableInstrumentation;
+ union {
+ bool mEnableInstrumentation;
+ void* mReserved0;
+ };
// Prefix to lookup the instrumentation libraries.
std::string mInstrumentationLibPackage;
// Used for dlsym to load the profiling method for given interface.
@@ -209,6 +212,12 @@
};
+#ifdef __LP64__
+static_assert(sizeof(HidlInstrumentor) == 88, "HidlInstrumentor size frozen by prebuilts");
+#else
+static_assert(sizeof(HidlInstrumentor) == 44, "HidlInstrumentor size frozen by prebuilts");
+#endif
+
} // namespace details
} // namespace hardware
} // namespace android
diff --git a/transport/HidlLazyUtils.cpp b/transport/HidlLazyUtils.cpp
index ce37dd0..be7470f 100644
--- a/transport/HidlLazyUtils.cpp
+++ b/transport/HidlLazyUtils.cpp
@@ -40,8 +40,7 @@
void reRegister();
- void setActiveServicesCountCallback(
- const std::function<bool(int)>& activeServicesCountCallback);
+ void setActiveServicesCallback(const std::function<bool(bool)>& activeServicesCallback);
protected:
Return<void> onClients(const sp<IBase>& service, bool clients) override;
@@ -80,7 +79,12 @@
/**
* Callback for reporting the number of services with clients.
*/
- std::function<bool(int)> mActiveServicesCountCallback;
+ std::function<bool(bool)> mActiveServicesCallback;
+
+ /**
+ * Previous value passed to the active services callback.
+ */
+ std::optional<bool> mPreviousHasClients;
};
class LazyServiceRegistrarImpl {
@@ -91,8 +95,7 @@
const std::string& name);
bool tryUnregister();
void reRegister();
- void setActiveServicesCountCallback(
- const std::function<bool(int)>& activeServicesCountCallback);
+ void setActiveServicesCallback(const std::function<bool(bool)>& activeServicesCallback);
private:
sp<ClientCounterCallback> mClientCallback;
@@ -166,8 +169,12 @@
<< "/" << registered.name << " has clients: " << clients;
bool handledInCallback = false;
- if (mActiveServicesCountCallback != nullptr) {
- handledInCallback = mActiveServicesCountCallback(numWithClients);
+ if (mActiveServicesCallback != nullptr) {
+ bool hasClients = numWithClients != 0;
+ if (hasClients != mPreviousHasClients) {
+ handledInCallback = mActiveServicesCallback(hasClients);
+ mPreviousHasClients = hasClients;
+ }
}
// If there is no callback defined or the callback did not handle this
@@ -229,9 +236,9 @@
reRegister();
}
-void ClientCounterCallback::setActiveServicesCountCallback(
- const std::function<bool(int)>& activeServicesCountCallback) {
- mActiveServicesCountCallback = activeServicesCountCallback;
+void ClientCounterCallback::setActiveServicesCallback(
+ const std::function<bool(bool)>& activeServicesCallback) {
+ mActiveServicesCallback = activeServicesCallback;
}
status_t LazyServiceRegistrarImpl::registerService(
@@ -251,9 +258,9 @@
mClientCallback->reRegister();
}
-void LazyServiceRegistrarImpl::setActiveServicesCountCallback(
- const std::function<bool(int)>& activeServicesCountCallback) {
- mClientCallback->setActiveServicesCountCallback(activeServicesCountCallback);
+void LazyServiceRegistrarImpl::setActiveServicesCallback(
+ const std::function<bool(bool)>& activeServicesCallback) {
+ mClientCallback->setActiveServicesCallback(activeServicesCallback);
}
} // namespace details
@@ -280,9 +287,9 @@
mImpl->reRegister();
}
-void LazyServiceRegistrar::setActiveServicesCountCallback(
- const std::function<bool(int)>& activeServicesCountCallback) {
- mImpl->setActiveServicesCountCallback(activeServicesCountCallback);
+void LazyServiceRegistrar::setActiveServicesCallback(
+ const std::function<bool(bool)>& activeServicesCallback) {
+ mImpl->setActiveServicesCallback(activeServicesCallback);
}
} // namespace hardware
diff --git a/transport/ServiceManagement.cpp b/transport/ServiceManagement.cpp
index 8122324..b51c600 100644
--- a/transport/ServiceManagement.cpp
+++ b/transport/ServiceManagement.cpp
@@ -183,70 +183,8 @@
return *getTrebleTestingOverridePtr();
}
-/*
- * Returns the age of the current process by reading /proc/self/stat and comparing starttime to the
- * current time. This is useful for measuring how long it took a HAL to register itself.
- */
-__attribute__((noinline)) static long getProcessAgeMs() {
- constexpr const int PROCFS_STAT_STARTTIME_INDEX = 21;
- std::string content;
- if (!android::base::ReadFileToString("/proc/self/stat", &content, false)) {
- LOG(ERROR) << "Process age: Could not read /proc/self/stat";
- return -1;
- }
-
- std::vector<std::string> stats = android::base::Split(content, " ");
- if (PROCFS_STAT_STARTTIME_INDEX >= stats.size()) {
- LOG(ERROR) << "Process age: Could not read starttime from /proc/self/stat";
- return -1;
- }
-
- const std::string& startTimeString = stats.at(PROCFS_STAT_STARTTIME_INDEX);
- unsigned long long startTimeInClockTicks = 0;
- if (!android::base::ParseUint(startTimeString, &startTimeInClockTicks)) {
- LOG(ERROR) << "Process age: Could not parse start time: " << startTimeString;
- return -1;
- }
-
- const int64_t ticksPerSecond = sysconf(_SC_CLK_TCK);
- if (ticksPerSecond <= 0) {
- LOG(ERROR) << "Process age: Invalid _SC_CLK_TCK: " << ticksPerSecond;
- return -1;
- }
-
- const int64_t uptime = android::uptimeMillis();
- if (uptime < 0) {
- LOG(ERROR) << "Process age: Invalid uptime: " << uptime;
- return -1;
- }
-
- unsigned long long startTimeTicks;
- if (__builtin_umulll_overflow(1000ULL, startTimeInClockTicks, &startTimeTicks)) {
- LOG(ERROR) << "Process age: Too many ticks, overflow: " << startTimeInClockTicks;
- return -1;
- }
-
- long startTimeMs = startTimeTicks / ticksPerSecond;
- if (startTimeMs >= uptime) {
- LOG(ERROR) << "Process age: process started in future: " << startTimeMs << " after "
- << uptime;
- return -1;
- }
-
- return uptime - startTimeMs;
-}
-
static void onRegistrationImpl(const std::string& descriptor, const std::string& instanceName) {
- long halStartDelay = getProcessAgeMs();
- if (halStartDelay >= 0) {
- // The "start delay" printed here is an estimate of how long it took the HAL to go from
- // process creation to registering itself as a HAL. Actual start time could be longer
- // because the process might not have joined the threadpool yet, so it might not be ready to
- // process transactions.
- LOG(INFO) << "Registered " << descriptor << "/" << instanceName << " (start delay of "
- << halStartDelay << "ms)";
- }
-
+ LOG(INFO) << "Registered " << descriptor << "/" << instanceName;
tryShortenProcessName(descriptor);
}
@@ -901,7 +839,13 @@
if (kEnforceVintfManifest && !isTrebleTestingOverride()) {
using Transport = IServiceManager1_0::Transport;
- Transport transport = sm->getTransport(descriptor, name);
+ Return<Transport> transport = sm->getTransport(descriptor, name);
+
+ if (!transport.isOk()) {
+ LOG(ERROR) << "Could not get transport for " << descriptor << "/" << name << ": "
+ << transport.description();
+ return UNKNOWN_ERROR;
+ }
if (transport != Transport::HWBINDER) {
LOG(ERROR) << "Service " << descriptor << "/" << name
diff --git a/transport/include/hidl/HidlLazyUtils.h b/transport/include/hidl/HidlLazyUtils.h
index 44fbcb2..427611b 100644
--- a/transport/include/hidl/HidlLazyUtils.h
+++ b/transport/include/hidl/HidlLazyUtils.h
@@ -44,10 +44,10 @@
status_t registerService(const sp<::android::hidl::base::V1_0::IBase>& service,
const std::string& name = "default");
/**
- * Set a callback that is executed when the total number of services with
- * clients changes.
- * The callback takes an argument, which is the number of registered
- * lazy HALs for this process which have clients.
+ * Set a callback that is invoked when the active HAL count (i.e. HALs with clients)
+ * registered with this process drops to zero (or becomes nonzero).
+ * The callback takes a boolean argument, which is 'true' if there is
+ * at least one HAL with clients.
*
* Callback return value:
* - false: Default behavior for lazy HALs (shut down the process if there
@@ -61,8 +61,7 @@
*
* This method should be called before 'registerService' to avoid races.
*/
- void setActiveServicesCountCallback(
- const std::function<bool(int)>& activeServicesCountCallback);
+ void setActiveServicesCallback(const std::function<bool(bool)>& activeServicesCallback);
/**
* Try to unregister all services previously registered with 'registerService'.