StreamHal: Add power logging

Test: adb shell dumpsys media.audio_flinger
Bug: 62307033
Bug: 62381511
Change-Id: Ie15863f3c207e5651ce0b8818b9e38737bad77d8
diff --git a/media/libaudiohal/StreamHalLocal.cpp b/media/libaudiohal/StreamHalLocal.cpp
index 05800a0..dc17f5c 100644
--- a/media/libaudiohal/StreamHalLocal.cpp
+++ b/media/libaudiohal/StreamHalLocal.cpp
@@ -27,7 +27,15 @@
 namespace android {
 
 StreamHalLocal::StreamHalLocal(audio_stream_t *stream, sp<DeviceHalLocal> device)
-        : mDevice(device), mStream(stream) {
+        : mDevice(device),
+          mStream(stream) {
+    // Instrument audio signal power logging.
+    // Note: This assumes channel mask, format, and sample rate do not change after creation.
+    if (mStream != nullptr && mStreamPowerLog.isUserDebugOrEngBuild()) {
+        mStreamPowerLog.init(mStream->get_sample_rate(mStream),
+                mStream->get_channels(mStream),
+                mStream->get_format(mStream));
+    }
 }
 
 StreamHalLocal::~StreamHalLocal() {
@@ -95,7 +103,9 @@
 }
 
 status_t StreamHalLocal::dump(int fd) {
-    return mStream->dump(mStream, fd);
+    status_t status = mStream->dump(mStream, fd);
+    mStreamPowerLog.dump(fd);
+    return status;
 }
 
 status_t StreamHalLocal::setHalThreadPriority(int) {
@@ -133,6 +143,7 @@
     ssize_t writeResult = mStream->write(mStream, buffer, bytes);
     if (writeResult > 0) {
         *written = writeResult;
+        mStreamPowerLog.log(buffer, *written);
         return OK;
     } else {
         *written = 0;
@@ -266,6 +277,7 @@
     ssize_t readResult = mStream->read(mStream, buffer, bytes);
     if (readResult > 0) {
         *read = readResult;
+        mStreamPowerLog.log( buffer, *read);
         return OK;
     } else {
         *read = 0;