From a6f943380ba0fc7eefd614c1a4b70af3a3f95cd9 Mon Sep 17 00:00:00 2001 From: Weilin Xu Date: Thu, 4 Aug 2022 16:46:08 +0000 Subject: [PATCH] Add dumpsys for HIDL broadcastradio service Dump method of IRadioService is overriden to print information for debugging BroadcastRadioService. Bug: 240598856 Test: m -j, adb shell dumpsys broadcastradio Change-Id: Iad57bb1871e7ee76cc2d401d4b6769dc1d4a0668 --- .../broadcastradio/BroadcastRadioService.java | 21 ++++++++++++++- .../hal2/BroadcastRadioService.java | 27 +++++++++++++++++++ .../broadcastradio/hal2/RadioModule.java | 27 +++++++++++++++++++ .../broadcastradio/hal2/TunerSession.java | 14 ++++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/broadcastradio/BroadcastRadioService.java b/services/core/java/com/android/server/broadcastradio/BroadcastRadioService.java index 351a1e9da690b..23183f9011e64 100644 --- a/services/core/java/com/android/server/broadcastradio/BroadcastRadioService.java +++ b/services/core/java/com/android/server/broadcastradio/BroadcastRadioService.java @@ -26,11 +26,14 @@ import android.hardware.radio.ITuner; import android.hardware.radio.ITunerCallback; import android.hardware.radio.RadioManager; import android.os.RemoteException; +import android.util.IndentingPrintWriter; import android.util.Slog; import com.android.server.SystemService; import com.android.server.broadcastradio.hal2.AnnouncementAggregator; +import java.io.FileDescriptor; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -46,7 +49,7 @@ public class BroadcastRadioService extends SystemService { private final com.android.server.broadcastradio.hal2.BroadcastRadioService mHal2; private final Object mLock = new Object(); - private List mV1Modules = null; + private final List mV1Modules; public BroadcastRadioService(Context context) { super(context); @@ -115,5 +118,21 @@ public class BroadcastRadioService extends SystemService { return mHal2.addAnnouncementListener(enabledTypes, listener); } } + + @Override + protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + IndentingPrintWriter radioPw = new IndentingPrintWriter(pw); + radioPw.printf("BroadcastRadioService\n"); + radioPw.increaseIndent(); + radioPw.printf("HAL1: %s\n", mHal1); + radioPw.increaseIndent(); + radioPw.printf("Modules of HAL1: %s\n", mV1Modules); + radioPw.decreaseIndent(); + radioPw.printf("HAL2:\n"); + radioPw.increaseIndent(); + mHal2.dumpInfo(radioPw); + radioPw.decreaseIndent(); + radioPw.decreaseIndent(); + } } } diff --git a/services/core/java/com/android/server/broadcastradio/hal2/BroadcastRadioService.java b/services/core/java/com/android/server/broadcastradio/hal2/BroadcastRadioService.java index 534e828363410..560573799a3da 100644 --- a/services/core/java/com/android/server/broadcastradio/hal2/BroadcastRadioService.java +++ b/services/core/java/com/android/server/broadcastradio/hal2/BroadcastRadioService.java @@ -29,6 +29,7 @@ import android.hidl.manager.V1_0.IServiceManager; import android.hidl.manager.V1_0.IServiceNotification; import android.os.IHwBinder.DeathRecipient; import android.os.RemoteException; +import android.util.IndentingPrintWriter; import android.util.Slog; import com.android.internal.annotations.GuardedBy; @@ -195,4 +196,30 @@ public class BroadcastRadioService { } return aggregator; } + + /** + * Dump state of broadcastradio service for HIDL HAL 2.0. + * + * @param pw The file to which BroadcastRadioService state is dumped. + */ + public void dumpInfo(IndentingPrintWriter pw) { + synchronized (mLock) { + pw.printf("Next module id available: %d\n", mNextModuleId); + pw.printf("ServiceName to module id map:\n"); + pw.increaseIndent(); + for (Map.Entry entry : mServiceNameToModuleIdMap.entrySet()) { + pw.printf("Service name: %s, module id: %d\n", entry.getKey(), entry.getValue()); + } + pw.decreaseIndent(); + pw.printf("Radio modules:\n"); + pw.increaseIndent(); + for (Map.Entry moduleEntry : mModules.entrySet()) { + pw.printf("Module id=%d:\n", moduleEntry.getKey()); + pw.increaseIndent(); + moduleEntry.getValue().dumpInfo(pw); + pw.decreaseIndent(); + } + pw.decreaseIndent(); + } + } } diff --git a/services/core/java/com/android/server/broadcastradio/hal2/RadioModule.java b/services/core/java/com/android/server/broadcastradio/hal2/RadioModule.java index aeaa678b72111..852aa66866f0e 100644 --- a/services/core/java/com/android/server/broadcastradio/hal2/RadioModule.java +++ b/services/core/java/com/android/server/broadcastradio/hal2/RadioModule.java @@ -38,6 +38,7 @@ import android.os.DeadObjectException; import android.os.Handler; import android.os.Looper; import android.os.RemoteException; +import android.util.IndentingPrintWriter; import android.util.MutableInt; import android.util.Slog; @@ -424,4 +425,30 @@ class RadioModule { return BitmapFactory.decodeByteArray(rawImage, 0, rawImage.length); } + + void dumpInfo(IndentingPrintWriter pw) { + pw.printf("RadioModule\n"); + pw.increaseIndent(); + synchronized (mLock) { + pw.printf("BroadcastRadioService: %s\n", mService); + pw.printf("Properties: %s\n", mProperties); + pw.printf("HIDL2.0 HAL TunerSession: %s\n", mHalTunerSession); + pw.printf("Is antenna connected? "); + if (mAntennaConnected == null) { + pw.printf("null\n"); + } else { + pw.printf("%s\n", mAntennaConnected ? "Yes" : "No"); + } + pw.printf("current ProgramInfo: %s\n", mCurrentProgramInfo); + pw.printf("ProgramInfoCache: %s\n", mProgramInfoCache); + pw.printf("Union of AIDL ProgramFilters: %s\n", mUnionOfAidlProgramFilters); + pw.printf("AIDL TunerSessions:\n"); + pw.increaseIndent(); + for (TunerSession aidlTunerSession : mAidlTunerSessions) { + aidlTunerSession.dumpInfo(pw); + } + pw.decreaseIndent(); + } + pw.decreaseIndent(); + } } diff --git a/services/core/java/com/android/server/broadcastradio/hal2/TunerSession.java b/services/core/java/com/android/server/broadcastradio/hal2/TunerSession.java index c13216ba0a46f..41f753c112161 100644 --- a/services/core/java/com/android/server/broadcastradio/hal2/TunerSession.java +++ b/services/core/java/com/android/server/broadcastradio/hal2/TunerSession.java @@ -27,6 +27,7 @@ import android.hardware.radio.ProgramList; import android.hardware.radio.ProgramSelector; import android.hardware.radio.RadioManager; import android.os.RemoteException; +import android.util.IndentingPrintWriter; import android.util.Log; import android.util.MutableBoolean; import android.util.MutableInt; @@ -339,4 +340,17 @@ class TunerSession extends ITuner.Stub { () -> mHwSession.getParameters(Convert.listToArrayList(keys)))); } } + + void dumpInfo(IndentingPrintWriter pw) { + pw.printf("TunerSession\n"); + pw.increaseIndent(); + synchronized (mLock) { + pw.printf("HIDL HAL Session: %s\n", mHwSession); + pw.printf("Is session closed? %s\n", mIsClosed ? "Yes" : "No"); + pw.printf("Is muted? %s\n", mIsMuted ? "Yes" : "No"); + pw.printf("ProgramInfoCache: %s\n", mProgramInfoCache); + pw.printf("Config: %s\n", mDummyConfig); + } + pw.decreaseIndent(); + } }