CameraService: Use SCHED_FIFO for request queue thread in HFR

- Move SchedulingPolicyService from audioservice to mediautils

- When starting up a high speed stream config, set request queue thread
  to SCHED_FIFO using SchedulingPolicyService

Bug: 24227252
Change-Id: I224b59142bd111caf563779f55cddd62385b9bac
diff --git a/services/audioflinger/Android.mk b/services/audioflinger/Android.mk
index debcdf9..9b4ba79 100644
--- a/services/audioflinger/Android.mk
+++ b/services/audioflinger/Android.mk
@@ -3,17 +3,6 @@
 include $(CLEAR_VARS)
 
 LOCAL_SRC_FILES := \
-    ISchedulingPolicyService.cpp \
-    SchedulingPolicyService.cpp
-
-# FIXME Move this library to frameworks/native
-LOCAL_MODULE := libscheduling_policy
-
-include $(BUILD_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
     ServiceUtilities.cpp
 
 # FIXME Move this library to frameworks/native
@@ -64,10 +53,10 @@
     libeffects \
     libpowermanager \
     libserviceutility \
-    libsonic
+    libsonic \
+    libmediautils
 
 LOCAL_STATIC_LIBRARIES := \
-    libscheduling_policy \
     libcpustats \
     libmedia_helper
 
diff --git a/services/audioflinger/ISchedulingPolicyService.cpp b/services/audioflinger/ISchedulingPolicyService.cpp
deleted file mode 100644
index f55bc02..0000000
--- a/services/audioflinger/ISchedulingPolicyService.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-#define LOG_TAG "ISchedulingPolicyService"
-//#define LOG_NDEBUG 0
-
-#include <binder/Parcel.h>
-#include "ISchedulingPolicyService.h"
-
-namespace android {
-
-// Keep in sync with frameworks/base/core/java/android/os/ISchedulingPolicyService.aidl
-enum {
-    REQUEST_PRIORITY_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
-};
-
-// ----------------------------------------------------------------------
-
-class BpSchedulingPolicyService : public BpInterface<ISchedulingPolicyService>
-{
-public:
-    BpSchedulingPolicyService(const sp<IBinder>& impl)
-        : BpInterface<ISchedulingPolicyService>(impl)
-    {
-    }
-
-    virtual int requestPriority(int32_t pid, int32_t tid, int32_t prio, bool asynchronous)
-    {
-        Parcel data, reply;
-        data.writeInterfaceToken(ISchedulingPolicyService::getInterfaceDescriptor());
-        data.writeInt32(pid);
-        data.writeInt32(tid);
-        data.writeInt32(prio);
-        uint32_t flags = asynchronous ? IBinder::FLAG_ONEWAY : 0;
-        status_t status = remote()->transact(REQUEST_PRIORITY_TRANSACTION, data, &reply, flags);
-        if (status != NO_ERROR) {
-            return status;
-        }
-        if (asynchronous) {
-            return NO_ERROR;
-        }
-        // fail on exception: force binder reconnection
-        if (reply.readExceptionCode() != 0) {
-            return DEAD_OBJECT;
-        }
-        return reply.readInt32();
-    }
-};
-
-IMPLEMENT_META_INTERFACE(SchedulingPolicyService, "android.os.ISchedulingPolicyService");
-
-// ----------------------------------------------------------------------
-
-status_t BnSchedulingPolicyService::onTransact(
-    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
-{
-    switch (code) {
-    case REQUEST_PRIORITY_TRANSACTION:
-        // Not reached
-        return NO_ERROR;
-        break;
-    default:
-        return BBinder::onTransact(code, data, reply, flags);
-    }
-}
-
-}   // namespace android
diff --git a/services/audioflinger/ISchedulingPolicyService.h b/services/audioflinger/ISchedulingPolicyService.h
deleted file mode 100644
index b94b191..0000000
--- a/services/audioflinger/ISchedulingPolicyService.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2012 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 ANDROID_ISCHEDULING_POLICY_SERVICE_H
-#define ANDROID_ISCHEDULING_POLICY_SERVICE_H
-
-#include <binder/IInterface.h>
-
-namespace android {
-
-class ISchedulingPolicyService : public IInterface
-{
-public:
-    DECLARE_META_INTERFACE(SchedulingPolicyService);
-
-    virtual int         requestPriority(/*pid_t*/int32_t pid, /*pid_t*/int32_t tid,
-                                                int32_t prio, bool asynchronous) = 0;
-
-};
-
-class BnSchedulingPolicyService : public BnInterface<ISchedulingPolicyService>
-{
-public:
-    virtual status_t    onTransact( uint32_t code,
-                                    const Parcel& data,
-                                    Parcel* reply,
-                                    uint32_t flags = 0);
-};
-
-}   // namespace android
-
-#endif  // ANDROID_ISCHEDULING_POLICY_SERVICE_H
diff --git a/services/audioflinger/SchedulingPolicyService.cpp b/services/audioflinger/SchedulingPolicyService.cpp
deleted file mode 100644
index 70a3f1a..0000000
--- a/services/audioflinger/SchedulingPolicyService.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-#define LOG_TAG "SchedulingPolicyService"
-//#define LOG_NDEBUG 0
-
-#include <binder/IServiceManager.h>
-#include <utils/Mutex.h>
-#include "ISchedulingPolicyService.h"
-#include "SchedulingPolicyService.h"
-
-namespace android {
-
-static sp<ISchedulingPolicyService> sSchedulingPolicyService;
-static const String16 _scheduling_policy("scheduling_policy");
-static Mutex sMutex;
-
-int requestPriority(pid_t pid, pid_t tid, int32_t prio, bool asynchronous)
-{
-    // FIXME merge duplicated code related to service lookup, caching, and error recovery
-    int ret;
-    for (;;) {
-        sMutex.lock();
-        sp<ISchedulingPolicyService> sps = sSchedulingPolicyService;
-        sMutex.unlock();
-        if (sps == 0) {
-            sp<IBinder> binder = defaultServiceManager()->checkService(_scheduling_policy);
-            if (binder == 0) {
-                sleep(1);
-                continue;
-            }
-            sps = interface_cast<ISchedulingPolicyService>(binder);
-            sMutex.lock();
-            sSchedulingPolicyService = sps;
-            sMutex.unlock();
-        }
-        ret = sps->requestPriority(pid, tid, prio, asynchronous);
-        if (ret != DEAD_OBJECT) {
-            break;
-        }
-        ALOGW("SchedulingPolicyService died");
-        sMutex.lock();
-        sSchedulingPolicyService.clear();
-        sMutex.unlock();
-    }
-    return ret;
-}
-
-}   // namespace android
diff --git a/services/audioflinger/SchedulingPolicyService.h b/services/audioflinger/SchedulingPolicyService.h
deleted file mode 100644
index a9870d4..0000000
--- a/services/audioflinger/SchedulingPolicyService.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2012 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 _ANDROID_SCHEDULING_POLICY_SERVICE_H
-#define _ANDROID_SCHEDULING_POLICY_SERVICE_H
-
-namespace android {
-
-// Request elevated priority for thread tid, whose thread group leader must be pid.
-// The priority parameter is currently restricted to either 1 or 2.
-// The asynchronous parameter should be 'true' to return immediately,
-// after the request is enqueued but not necessarily executed.
-// The default value 'false' means to return after request has been enqueued and executed.
-int requestPriority(pid_t pid, pid_t tid, int32_t prio, bool asynchronous = false);
-
-}   // namespace android
-
-#endif  // _ANDROID_SCHEDULING_POLICY_SERVICE_H
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 5bd9149..f586291 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -60,7 +60,7 @@
 #include "FastMixer.h"
 #include "FastCapture.h"
 #include "ServiceUtilities.h"
-#include "SchedulingPolicyService.h"
+#include "mediautils/SchedulingPolicyService.h"
 
 #ifdef ADD_BATTERY_DATA
 #include <media/IMediaPlayerService.h>