aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.mk32
-rw-r--r--chromeos/binder_watcher.cc58
-rw-r--r--chromeos/binder_watcher.h47
3 files changed, 131 insertions, 6 deletions
diff --git a/Android.mk b/Android.mk
index 14d3638..a68f68e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -38,7 +38,10 @@ libchromeos_core_sources := \
chromeos/strings/string_utils.cc \
chromeos/syslog_logging.cc \
chromeos/type_name_undecorate.cc \
- chromeos/url_utils.cc
+ chromeos/url_utils.cc \
+
+libchromeos_binder_sources := \
+ chromeos/binder_watcher.cc \
libchromeos_dbus_sources := \
chromeos/any.cc \
@@ -52,7 +55,7 @@ libchromeos_dbus_sources := \
chromeos/dbus/dbus_signal.cc \
chromeos/dbus/exported_object_manager.cc \
chromeos/dbus/exported_property_set.cc \
- chromeos/dbus/utils.cc
+ chromeos/dbus/utils.cc \
libchromeos_http_sources := \
chromeos/http/curl_api.cc \
@@ -61,11 +64,11 @@ libchromeos_http_sources := \
chromeos/http/http_request.cc \
chromeos/http/http_transport.cc \
chromeos/http/http_transport_curl.cc \
- chromeos/http/http_utils.cc
+ chromeos/http/http_utils.cc \
libchromeos_policy_sources := \
policy/device_policy.cc \
- policy/libpolicy.cc
+ policy/libpolicy.cc \
libchromeos_stream_sources := \
chromeos/streams/file_stream.cc \
@@ -76,7 +79,7 @@ libchromeos_stream_sources := \
chromeos/streams/stream.cc \
chromeos/streams/stream_errors.cc \
chromeos/streams/stream_utils.cc \
- chromeos/streams/tls_stream.cc
+ chromeos/streams/tls_stream.cc \
libchromeos_test_helpers_sources := \
chromeos/http/http_connection_fake.cc \
@@ -101,6 +104,7 @@ libchromeos_test_sources := \
chromeos/map_utils_unittest.cc \
chromeos/message_loops/fake_message_loop_unittest.cc \
chromeos/mime_utils_unittest.cc \
+ chromeos/process_reaper_unittest.cc \
chromeos/process_unittest.cc \
chromeos/secure_blob_unittest.cc \
chromeos/streams/fake_stream_unittest.cc \
@@ -112,7 +116,7 @@ libchromeos_test_sources := \
chromeos/streams/stream_unittest.cc \
chromeos/streams/stream_utils_unittest.cc \
chromeos/strings/string_utils_unittest.cc \
- chromeos/url_utils_unittest.cc
+ chromeos/url_utils_unittest.cc \
libchromeos_CFLAGS := -Wall \
-Wno-char-subscripts -Wno-missing-field-initializers \
@@ -138,6 +142,22 @@ LOCAL_CLANG := true
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
include $(BUILD_SHARED_LIBRARY)
+# Shared binder library for target
+# ========================================================
+include $(CLEAR_VARS)
+LOCAL_CPP_EXTENSION := $(libchromeos_cpp_extension)
+LOCAL_MODULE := libchromeos-binder
+LOCAL_SRC_FILES := $(libchromeos_binder_sources)
+LOCAL_C_INCLUDES := $(libchromeos_includes)
+LOCAL_SHARED_LIBRARIES := $(libchromeos_shared_libraries) \
+ libbinder libutils
+LOCAL_CFLAGS := $(libchromeos_CFLAGS)
+LOCAL_CPPFLAGS := $(libchromeos_CPPFLAGS)
+LOCAL_RTTI_FLAG := -frtti
+LOCAL_CLANG := true
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
+include $(BUILD_SHARED_LIBRARY)
+
# Shared dbus library for target
# ========================================================
include $(CLEAR_VARS)
diff --git a/chromeos/binder_watcher.cc b/chromeos/binder_watcher.cc
new file mode 100644
index 0000000..30e7754
--- /dev/null
+++ b/chromeos/binder_watcher.cc
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2015 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 <chromeos/binder_watcher.h>
+
+#include <base/logging.h>
+#include <binder/IPCThreadState.h>
+#include <binder/ProcessState.h>
+
+using android::IPCThreadState;
+using android::ProcessState;
+
+namespace chromeos {
+
+BinderWatcher::BinderWatcher() = default;
+
+BinderWatcher::~BinderWatcher() = default;
+
+bool BinderWatcher::Init() {
+ int binder_fd = -1;
+ ProcessState::self()->setThreadPoolMaxThreadCount(0);
+ IPCThreadState::self()->disableBackgroundScheduling(true);
+ IPCThreadState::self()->setupPolling(&binder_fd);
+ LOG(INFO) << "Got binder FD " << binder_fd;
+ if (binder_fd < 0)
+ return false;
+
+ if (!base::MessageLoopForIO::current()->WatchFileDescriptor(
+ binder_fd, true /* persistent */, base::MessageLoopForIO::WATCH_READ,
+ &watcher_, this)) {
+ LOG(ERROR) << "Failed to watch binder FD";
+ return false;
+ }
+ return true;
+}
+
+void BinderWatcher::OnFileCanReadWithoutBlocking(int fd) {
+ IPCThreadState::self()->handlePolledCommands();
+}
+
+void BinderWatcher::OnFileCanWriteWithoutBlocking(int fd) {
+ NOTREACHED() << "Unexpected writable notification for FD " << fd;
+}
+
+} // namespace chromeos
diff --git a/chromeos/binder_watcher.h b/chromeos/binder_watcher.h
new file mode 100644
index 0000000..198f4f8
--- /dev/null
+++ b/chromeos/binder_watcher.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2015 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.
+ */
+
+#ifndef LIBCHROMEOS_CHROMEOS_BINDER_WATCHER_H_
+#define LIBCHROMEOS_CHROMEOS_BINDER_WATCHER_H_
+
+#include <base/macros.h>
+#include <base/message_loop/message_loop.h>
+
+namespace chromeos {
+
+// Bridge between libbinder and base::MessageLoop. Construct at startup to make
+// the message loop watch for binder events and pass them to libbinder.
+class BinderWatcher : public base::MessageLoopForIO::Watcher {
+ public:
+ BinderWatcher();
+ ~BinderWatcher() override;
+
+ // Initializes the object, returning true on success.
+ bool Init();
+
+ // base::MessageLoopForIO::Watcher:
+ void OnFileCanReadWithoutBlocking(int fd) override;
+ void OnFileCanWriteWithoutBlocking(int fd) override;
+
+ private:
+ base::MessageLoopForIO::FileDescriptorWatcher watcher_;
+
+ DISALLOW_COPY_AND_ASSIGN(BinderWatcher);
+};
+
+} // namespace chromeos
+
+#endif // LIBCHROMEOS_CHROMEOS_BINDER_WATCHER_H_