Add histograms for FastMixer
Bug: 37153050
Test: dumpsys media.log shows histograms for audio activity on FastMixer
Change-Id: I6bb4bf19d62da1ed1d8cda43d428b03153a35de3
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 75b4e4c..a8e86a0 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -298,7 +298,8 @@
const sp<MmapStreamCallback>& callback,
sp<MmapStreamInterface>& interface);
private:
- static const size_t kLogMemorySize = 40 * 1024;
+ // FIXME The 400 is temporarily too high until a leak of writers in media.log is fixed.
+ static const size_t kLogMemorySize = 400 * 1024;
sp<MemoryDealer> mLogMemoryDealer; // == 0 when NBLog is disabled
// When a log writer is unregistered, it is done lazily so that media.log can continue to see it
// for as long as possible. The memory is only freed when it is needed for another log writer.
diff --git a/services/audioflinger/FastMixer.cpp b/services/audioflinger/FastMixer.cpp
index b4502b2..c4f1af3 100644
--- a/services/audioflinger/FastMixer.cpp
+++ b/services/audioflinger/FastMixer.cpp
@@ -41,6 +41,7 @@
#include <audio_utils/format.h>
#include <media/AudioMixer.h>
#include "FastMixer.h"
+#include "TypedLogger.h"
namespace android {
@@ -137,6 +138,7 @@
void FastMixer::onStateChange()
{
+ LOG_HIST_FLUSH();
const FastMixerState * const current = (const FastMixerState *) mCurrent;
const FastMixerState * const previous = (const FastMixerState *) mPrevious;
FastMixerDumpState * const dumpState = (FastMixerDumpState *) mDumpState;
@@ -333,6 +335,7 @@
void FastMixer::onWork()
{
+ LOG_HIST_TS();
const FastMixerState * const current = (const FastMixerState *) mCurrent;
FastMixerDumpState * const dumpState = (FastMixerDumpState *) mDumpState;
const FastMixerState::Command command = mCommand;
diff --git a/services/audioflinger/FastThread.cpp b/services/audioflinger/FastThread.cpp
index a0bf63b..ae4747e 100644
--- a/services/audioflinger/FastThread.cpp
+++ b/services/audioflinger/FastThread.cpp
@@ -91,6 +91,9 @@
bool FastThread::threadLoop()
{
+ // LOGT now works even if logWriterTLS is nullptr, but we're considering changing that,
+ // so this initialization permits a future change to remove the check for nullptr.
+ logWriterTLS = &mDummyNBLogWriter;
for (;;) {
// either nanosleep, sched_yield, or busy wait
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 7f7e353..80d9f71 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -2930,7 +2930,6 @@
bool AudioFlinger::PlaybackThread::threadLoop()
{
- // FIXME Make this an API
logWriterTLS = mNBLogWriter.get();
Vector< sp<Track> > tracksToRemove;
@@ -2958,15 +2957,17 @@
acquireWakeLock();
- // mNBLogWriter->log can only be called while thread mutex mLock is held.
+ // mNBLogWriter logging APIs can only be called by a single thread, typically the
+ // thread associated with this PlaybackThread.
+ // If you want to share the mNBLogWriter with other threads (for example, binder threads)
+ // then all such threads must agree to hold a common mutex before logging.
// So if you need to log when mutex is unlocked, set logString to a non-NULL string,
// and then that string will be logged at the next convenient opportunity.
+ // See reference to logString below.
const char *logString = NULL;
checkSilentMode_l();
-#if 0
- int z = 0; // used in logFormat example
-#endif
+
while (!exitPending())
{
// Log merge requests are performed during AudioFlinger binder transactions, but
@@ -2983,8 +2984,8 @@
processConfigEvents_l();
+ // See comment at declaration of logString for why this is done under mLock
if (logString != NULL) {
- // FIXME Remove these internal APIs and replace by LOGT
mNBLogWriter->logTimestamp();
mNBLogWriter->log(logString);
logString = NULL;
diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h
index cc66cad..ff7bb63 100644
--- a/services/audioflinger/Threads.h
+++ b/services/audioflinger/Threads.h
@@ -976,7 +976,7 @@
sp<NBAIO_Source> mTeeSource;
#endif
uint32_t mScreenState; // cached copy of gScreenState
- static const size_t kFastMixerLogSize = 4 * 1024;
+ static const size_t kFastMixerLogSize = 8 * 1024;
sp<NBLog::Writer> mFastMixerNBLogWriter;