diff --git a/bluetooth/1.0/default/Android.bp b/bluetooth/1.0/default/Android.bp index fec2264dc4..46a498752b 100644 --- a/bluetooth/1.0/default/Android.bp +++ b/bluetooth/1.0/default/Android.bp @@ -24,6 +24,7 @@ cc_library_shared { "vendor_interface.cc", ], shared_libs: [ + "android.frameworks.schedulerservice@1.0", "android.hardware.bluetooth@1.0", "libbase", "libcutils", @@ -48,6 +49,7 @@ cc_library_static { ], export_include_dirs: ["."], shared_libs: [ + "android.frameworks.schedulerservice@1.0", "liblog", ], } @@ -84,9 +86,11 @@ cc_test { "test", ], shared_libs: [ + "android.frameworks.schedulerservice@1.0", "libbase", "libhidlbase", "liblog", + "libutils", ], static_libs: [ "android.hardware.bluetooth-async", diff --git a/bluetooth/1.0/default/Android.mk b/bluetooth/1.0/default/Android.mk index 38294c77ea..2dcb067677 100644 --- a/bluetooth/1.0/default/Android.mk +++ b/bluetooth/1.0/default/Android.mk @@ -35,5 +35,6 @@ LOCAL_SHARED_LIBRARIES += \ libhidlbase \ libhidltransport \ android.hardware.bluetooth@1.0 \ + android.frameworks.schedulerservice@1.0\ include $(BUILD_EXECUTABLE) diff --git a/bluetooth/1.0/default/async_fd_watcher.cc b/bluetooth/1.0/default/async_fd_watcher.cc index 05ac537230..ab8d55547f 100644 --- a/bluetooth/1.0/default/async_fd_watcher.cc +++ b/bluetooth/1.0/default/async_fd_watcher.cc @@ -14,6 +14,8 @@ // limitations under the License. // +#define LOG_TAG "android.hardware.bluetooth@1.0-impl" + #include "async_fd_watcher.h" #include @@ -22,13 +24,18 @@ #include #include #include +#include #include #include "fcntl.h" #include "sys/select.h" #include "unistd.h" +#include + static const int INVALID_FD = -1; +static const int BT_RT_PRIORITY = 1; + namespace android { namespace hardware { namespace bluetooth { @@ -112,6 +119,21 @@ int AsyncFdWatcher::notifyThread() { } void AsyncFdWatcher::ThreadRoutine() { + using ::android::frameworks::schedulerservice::V1_0::ISchedulingPolicyService; + using ::android::hardware::Return; + sp manager = ISchedulingPolicyService::getService(); + if (manager == nullptr) { + ALOGE("%s: Couldn't get scheduler manager to set SCHED_FIFO.", __func__); + } else { + Return ret = manager->requestPriority(getpid(), + gettid(), + BT_RT_PRIORITY); + if (!ret.isOk() || !ret) { + ALOGE("%s unable to set SCHED_FIFO for pid %d, tid %d", __func__, + getpid(), gettid()); + } + } + while (running_) { fd_set read_fds; FD_ZERO(&read_fds);