Make max fast tracks configurable using a property
ro.audio.max_fast_tracks
Rename the currently configured maximum number of fast tracks
from FastMixerState::kMaxFastTracks to FastMixerState::sMaxFastTracks.
There is no guarantee that the CPU will be able to handle
the configured number of fast tracks.
Bug: 27564141
Change-Id: If9af226d839b226503488c3cb20a4bb8950b429d
diff --git a/services/audioflinger/FastMixerState.cpp b/services/audioflinger/FastMixerState.cpp
index a8c2634..ad471fb 100644
--- a/services/audioflinger/FastMixerState.cpp
+++ b/services/audioflinger/FastMixerState.cpp
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+#include <cutils/properties.h>
#include "FastMixerState.h"
namespace android {
@@ -33,6 +34,10 @@
mFastTracksGen(0), mTrackMask(0), mOutputSink(NULL), mOutputSinkGen(0),
mFrameCount(0), mTeeSink(NULL)
{
+ int ok = pthread_once(&sMaxFastTracksOnce, sMaxFastTracksInit);
+ if (ok != 0) {
+ ALOGE("%s pthread_once failed: %d", __func__, ok);
+ }
}
FastMixerState::~FastMixerState()
@@ -40,6 +45,12 @@
}
// static
+unsigned FastMixerState::sMaxFastTracks = kDefaultFastTracks;
+
+// static
+pthread_once_t FastMixerState::sMaxFastTracksOnce = PTHREAD_ONCE_INIT;
+
+// static
const char *FastMixerState::commandToString(Command command)
{
const char *str = FastThreadState::commandToString(command);
@@ -54,4 +65,18 @@
LOG_ALWAYS_FATAL("%s", __func__);
}
+// static
+void FastMixerState::sMaxFastTracksInit()
+{
+ char value[PROPERTY_VALUE_MAX];
+ if (property_get("ro.audio.max_fast_tracks", value, NULL) > 0) {
+ char *endptr;
+ unsigned long ul = strtoul(value, &endptr, 0);
+ if (*endptr == '\0' && kMinFastTracks <= ul && ul <= kMaxFastTracks) {
+ sMaxFastTracks = (unsigned) ul;
+ }
+ }
+ ALOGI("sMaxFastTracks = %u", sMaxFastTracks);
+}
+
} // namespace android