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);