Merge "servicemanager: TEST_MAPPING += libbinder tests" into stage-aosp-master
diff --git a/cmds/lshal/Android.bp b/cmds/lshal/Android.bp
index 495cc80..f8b8c68 100644
--- a/cmds/lshal/Android.bp
+++ b/cmds/lshal/Android.bp
@@ -36,6 +36,7 @@
"TableEntry.cpp",
"TextTable.cpp",
"utils.cpp",
+ "WaitCommand.cpp",
],
cflags: [
"-Wall",
diff --git a/cmds/lshal/Lshal.cpp b/cmds/lshal/Lshal.cpp
index 8c83457..132b31e 100644
--- a/cmds/lshal/Lshal.cpp
+++ b/cmds/lshal/Lshal.cpp
@@ -26,7 +26,9 @@
#include <hidl/HidlTransportUtils.h>
#include "DebugCommand.h"
+#include "HelpCommand.h"
#include "ListCommand.h"
+#include "WaitCommand.h"
#include "PipeRelay.h"
namespace android {
@@ -49,6 +51,7 @@
mRegisteredCommands.push_back({std::make_unique<ListCommand>(*this)});
mRegisteredCommands.push_back({std::make_unique<DebugCommand>(*this)});
mRegisteredCommands.push_back({std::make_unique<HelpCommand>(*this)});
+ mRegisteredCommands.push_back({std::make_unique<WaitCommand>(*this)});
}
void Lshal::forEachCommand(const std::function<void(const Command* c)>& f) const {
diff --git a/cmds/lshal/Lshal.h b/cmds/lshal/Lshal.h
index 2679650..830bd87 100644
--- a/cmds/lshal/Lshal.h
+++ b/cmds/lshal/Lshal.h
@@ -24,7 +24,6 @@
#include <utils/StrongPointer.h>
#include "Command.h"
-#include "HelpCommand.h"
#include "NullableOStream.h"
#include "utils.h"
diff --git a/cmds/lshal/WaitCommand.cpp b/cmds/lshal/WaitCommand.cpp
new file mode 100644
index 0000000..65b41b9
--- /dev/null
+++ b/cmds/lshal/WaitCommand.cpp
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "WaitCommand.h"
+
+#include "Lshal.h"
+
+#include <hidl/ServiceManagement.h>
+#include <hidl-util/FQName.h>
+
+namespace android {
+namespace lshal {
+
+std::string WaitCommand::getName() const {
+ return "wait";
+}
+
+std::string WaitCommand::getSimpleDescription() const {
+ return "Wait for HAL to start if it is not already started.";
+}
+
+Status WaitCommand::parseArgs(const Arg &arg) {
+ if (optind + 1 != arg.argc) {
+ return USAGE;
+ }
+
+ mInterfaceName = arg.argv[optind];
+ ++optind;
+ return OK;
+}
+
+Status WaitCommand::main(const Arg &arg) {
+ Status status = parseArgs(arg);
+ if (status != OK) {
+ return status;
+ }
+
+ auto [interface, instance] = splitFirst(mInterfaceName, '/');
+ instance = instance.empty() ? "default" : instance;
+
+ FQName fqName;
+ if (!FQName::parse(interface, &fqName) || fqName.isIdentifier() || !fqName.isFullyQualified()) {
+ mLshal.err() << "Invalid fully-qualified name '" << interface << "'\n\n";
+ return USAGE;
+ }
+
+ using android::hidl::manager::V1_0::IServiceManager;
+
+ using android::hardware::details::getRawServiceInternal;
+ auto service = getRawServiceInternal(interface, instance, true /*retry*/, false /*getStub*/);
+
+ if (service == nullptr) {
+ mLshal.err() << "Service not found (missing permissions or not in VINTF manifest?).\n";
+ return NO_INTERFACE;
+ }
+
+ return OK;
+}
+
+void WaitCommand::usage() const {
+ static const std::string debug =
+ "wait:\n"
+ " lshal wait <interface/instance> \n"
+ " For a HAL that is on the device, wait for the HAL to start.\n"
+ " This will not start a HAL unless it is configured as a lazy HAL.\n"
+ " <interface>: Format is `android.hardware.foo@1.0::IFoo/default`.\n"
+ " If instance name is missing `default` is used.\n";
+
+ mLshal.err() << debug;
+}
+
+} // namespace lshal
+} // namespace android
+
diff --git a/cmds/lshal/WaitCommand.h b/cmds/lshal/WaitCommand.h
new file mode 100644
index 0000000..c9f67c2
--- /dev/null
+++ b/cmds/lshal/WaitCommand.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <string>
+
+#include <android-base/macros.h>
+
+#include "Command.h"
+#include "utils.h"
+
+namespace android {
+namespace lshal {
+
+class Lshal;
+
+class WaitCommand : public Command {
+public:
+ explicit WaitCommand(Lshal &lshal) : Command(lshal) {}
+ ~WaitCommand() = default;
+ Status main(const Arg &arg) override;
+ void usage() const override;
+ std::string getSimpleDescription() const override;
+ std::string getName() const override;
+private:
+ Status parseArgs(const Arg &arg);
+
+ std::string mInterfaceName;
+
+ DISALLOW_COPY_AND_ASSIGN(WaitCommand);
+};
+
+
+} // namespace lshal
+} // namespace android
diff --git a/cmds/servicemanager/main.cpp b/cmds/servicemanager/main.cpp
index c8ceb42..9f6193b 100644
--- a/cmds/servicemanager/main.cpp
+++ b/cmds/servicemanager/main.cpp
@@ -38,14 +38,13 @@
android::base::InitLogging(nullptr, &android::base::KernelLogger);
- ProcessState::self()->initWithDriver(driver);
- ProcessState::self()->setThreadPoolMaxThreadCount(0);
- ProcessState::self()->setCallRestriction(
- ProcessState::CallRestriction::FATAL_IF_NOT_ONEWAY);
+ sp<ProcessState> ps = ProcessState::initWithDriver(driver);
+ ps->setThreadPoolMaxThreadCount(0);
+ ps->setCallRestriction(ProcessState::CallRestriction::FATAL_IF_NOT_ONEWAY);
sp<ServiceManager> manager = new ServiceManager(std::make_unique<Access>());
IPCThreadState::self()->setTheContextObject(manager);
- ProcessState::self()->becomeContextManager(nullptr, nullptr);
+ ps->becomeContextManager(nullptr, nullptr);
IPCThreadState::self()->joinThreadPool();
diff --git a/libs/binder/Android.bp b/libs/binder/Android.bp
index 760d55b..b9c6171 100644
--- a/libs/binder/Android.bp
+++ b/libs/binder/Android.bp
@@ -115,7 +115,6 @@
},
shared_libs: [
- "libbase",
"liblog",
"libcutils",
"libutils",
diff --git a/libs/binder/ProcessState.cpp b/libs/binder/ProcessState.cpp
index 2d156df..b25cd7b 100644
--- a/libs/binder/ProcessState.cpp
+++ b/libs/binder/ProcessState.cpp
@@ -466,7 +466,7 @@
}
}
- LOG_ALWAYS_FATAL_IF(mDriverFD < 0, "Binder driver could not be opened. Terminating.");
+ LOG_ALWAYS_FATAL_IF(mDriverFD < 0, "Binder driver '%s' could not be opened. Terminating.", driver);
}
ProcessState::~ProcessState()
diff --git a/libs/binder/TEST_MAPPING b/libs/binder/TEST_MAPPING
new file mode 100644
index 0000000..91b75c7
--- /dev/null
+++ b/libs/binder/TEST_MAPPING
@@ -0,0 +1,13 @@
+{
+ "presubmit": [
+ {
+ "name": "binderDriverInterfaceTest"
+ },
+ {
+ "name": "binderValueTypeTest"
+ },
+ {
+ "name": "binderTextOutputTest"
+ }
+ ]
+}
diff --git a/libs/binder/tests/Android.bp b/libs/binder/tests/Android.bp
index c451780..14ca821 100644
--- a/libs/binder/tests/Android.bp
+++ b/libs/binder/tests/Android.bp
@@ -26,38 +26,40 @@
cc_test {
name: "binderDriverInterfaceTest_IPC_32",
- srcs: ["binderDriverInterfaceTest.cpp"],
defaults: ["binder_test_defaults"],
+ srcs: ["binderDriverInterfaceTest.cpp"],
compile_multilib: "32",
cflags: ["-DBINDER_IPC_32BIT=1"],
}
cc_test {
+ name: "binderDriverInterfaceTest",
+ defaults: ["binder_test_defaults"],
product_variables: {
binder32bit: {
cflags: ["-DBINDER_IPC_32BIT=1"],
},
},
- name: "binderDriverInterfaceTest",
srcs: ["binderDriverInterfaceTest.cpp"],
- defaults: ["binder_test_defaults"],
+ test_suites: ["device-tests"],
}
cc_test {
name: "binderValueTypeTest",
- srcs: ["binderValueTypeTest.cpp"],
defaults: ["binder_test_defaults"],
+ srcs: ["binderValueTypeTest.cpp"],
shared_libs: [
"libbinder",
"libutils",
],
+ test_suites: ["device-tests"],
}
cc_test {
name: "binderLibTest_IPC_32",
- srcs: ["binderLibTest.cpp"],
defaults: ["binder_test_defaults"],
+ srcs: ["binderLibTest.cpp"],
shared_libs: [
"libbinder",
"libutils",
@@ -67,14 +69,14 @@
}
cc_test {
+ name: "binderLibTest",
+ defaults: ["binder_test_defaults"],
product_variables: {
binder32bit: {
cflags: ["-DBINDER_IPC_32BIT=1"],
},
},
- defaults: ["binder_test_defaults"],
- name: "binderLibTest",
srcs: ["binderLibTest.cpp"],
shared_libs: [
"libbinder",
@@ -84,8 +86,8 @@
cc_test {
name: "binderThroughputTest",
- srcs: ["binderThroughputTest.cpp"],
defaults: ["binder_test_defaults"],
+ srcs: ["binderThroughputTest.cpp"],
shared_libs: [
"libbinder",
"libutils",
@@ -101,19 +103,20 @@
cc_test {
name: "binderTextOutputTest",
- srcs: ["binderTextOutputTest.cpp"],
defaults: ["binder_test_defaults"],
+ srcs: ["binderTextOutputTest.cpp"],
shared_libs: [
"libbinder",
"libutils",
"libbase",
],
+ test_suites: ["device-tests"],
}
cc_test {
name: "schd-dbg",
- srcs: ["schd-dbg.cpp"],
defaults: ["binder_test_defaults"],
+ srcs: ["schd-dbg.cpp"],
shared_libs: [
"libbinder",
"libutils",
@@ -123,8 +126,8 @@
cc_test {
name: "binderSafeInterfaceTest",
- srcs: ["binderSafeInterfaceTest.cpp"],
defaults: ["binder_test_defaults"],
+ srcs: ["binderSafeInterfaceTest.cpp"],
cppflags: [
"-Weverything",
diff --git a/libs/ui/Android.bp b/libs/ui/Android.bp
index 0407d88..2cc6857 100644
--- a/libs/ui/Android.bp
+++ b/libs/ui/Android.bp
@@ -95,7 +95,6 @@
"android.hardware.graphics.mapper@3.0",
"libbase",
"libcutils",
- "libhardware",
"libhidlbase",
"libhidltransport",
"libhwbinder",
diff --git a/libs/vr/libbufferhubqueue/Android.bp b/libs/vr/libbufferhubqueue/Android.bp
index 9f72c05..77c7911 100644
--- a/libs/vr/libbufferhubqueue/Android.bp
+++ b/libs/vr/libbufferhubqueue/Android.bp
@@ -26,10 +26,8 @@
]
sharedLibraries = [
- "libbase",
"libbinder",
"libcutils",
- "libhardware",
"liblog",
"libui",
"libutils",