From 9a4278ece240f0c4a511f77a62d86aa15b755a05 Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Tue, 14 Feb 2023 01:33:39 +0000 Subject: libbinder: warn when vndbinder use is wasted We can't return null, because there may be other calls in the process to ProcessState, but if vndservicemanager is not installed, we can save a few threads. Note: due to logs being broken (b/210919187) early in boot, you may not be able to see logs for this. Bug: 264617136 Test: check logs, e.g. 02-14 01:31:57.034 3273 3273 E ProcessState: vndservicemanager is not started on this device, you can save resources/threads by not initializing ProcessState with /dev/vndbinder. Change-Id: Ie91dc4ee302e7a36184e533fb755ce0870e2f546 --- libs/binder/ProcessState.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'libs/binder/ProcessState.cpp') diff --git a/libs/binder/ProcessState.cpp b/libs/binder/ProcessState.cpp index 254dda81a6..5f1f50672a 100644 --- a/libs/binder/ProcessState.cpp +++ b/libs/binder/ProcessState.cpp @@ -100,6 +100,10 @@ static void verifyNotForked(bool forked) { LOG_ALWAYS_FATAL_IF(forked, "libbinder ProcessState can not be used after fork"); } +bool ProcessState::isVndservicemanagerEnabled() { + return access("/vendor/bin/vndservicemanager", R_OK) == 0; +} + sp ProcessState::init(const char *driver, bool requireDefault) { #ifdef BINDER_IPC_32BIT @@ -123,6 +127,11 @@ sp ProcessState::init(const char *driver, bool requireDefault) driver = "/dev/binder"; } + if (0 == strcmp(driver, "/dev/vndbinder") && !isVndservicemanagerEnabled()) { + ALOGE("vndservicemanager is not started on this device, you can save resources/threads " + "by not initializing ProcessState with /dev/vndbinder."); + } + // we must install these before instantiating the gProcess object, // otherwise this would race with creating it, and there could be the // possibility of an invalid gProcess object forked by another thread -- cgit v1.2.3-59-g8ed1b