Merge "Make BT HAL audio threads RT" into oc-dev am: 240371c7b2
am: 2470b1b033

Change-Id: I9f95b3aa21671689406cf01aeb6920ee3ff49639
diff --git a/bluetooth/1.0/default/Android.bp b/bluetooth/1.0/default/Android.bp
index fec2264..46a4987 100644
--- a/bluetooth/1.0/default/Android.bp
+++ b/bluetooth/1.0/default/Android.bp
@@ -24,6 +24,7 @@
         "vendor_interface.cc",
     ],
     shared_libs: [
+        "android.frameworks.schedulerservice@1.0",
         "android.hardware.bluetooth@1.0",
         "libbase",
         "libcutils",
@@ -48,6 +49,7 @@
     ],
     export_include_dirs: ["."],
     shared_libs: [
+        "android.frameworks.schedulerservice@1.0",
         "liblog",
     ],
 }
@@ -84,9 +86,11 @@
         "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 38294c7..2dcb067 100644
--- a/bluetooth/1.0/default/Android.mk
+++ b/bluetooth/1.0/default/Android.mk
@@ -35,5 +35,6 @@
   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 05ac537..ab8d555 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 <algorithm>
@@ -22,13 +24,18 @@
 #include <map>
 #include <mutex>
 #include <thread>
+#include <utils/Log.h>
 #include <vector>
 #include "fcntl.h"
 #include "sys/select.h"
 #include "unistd.h"
 
+#include <android/frameworks/schedulerservice/1.0/ISchedulingPolicyService.h>
+
 static const int INVALID_FD = -1;
 
+static const int BT_RT_PRIORITY = 1;
+
 namespace android {
 namespace hardware {
 namespace bluetooth {
@@ -112,6 +119,21 @@
 }
 
 void AsyncFdWatcher::ThreadRoutine() {
+  using ::android::frameworks::schedulerservice::V1_0::ISchedulingPolicyService;
+  using ::android::hardware::Return;
+  sp<ISchedulingPolicyService> manager = ISchedulingPolicyService::getService();
+  if (manager == nullptr) {
+    ALOGE("%s: Couldn't get scheduler manager to set SCHED_FIFO.", __func__);
+  } else {
+    Return<bool> 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);