Loading services/core/java/com/android/server/location/contexthub/ContextHubEventLogger.java +36 −0 Original line number Diff line number Diff line Loading @@ -16,10 +16,12 @@ package com.android.server.location.contexthub; import android.chre.flags.Flags; import android.hardware.location.NanoAppMessage; import android.util.Log; import java.util.Collection; import java.util.Optional; /** * A class to log events and useful metrics within the Context Hub service. Loading Loading @@ -149,10 +151,20 @@ public class ContextHubEventLogger { */ public final NanoAppMessage message; /** * the error code for the message */ public Optional<Byte> errorCode; public NanoappMessageEvent(long mTimeStampInMs, int mContextHubId, NanoAppMessage mMessage, boolean mSuccess) { super(mTimeStampInMs, mContextHubId, 0, mSuccess); message = mMessage; errorCode = Optional.empty(); } public void setErrorCode(byte errorCode) { this.errorCode = Optional.of(errorCode); } @Override Loading @@ -165,6 +177,8 @@ public class ContextHubEventLogger { sb.append(message.toString()); sb.append(", success = "); sb.append(success ? "true" : "false"); sb.append(", errorCode = "); sb.append(errorCode.isPresent() ? errorCode.get() : "null"); sb.append(']'); return sb.toString(); } Loading Loading @@ -311,6 +325,28 @@ public class ContextHubEventLogger { } } /** * Logs the status of a reliable message * * @param messageSequenceNumber the message sequence number * @param errorCode the error code */ public synchronized void logReliableMessageToNanoappStatus( int messageSequenceNumber, byte errorCode) { if (!Flags.reliableMessage()) { return; } for (NanoappMessageEvent event : mMessageToNanoappQueue) { if (event.message.isReliable() && event.message.getMessageSequenceNumber() == messageSequenceNumber) { event.setErrorCode(errorCode); break; } } } /** * Logs a context hub restart event * Loading services/core/java/com/android/server/location/contexthub/ContextHubService.java +2 −0 Original line number Diff line number Diff line Loading @@ -1087,6 +1087,8 @@ public class ContextHubService extends IContextHubService.Stub { * @param messageDeliveryStatus The message delivery status to deliver. */ private void handleMessageDeliveryStatusCallback(MessageDeliveryStatus messageDeliveryStatus) { ContextHubEventLogger.getInstance().logReliableMessageToNanoappStatus( messageDeliveryStatus.messageSequenceNumber, messageDeliveryStatus.errorCode); mTransactionManager.onMessageDeliveryResponse(messageDeliveryStatus.messageSequenceNumber, messageDeliveryStatus.errorCode == ErrorCode.OK); } Loading services/tests/servicestests/src/com/android/server/location/contexthub/ContextHubEventLoggerTest.java +60 −10 Original line number Diff line number Diff line Loading @@ -18,11 +18,15 @@ package com.android.server.location.contexthub; import static com.google.common.truth.Truth.assertThat; import android.chre.flags.Flags; import android.hardware.location.NanoAppMessage; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.Presubmit; import android.platform.test.flag.junit.SetFlagsRule; import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; Loading @@ -33,6 +37,8 @@ import java.util.Arrays; public class ContextHubEventLoggerTest { private static final ContextHubEventLogger sInstance = ContextHubEventLogger.getInstance(); @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); @Test public void testLogNanoappLoad() { ContextHubEventLogger.NanoappLoadEvent[] events = Loading @@ -46,10 +52,10 @@ public class ContextHubEventLoggerTest { sInstance.clear(); sInstance.logNanoappLoad(-1, 42, -34, 100, false); sInstance.logNanoappLoad(0, 123, 321, 001, true); String sInstanceDump = sInstance.toString(); String instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(sInstanceDump.contains(eventString)).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } } Loading @@ -66,10 +72,10 @@ public class ContextHubEventLoggerTest { sInstance.clear(); sInstance.logNanoappUnload(-1, 47, false); sInstance.logNanoappUnload(1, 0xFFFFFFFF, true); String sInstanceDump = sInstance.toString(); String instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(sInstanceDump.contains(eventString)).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } } Loading @@ -90,10 +96,10 @@ public class ContextHubEventLoggerTest { sInstance.clear(); sInstance.logMessageFromNanoapp(-123, message1, false); sInstance.logMessageFromNanoapp(321, message2, true); String sInstanceDump = sInstance.toString(); String instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(sInstanceDump.contains(eventString)).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } } Loading @@ -114,10 +120,54 @@ public class ContextHubEventLoggerTest { sInstance.clear(); sInstance.logMessageToNanoapp(888, message1, true); sInstance.logMessageToNanoapp(999, message2, false); String sInstanceDump = sInstance.toString(); String instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } } @Test @EnableFlags({Flags.FLAG_RELIABLE_MESSAGE, Flags.FLAG_RELIABLE_MESSAGE_IMPLEMENTATION}) public void testLogReliableMessageToNanoappStatus() { NanoAppMessage message1 = NanoAppMessage.createMessageToNanoApp(1, 0, new byte[] {0x00, 0x11, 0x22, 0x33}); NanoAppMessage message2 = NanoAppMessage.createMessageToNanoApp(0, 1, new byte[] {(byte) 0xDE, (byte) 0xAD, (byte) 0xBE, (byte) 0xEF}); message1.setIsReliable(true); message2.setIsReliable(true); message1.setMessageSequenceNumber(0); message2.setMessageSequenceNumber(1); ContextHubEventLogger.NanoappMessageEvent[] events = new ContextHubEventLogger.NanoappMessageEvent[] { new ContextHubEventLogger.NanoappMessageEvent(23, 888, message1, true), new ContextHubEventLogger.NanoappMessageEvent(34, 999, message2, false) }; String[] eventStrings = generateEventDumpStrings(events); // log events and test sInstance.toString() contains event details sInstance.clear(); sInstance.logMessageToNanoapp(888, message1, true); sInstance.logMessageToNanoapp(999, message2, false); String instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } // set the error codes for the events and verify sInstance.logReliableMessageToNanoappStatus(0, (byte) 0x02); sInstance.logReliableMessageToNanoappStatus(1, (byte) 0x03); events[0].setErrorCode((byte) 0x02); events[1].setErrorCode((byte) 0x03); eventStrings = generateEventDumpStrings(events); instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(sInstanceDump.contains(eventString)).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } } Loading @@ -134,10 +184,10 @@ public class ContextHubEventLoggerTest { sInstance.clear(); sInstance.logContextHubRestart(1); sInstance.logContextHubRestart(2); String sInstanceDump = sInstance.toString(); String instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(sInstanceDump.contains(eventString)).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } } Loading Loading
services/core/java/com/android/server/location/contexthub/ContextHubEventLogger.java +36 −0 Original line number Diff line number Diff line Loading @@ -16,10 +16,12 @@ package com.android.server.location.contexthub; import android.chre.flags.Flags; import android.hardware.location.NanoAppMessage; import android.util.Log; import java.util.Collection; import java.util.Optional; /** * A class to log events and useful metrics within the Context Hub service. Loading Loading @@ -149,10 +151,20 @@ public class ContextHubEventLogger { */ public final NanoAppMessage message; /** * the error code for the message */ public Optional<Byte> errorCode; public NanoappMessageEvent(long mTimeStampInMs, int mContextHubId, NanoAppMessage mMessage, boolean mSuccess) { super(mTimeStampInMs, mContextHubId, 0, mSuccess); message = mMessage; errorCode = Optional.empty(); } public void setErrorCode(byte errorCode) { this.errorCode = Optional.of(errorCode); } @Override Loading @@ -165,6 +177,8 @@ public class ContextHubEventLogger { sb.append(message.toString()); sb.append(", success = "); sb.append(success ? "true" : "false"); sb.append(", errorCode = "); sb.append(errorCode.isPresent() ? errorCode.get() : "null"); sb.append(']'); return sb.toString(); } Loading Loading @@ -311,6 +325,28 @@ public class ContextHubEventLogger { } } /** * Logs the status of a reliable message * * @param messageSequenceNumber the message sequence number * @param errorCode the error code */ public synchronized void logReliableMessageToNanoappStatus( int messageSequenceNumber, byte errorCode) { if (!Flags.reliableMessage()) { return; } for (NanoappMessageEvent event : mMessageToNanoappQueue) { if (event.message.isReliable() && event.message.getMessageSequenceNumber() == messageSequenceNumber) { event.setErrorCode(errorCode); break; } } } /** * Logs a context hub restart event * Loading
services/core/java/com/android/server/location/contexthub/ContextHubService.java +2 −0 Original line number Diff line number Diff line Loading @@ -1087,6 +1087,8 @@ public class ContextHubService extends IContextHubService.Stub { * @param messageDeliveryStatus The message delivery status to deliver. */ private void handleMessageDeliveryStatusCallback(MessageDeliveryStatus messageDeliveryStatus) { ContextHubEventLogger.getInstance().logReliableMessageToNanoappStatus( messageDeliveryStatus.messageSequenceNumber, messageDeliveryStatus.errorCode); mTransactionManager.onMessageDeliveryResponse(messageDeliveryStatus.messageSequenceNumber, messageDeliveryStatus.errorCode == ErrorCode.OK); } Loading
services/tests/servicestests/src/com/android/server/location/contexthub/ContextHubEventLoggerTest.java +60 −10 Original line number Diff line number Diff line Loading @@ -18,11 +18,15 @@ package com.android.server.location.contexthub; import static com.google.common.truth.Truth.assertThat; import android.chre.flags.Flags; import android.hardware.location.NanoAppMessage; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.Presubmit; import android.platform.test.flag.junit.SetFlagsRule; import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; Loading @@ -33,6 +37,8 @@ import java.util.Arrays; public class ContextHubEventLoggerTest { private static final ContextHubEventLogger sInstance = ContextHubEventLogger.getInstance(); @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); @Test public void testLogNanoappLoad() { ContextHubEventLogger.NanoappLoadEvent[] events = Loading @@ -46,10 +52,10 @@ public class ContextHubEventLoggerTest { sInstance.clear(); sInstance.logNanoappLoad(-1, 42, -34, 100, false); sInstance.logNanoappLoad(0, 123, 321, 001, true); String sInstanceDump = sInstance.toString(); String instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(sInstanceDump.contains(eventString)).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } } Loading @@ -66,10 +72,10 @@ public class ContextHubEventLoggerTest { sInstance.clear(); sInstance.logNanoappUnload(-1, 47, false); sInstance.logNanoappUnload(1, 0xFFFFFFFF, true); String sInstanceDump = sInstance.toString(); String instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(sInstanceDump.contains(eventString)).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } } Loading @@ -90,10 +96,10 @@ public class ContextHubEventLoggerTest { sInstance.clear(); sInstance.logMessageFromNanoapp(-123, message1, false); sInstance.logMessageFromNanoapp(321, message2, true); String sInstanceDump = sInstance.toString(); String instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(sInstanceDump.contains(eventString)).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } } Loading @@ -114,10 +120,54 @@ public class ContextHubEventLoggerTest { sInstance.clear(); sInstance.logMessageToNanoapp(888, message1, true); sInstance.logMessageToNanoapp(999, message2, false); String sInstanceDump = sInstance.toString(); String instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } } @Test @EnableFlags({Flags.FLAG_RELIABLE_MESSAGE, Flags.FLAG_RELIABLE_MESSAGE_IMPLEMENTATION}) public void testLogReliableMessageToNanoappStatus() { NanoAppMessage message1 = NanoAppMessage.createMessageToNanoApp(1, 0, new byte[] {0x00, 0x11, 0x22, 0x33}); NanoAppMessage message2 = NanoAppMessage.createMessageToNanoApp(0, 1, new byte[] {(byte) 0xDE, (byte) 0xAD, (byte) 0xBE, (byte) 0xEF}); message1.setIsReliable(true); message2.setIsReliable(true); message1.setMessageSequenceNumber(0); message2.setMessageSequenceNumber(1); ContextHubEventLogger.NanoappMessageEvent[] events = new ContextHubEventLogger.NanoappMessageEvent[] { new ContextHubEventLogger.NanoappMessageEvent(23, 888, message1, true), new ContextHubEventLogger.NanoappMessageEvent(34, 999, message2, false) }; String[] eventStrings = generateEventDumpStrings(events); // log events and test sInstance.toString() contains event details sInstance.clear(); sInstance.logMessageToNanoapp(888, message1, true); sInstance.logMessageToNanoapp(999, message2, false); String instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } // set the error codes for the events and verify sInstance.logReliableMessageToNanoappStatus(0, (byte) 0x02); sInstance.logReliableMessageToNanoappStatus(1, (byte) 0x03); events[0].setErrorCode((byte) 0x02); events[1].setErrorCode((byte) 0x03); eventStrings = generateEventDumpStrings(events); instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(sInstanceDump.contains(eventString)).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } } Loading @@ -134,10 +184,10 @@ public class ContextHubEventLoggerTest { sInstance.clear(); sInstance.logContextHubRestart(1); sInstance.logContextHubRestart(2); String sInstanceDump = sInstance.toString(); String instanceDump = sInstance.toString(); for (String eventString: eventStrings) { assertThat(eventString.length() > 0).isTrue(); assertThat(sInstanceDump.contains(eventString)).isTrue(); assertThat(instanceDump.contains(eventString)).isTrue(); } } Loading