diff options
Diffstat (limited to 'chromeos/binder_watcher.cc')
-rw-r--r-- | chromeos/binder_watcher.cc | 58 |
1 files changed, 58 insertions, 0 deletions
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 |