summaryrefslogtreecommitdiffstats
path: root/services/audioflinger
diff options
context:
space:
mode:
authorRicardo Cerqueira <ricardo@cyngn.com>2015-11-05 01:41:03 +0000
committerRicardo Cerqueira <ricardo@cyngn.com>2015-11-05 15:12:16 +0000
commitd5d618443b0166393389b422892ec033825e57ce (patch)
treead66ae383f72046ed6805b570450ae78709df3aa /services/audioflinger
parent2848080cc0182847cb2130cba1a59282db88bce0 (diff)
parentf733ab6e153fb89f045bfb1cb2746bd58399a0c2 (diff)
downloadframeworks_av-d5d618443b0166393389b422892ec033825e57ce.zip
frameworks_av-d5d618443b0166393389b422892ec033825e57ce.tar.gz
frameworks_av-d5d618443b0166393389b422892ec033825e57ce.tar.bz2
Merge tag 'android-6.0.0_r26' into cm-13.0
Android 6.0.0 release 26 Change-Id: I8a57007bf6efcd8b95c3cebf5e0444345bdd4cda
Diffstat (limited to 'services/audioflinger')
-rw-r--r--services/audioflinger/Android.mk15
-rw-r--r--services/audioflinger/ISchedulingPolicyService.cpp80
-rw-r--r--services/audioflinger/ISchedulingPolicyService.h45
-rw-r--r--services/audioflinger/SchedulingPolicyService.cpp62
-rw-r--r--services/audioflinger/SchedulingPolicyService.h31
-rw-r--r--services/audioflinger/Threads.cpp8
-rw-r--r--services/audioflinger/Tracks.cpp5
7 files changed, 13 insertions, 233 deletions
diff --git a/services/audioflinger/Android.mk b/services/audioflinger/Android.mk
index 4791ce4..474fb46 100644
--- a/services/audioflinger/Android.mk
+++ b/services/audioflinger/Android.mk
@@ -3,17 +3,6 @@ LOCAL_PATH:= $(call my-dir)
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 @@ LOCAL_SHARED_LIBRARIES := \
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 8dfdca6..cdf8b1e 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>
@@ -3498,6 +3498,12 @@ ssize_t AudioFlinger::MixerThread::threadLoop_write()
if (state->mCommand != FastMixerState::MIX_WRITE &&
(kUseFastMixer != FastMixer_Dynamic || state->mTrackMask > 1)) {
if (state->mCommand == FastMixerState::COLD_IDLE) {
+
+ // FIXME workaround for first HAL write being CPU bound on some devices
+ ATRACE_BEGIN("write");
+ mOutput->write((char *)mSinkBuffer, 0);
+ ATRACE_END();
+
int32_t old = android_atomic_inc(&mFastMixerFutex);
if (old == -1) {
(void) syscall(__NR_futex, &mFastMixerFutex, FUTEX_WAKE_PRIVATE, 1);
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index a45a6f8..98eb87f 100644
--- a/services/audioflinger/Tracks.cpp
+++ b/services/audioflinger/Tracks.cpp
@@ -433,7 +433,10 @@ AudioFlinger::PlaybackThread::Track::Track(
}
// only allocate a fast track index if we were able to allocate a normal track name
if (flags & IAudioFlinger::TRACK_FAST) {
- mAudioTrackServerProxy->framesReadyIsCalledByMultipleThreads();
+ // FIXME: Not calling framesReadyIsCalledByMultipleThreads() exposes a potential
+ // race with setSyncEvent(). However, if we call it, we cannot properly start
+ // static fast tracks (SoundPool) immediately after stopping.
+ //mAudioTrackServerProxy->framesReadyIsCalledByMultipleThreads();
ALOG_ASSERT(thread->mFastTrackAvailMask != 0);
int i = __builtin_ctz(thread->mFastTrackAvailMask);
ALOG_ASSERT(0 < i && i < (int)FastMixerState::kMaxFastTracks);