From 2a5278ad2286d3e4fa5178f83196924d91e6757c Mon Sep 17 00:00:00 2001 From: Nathalie Le Clair Date: Mon, 28 Sep 2020 18:57:39 +0200 Subject: [PATCH] Pass caller information through setAndBroadcastActiveSource Bug: 166760714 Test: make Change-Id: If53863a35962ea30e341aefbe9abfe0ad163e049 --- .../server/hdmi/HdmiCecLocalDeviceAudioSystem.java | 6 ++++-- .../server/hdmi/HdmiCecLocalDevicePlayback.java | 6 ++++-- .../server/hdmi/HdmiCecLocalDeviceSource.java | 8 +++++--- .../android/server/hdmi/HdmiControlService.java | 14 ++++++-------- .../android/server/hdmi/OneTouchPlayAction.java | 2 +- .../hdmi/SystemAudioInitiationActionFromAvr.java | 3 ++- .../SystemAudioInitiationActionFromAvrTest.java | 2 +- 7 files changed, 23 insertions(+), 18 deletions(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java index 68473c1830ae4..29bdd6cb40c31 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java @@ -379,7 +379,8 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { assertRunOnServiceThread(); if (reason == mService.INITIATED_BY_ENABLE_CEC) { mService.setAndBroadcastActiveSource(mService.getPhysicalAddress(), - getDeviceInfo().getDeviceType(), Constants.ADDR_BROADCAST); + getDeviceInfo().getDeviceType(), Constants.ADDR_BROADCAST, + "HdmiCecLocalDeviceAudioSystem#onAddressAllocated()"); } mService.sendCecCommand( HdmiCecMessageBuilder.buildReportPhysicalAddressCommand( @@ -1324,7 +1325,8 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { if (getRoutingPort() == Constants.CEC_SWITCH_HOME && mService.isPlaybackDevice()) { routeToInputFromPortId(Constants.CEC_SWITCH_HOME); mService.setAndBroadcastActiveSourceFromOneDeviceType( - message.getSource(), mService.getPhysicalAddress()); + message.getSource(), mService.getPhysicalAddress(), + "HdmiCecLocalDeviceAudioSystem#handleRoutingChangeAndInformationForSwitch()"); return; } diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java index af782767cd206..00c9122f39d19 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java @@ -102,7 +102,8 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { assertRunOnServiceThread(); if (reason == mService.INITIATED_BY_ENABLE_CEC) { mService.setAndBroadcastActiveSource(mService.getPhysicalAddress(), - getDeviceInfo().getDeviceType(), Constants.ADDR_BROADCAST); + getDeviceInfo().getDeviceType(), Constants.ADDR_BROADCAST, + "HdmiCecLocalDevicePlayback#onAddressAllocated()"); } mService.sendCecCommand(HdmiCecMessageBuilder.buildReportPhysicalAddressCommand( mAddress, mService.getPhysicalAddress(), mDeviceType)); @@ -413,7 +414,8 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { } switch (mPlaybackDeviceActionOnRoutingControl) { case WAKE_UP_AND_SEND_ACTIVE_SOURCE: - setAndBroadcastActiveSource(message, physicalAddress); + setAndBroadcastActiveSource(message, physicalAddress, + "HdmiCecLocalDevicePlayback#handleRoutingChangeAndInformation()"); break; case WAKE_UP_ONLY: mService.wakeUp(); diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java index 329db98dfbf5b..4325f797416e6 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java @@ -166,7 +166,8 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice { // If current device is the target path, set to Active Source. // If the path is under the current device, should switch if (physicalAddress == mService.getPhysicalAddress() && mService.isPlaybackDevice()) { - setAndBroadcastActiveSource(message, physicalAddress); + setAndBroadcastActiveSource(message, physicalAddress, + "HdmiCecLocalDeviceSource#handleSetStreamPath()"); } else if (physicalAddress != mService.getPhysicalAddress() || !isActiveSource()) { // Invalidate the active source if stream path is set to other physical address or // our physical address while not active source @@ -236,9 +237,10 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice { // since service can decide who will be the active source when the device supports // multiple device types in this method. // This method should only be called when the device can be the active source. - protected void setAndBroadcastActiveSource(HdmiCecMessage message, int physicalAddress) { + protected void setAndBroadcastActiveSource(HdmiCecMessage message, int physicalAddress, + String caller) { mService.setAndBroadcastActiveSource( - physicalAddress, getDeviceInfo().getDeviceType(), message.getSource()); + physicalAddress, getDeviceInfo().getDeviceType(), message.getSource(), caller); } // Indicates if current device is the active source or not diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index 299884370d7a8..eaa00434b16f7 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -3250,13 +3250,13 @@ public class HdmiControlService extends SystemService { // For example, when receiving broadcast messages, all the device types will call this // method but only one of them will be the Active Source. protected void setAndBroadcastActiveSource( - int physicalAddress, int deviceType, int source) { + int physicalAddress, int deviceType, int source, String caller) { // If the device has both playback and audio system logical addresses, // playback will claim active source. Otherwise audio system will. if (deviceType == HdmiDeviceInfo.DEVICE_PLAYBACK) { HdmiCecLocalDevicePlayback playback = playback(); playback.setActiveSource(playback.getDeviceInfo().getLogicalAddress(), physicalAddress, - "HdmiControlService#setAndBroadcastActiveSource"); + caller); playback.wakeUpIfActiveSource(); playback.maySendActiveSource(source); } @@ -3265,8 +3265,7 @@ public class HdmiControlService extends SystemService { HdmiCecLocalDeviceAudioSystem audioSystem = audioSystem(); if (playback() == null) { audioSystem.setActiveSource(audioSystem.getDeviceInfo().getLogicalAddress(), - physicalAddress, - "HdmiControlService#setAndBroadcastActiveSource"); + physicalAddress, caller); audioSystem.wakeUpIfActiveSource(); audioSystem.maySendActiveSource(source); } @@ -3279,20 +3278,19 @@ public class HdmiControlService extends SystemService { // and this method updates Active Source in all the device types sharing the same // Physical Address. protected void setAndBroadcastActiveSourceFromOneDeviceType( - int sourceAddress, int physicalAddress) { + int sourceAddress, int physicalAddress, String caller) { // If the device has both playback and audio system logical addresses, // playback will claim active source. Otherwise audio system will. HdmiCecLocalDevicePlayback playback = playback(); HdmiCecLocalDeviceAudioSystem audioSystem = audioSystem(); if (playback != null) { playback.setActiveSource(playback.getDeviceInfo().getLogicalAddress(), physicalAddress, - "HdmiControlService#setAndBroadcastActiveSource"); + caller); playback.wakeUpIfActiveSource(); playback.maySendActiveSource(sourceAddress); } else if (audioSystem != null) { audioSystem.setActiveSource(audioSystem.getDeviceInfo().getLogicalAddress(), - physicalAddress, - "HdmiControlService#setAndBroadcastActiveSource"); + physicalAddress, caller); audioSystem.wakeUpIfActiveSource(); audioSystem.maySendActiveSource(sourceAddress); } diff --git a/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java b/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java index 4962af176f18a..e78a86c21453c 100644 --- a/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java +++ b/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java @@ -85,7 +85,7 @@ final class OneTouchPlayAction extends HdmiCecFeatureAction { // Because only source device can create this action, it's safe to cast. HdmiCecLocalDeviceSource source = source(); source.mService.setAndBroadcastActiveSourceFromOneDeviceType( - mTargetAddress, getSourcePath()); + mTargetAddress, getSourcePath(), "OneTouchPlayAction#broadcastActiveSource()"); // When OneTouchPlay is called, client side should be responsible to send out the intent // of which internal source, for example YouTube, it would like to switch to. // Here we only update the active port and the active source records in the local diff --git a/services/core/java/com/android/server/hdmi/SystemAudioInitiationActionFromAvr.java b/services/core/java/com/android/server/hdmi/SystemAudioInitiationActionFromAvr.java index 0907e5d03c782..acafda6619f3c 100644 --- a/services/core/java/com/android/server/hdmi/SystemAudioInitiationActionFromAvr.java +++ b/services/core/java/com/android/server/hdmi/SystemAudioInitiationActionFromAvr.java @@ -119,7 +119,8 @@ public class SystemAudioInitiationActionFromAvr extends HdmiCecFeatureAction { // claim Active Source and start to query TV system audio mode support. if (audioSystem().mService.isPlaybackDevice()) { audioSystem().mService.setAndBroadcastActiveSourceFromOneDeviceType( - Constants.ADDR_BROADCAST, getSourcePath()); + Constants.ADDR_BROADCAST, getSourcePath(), + "SystemAudioInitiationActionFromAvr#handleActiveSourceTimeout()"); mState = STATE_WAITING_FOR_TV_SUPPORT; queryTvSystemAudioModeSupport(); } else { diff --git a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java index c7342426c80c5..6be28d9a13beb 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java @@ -150,7 +150,7 @@ public class SystemAudioInitiationActionFromAvrTest { @Override public void setAndBroadcastActiveSourceFromOneDeviceType( - int sourceAddress, int physicalAddress) { + int sourceAddress, int physicalAddress, String caller) { mBroadcastActiveSource = true; }