diff options
author | Yi-Yo Chiang <yochiang@google.com> | 2022-08-09 20:09:19 +0800 |
---|---|---|
committer | Yi-Yo Chiang <yochiang@google.com> | 2022-08-10 14:39:02 +0800 |
commit | 457b9c773b25a9754fb2bc67780307d55fec02c7 (patch) | |
tree | b3e036517c6509fc92669595e9c343439c72947e | |
parent | 6c1043f18e2f825780c3af91a5567a5915ba04b8 (diff) | |
download | gsid-457b9c773b25a9754fb2bc67780307d55fec02c7.tar.gz |
libgsid: Document quirks of GetGsiService()
GetGsiService() blocks for at least one full second if the caller
(binder client) didn't start a threadpool.
Document this quirk in the header so future users don't fall into this
performance pitfall.
Make libgsid actually include libgsid.h. This fixes codesearch cross
reference, I hope.
Bug: 241739850
Test: Presubmit
Change-Id: Ic846b2d9d8aeb09afe06deec65b0ad6ea2f57186
-rw-r--r-- | daemon.cpp | 2 | ||||
-rw-r--r-- | gsi_service.cpp | 4 | ||||
-rw-r--r-- | gsi_service.h | 2 | ||||
-rw-r--r-- | gsi_tool.cpp | 3 | ||||
-rw-r--r-- | include/libgsi/libgsi.h | 2 | ||||
-rw-r--r-- | include/libgsi/libgsid.h | 4 | ||||
-rw-r--r-- | libgsid.cpp | 2 |
7 files changed, 12 insertions, 7 deletions
@@ -65,7 +65,7 @@ int main(int argc, char** argv) { } } - android::gsi::GsiService::Register(); + android::gsi::GsiService::Register(android::gsi::kGsiServiceName); { sp<ProcessState> ps(ProcessState::self()); ps->startThreadPool(); diff --git a/gsi_service.cpp b/gsi_service.cpp index 10bbb51..75f9286 100644 --- a/gsi_service.cpp +++ b/gsi_service.cpp @@ -87,10 +87,10 @@ GsiService::GsiService() { progress_ = {}; } -void GsiService::Register() { +void GsiService::Register(const std::string& name) { auto lazyRegistrar = LazyServiceRegistrar::getInstance(); android::sp<GsiService> service = new GsiService(); - auto ret = lazyRegistrar.registerService(service, kGsiServiceName); + auto ret = lazyRegistrar.registerService(service, name); if (ret != android::OK) { LOG(FATAL) << "Could not register gsi service: " << ret; diff --git a/gsi_service.h b/gsi_service.h index c50c101..3c4c278 100644 --- a/gsi_service.h +++ b/gsi_service.h @@ -36,7 +36,7 @@ namespace gsi { class GsiService : public BinderService<GsiService>, public BnGsiService { public: - static void Register(); + static void Register(const std::string& name); binder::Status openInstall(const std::string& install_dir, int* _aidl_return) override; binder::Status closeInstall(int32_t* _aidl_return) override; diff --git a/gsi_tool.cpp b/gsi_tool.cpp index a6a79a5..181452b 100644 --- a/gsi_tool.cpp +++ b/gsi_tool.cpp @@ -35,6 +35,7 @@ #include <android-base/strings.h> #include <android-base/unique_fd.h> #include <android/gsi/IGsiService.h> +#include <binder/ProcessState.h> #include <cutils/android_reboot.h> #include <libgsi/libgsi.h> #include <libgsi/libgsid.h> @@ -714,6 +715,8 @@ static int usage(int /* argc */, char* argv[]) { int main(int argc, char** argv) { android::base::InitLogging(argv, android::base::StderrLogger, android::base::DefaultAborter); + // Start a threadpool to service waitForService() callbacks. + android::ProcessState::self()->startThreadPool(); android::sp<IGsiService> service = GetGsiService(); if (!service) { return EX_SOFTWARE; diff --git a/include/libgsi/libgsi.h b/include/libgsi/libgsi.h index 41898df..5318341 100644 --- a/include/libgsi/libgsi.h +++ b/include/libgsi/libgsi.h @@ -24,8 +24,6 @@ namespace android { namespace gsi { -static constexpr char kGsiServiceName[] = "gsiservice"; - #define DSU_METADATA_PREFIX "/metadata/gsi/dsu/" // These files need to be globally readable so that fs_mgr_fstab, which is diff --git a/include/libgsi/libgsid.h b/include/libgsi/libgsid.h index 46f8ef5..1229ce7 100644 --- a/include/libgsi/libgsid.h +++ b/include/libgsi/libgsid.h @@ -21,6 +21,10 @@ namespace android { namespace gsi { +static constexpr char kGsiServiceName[] = "gsiservice"; + +// Caller should start a threadpool before calling this method, otherwise waitForService() could +// block for at least 1 second. android::sp<IGsiService> GetGsiService(); } // namespace gsi diff --git a/libgsid.cpp b/libgsid.cpp index 23eeae4..4689dcd 100644 --- a/libgsid.cpp +++ b/libgsid.cpp @@ -17,7 +17,7 @@ #include <android-base/logging.h> #include <android/gsi/IGsiService.h> #include <binder/IServiceManager.h> -#include <libgsi/libgsi.h> +#include <libgsi/libgsid.h> namespace android { namespace gsi { |