Loading services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +21 −29 Original line number Diff line number Diff line Loading @@ -27,11 +27,11 @@ import static android.media.MediaRouter2Utils.getOriginalId; import static android.media.MediaRouter2Utils.getProviderId; import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_DESELECT_ROUTE; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_RELEASE_SESSION; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SELECT_ROUTE; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_TRANSFER_TO_ROUTE; import static com.android.server.media.MediaRouterMetricLogger.EVENT_TYPE_CREATE_SESSION; import static com.android.server.media.MediaRouterMetricLogger.EVENT_TYPE_DESELECT_ROUTE; import static com.android.server.media.MediaRouterMetricLogger.EVENT_TYPE_RELEASE_SESSION; import static com.android.server.media.MediaRouterMetricLogger.EVENT_TYPE_SELECT_ROUTE; import static com.android.server.media.MediaRouterMetricLogger.EVENT_TYPE_TRANSFER_TO_ROUTE; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_INVALID_COMMAND; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_INVALID_ROUTE_ID; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_INVALID_SESSION_ID; Loading Loading @@ -1514,7 +1514,7 @@ class MediaRouter2ServiceImpl { if (routerRecord == null) { mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION, EVENT_TYPE_CREATE_SESSION, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_ROUTER_RECORD_NOT_FOUND, routingChangeInfo); return; Loading @@ -1537,7 +1537,7 @@ class MediaRouter2ServiceImpl { if (manager == null || manager.mLastSessionCreationRequest == null) { Slog.w(TAG, "requestCreateSessionWithRouter2Locked: Ignoring unknown request."); mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION, EVENT_TYPE_CREATE_SESSION, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_MANAGER_RECORD_NOT_FOUND, routingChangeInfo); routerRecord.notifySessionCreationFailed(requestId); Loading @@ -1550,7 +1550,7 @@ class MediaRouter2ServiceImpl { "requestCreateSessionWithRouter2Locked: " + "Ignoring unmatched routing session."); mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION, EVENT_TYPE_CREATE_SESSION, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_INVALID_SESSION_ID, routingChangeInfo); routerRecord.notifySessionCreationFailed(requestId); Loading @@ -1569,7 +1569,7 @@ class MediaRouter2ServiceImpl { "requestCreateSessionWithRouter2Locked: " + "Ignoring unmatched route."); mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION, EVENT_TYPE_CREATE_SESSION, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_INVALID_ROUTE_ID, routingChangeInfo); routerRecord.notifySessionCreationFailed(requestId); Loading @@ -1584,7 +1584,7 @@ class MediaRouter2ServiceImpl { && !TextUtils.equals(route.getId(), defaultRouteId)) { Slog.w(TAG, "MODIFY_AUDIO_ROUTING permission is required to transfer to" + route); mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION, EVENT_TYPE_CREATE_SESSION, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_PERMISSION_DENIED, routingChangeInfo); routerRecord.notifySessionCreationFailed(requestId); Loading @@ -1594,9 +1594,7 @@ class MediaRouter2ServiceImpl { long uniqueRequestId = toUniqueRequestId(routerRecord.mRouterId, requestId); mMediaRouterMetricLogger.addRequestInfo( uniqueRequestId, MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION, routingChangeInfo); uniqueRequestId, EVENT_TYPE_CREATE_SESSION, routingChangeInfo); mMediaRouterMetricLogger.notifyRoutingChangeRequested(uniqueRequestId, routingChangeInfo); userHandler.sendMessage( obtainMessage( Loading @@ -1621,7 +1619,7 @@ class MediaRouter2ServiceImpl { if (routerRecord == null) { mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SELECT_ROUTE, EVENT_TYPE_SELECT_ROUTE, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_ROUTER_RECORD_NOT_FOUND, routingChangeInfo); return; Loading @@ -1633,7 +1631,7 @@ class MediaRouter2ServiceImpl { "selectRouteWithRouter2 | router: %s(id: %d), route: %s", routerRecord.mPackageName, routerRecord.mRouterId, route.getId())); mMediaRouterMetricLogger.logOperationTriggered( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SELECT_ROUTE, EVENT_TYPE_SELECT_ROUTE, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_UNSPECIFIED, routingChangeInfo); Loading @@ -1654,7 +1652,7 @@ class MediaRouter2ServiceImpl { if (routerRecord == null) { mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_DESELECT_ROUTE, EVENT_TYPE_DESELECT_ROUTE, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_ROUTER_RECORD_NOT_FOUND, routingChangeInfo); return; Loading @@ -1666,7 +1664,7 @@ class MediaRouter2ServiceImpl { "deselectRouteWithRouter2 | router: %s(id: %d), route: %s", routerRecord.mPackageName, routerRecord.mRouterId, route.getId())); mMediaRouterMetricLogger.logOperationTriggered( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_DESELECT_ROUTE, EVENT_TYPE_DESELECT_ROUTE, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_UNSPECIFIED, routingChangeInfo); Loading @@ -1688,7 +1686,7 @@ class MediaRouter2ServiceImpl { if (routerRecord == null) { mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_TRANSFER_TO_ROUTE, EVENT_TYPE_TRANSFER_TO_ROUTE, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_ROUTER_RECORD_NOT_FOUND, routingChangeInfo); return; Loading @@ -1700,7 +1698,7 @@ class MediaRouter2ServiceImpl { "transferToRouteWithRouter2 | router: %s(id: %d), route: %s", routerRecord.mPackageName, routerRecord.mRouterId, route.getId())); mMediaRouterMetricLogger.logOperationTriggered( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_TRANSFER_TO_ROUTE, EVENT_TYPE_TRANSFER_TO_ROUTE, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_UNSPECIFIED, routingChangeInfo); Loading Loading @@ -1763,7 +1761,7 @@ class MediaRouter2ServiceImpl { if (routerRecord == null) { mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_RELEASE_SESSION, EVENT_TYPE_RELEASE_SESSION, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_ROUTER_RECORD_NOT_FOUND, /* routingChangeInfo= */ null); return; Loading Loading @@ -2105,9 +2103,7 @@ class MediaRouter2ServiceImpl { long uniqueRequestId = toUniqueRequestId(managerRecord.mManagerId, requestId); mMediaRouterMetricLogger.addRequestInfo( uniqueRequestId, MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SELECT_ROUTE, routingChangeInfo); uniqueRequestId, EVENT_TYPE_SELECT_ROUTE, routingChangeInfo); managerRecord.mUserRecord.mHandler.sendMessage( obtainMessage(UserHandler::selectRouteOnHandler, Loading Loading @@ -2139,9 +2135,7 @@ class MediaRouter2ServiceImpl { long uniqueRequestId = toUniqueRequestId(managerRecord.mManagerId, requestId); mMediaRouterMetricLogger.addRequestInfo( uniqueRequestId, MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_DESELECT_ROUTE, routingChangeInfo); uniqueRequestId, EVENT_TYPE_DESELECT_ROUTE, routingChangeInfo); managerRecord.mUserRecord.mHandler.sendMessage( obtainMessage(UserHandler::deselectRouteOnHandler, Loading Loading @@ -2176,9 +2170,7 @@ class MediaRouter2ServiceImpl { long uniqueRequestId = toUniqueRequestId(managerRecord.mManagerId, requestId); mMediaRouterMetricLogger.addRequestInfo( uniqueRequestId, MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_TRANSFER_TO_ROUTE, routingChangeInfo); uniqueRequestId, EVENT_TYPE_TRANSFER_TO_ROUTE, routingChangeInfo); managerRecord.mUserRecord.mHandler.sendMessage( obtainMessage( Loading services/core/java/com/android/server/media/MediaRouterMetricLogger.java +91 −14 Original line number Diff line number Diff line Loading @@ -26,8 +26,15 @@ import static android.media.RoutingSessionInfo.TRANSFER_REASON_APP; import static android.media.RoutingSessionInfo.TRANSFER_REASON_FALLBACK; import static android.media.RoutingSessionInfo.TRANSFER_REASON_SYSTEM_REQUEST; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SYSTEM_ROUTING_SESSION; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_DESELECT_ROUTE; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_RELEASE_SESSION; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SCANNING_STARTED; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SCANNING_STOPPED; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SELECT_ROUTE; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_TRANSFER_TO_ROUTE; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_UNSPECIFIED; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_FAILED_TO_REROUTE_SYSTEM_MEDIA; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_INVALID_COMMAND; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_NETWORK_ERROR; Loading @@ -47,6 +54,7 @@ import static com.android.server.media.MediaRouterStatsLog.ROUTING_CHANGE_REPORT import static com.android.server.media.MediaRouterStatsLog.ROUTING_CHANGE_REPORTED__TRANSFER_REASON__TRANSFER_REASON_SYSTEM_REQUEST; import static com.android.server.media.MediaRouterStatsLog.ROUTING_CHANGE_REPORTED__TRANSFER_REASON__TRANSFER_REASON_UNSPECIFIED; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.media.MediaRoute2ProviderService; Loading @@ -64,6 +72,8 @@ import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Logs metrics for MediaRouter2. Loading @@ -71,6 +81,32 @@ import java.io.PrintWriter; * @hide */ final class MediaRouterMetricLogger { public static final int EVENT_TYPE_UNSPECIFIED = 0; public static final int EVENT_TYPE_CREATE_SESSION = 1; public static final int EVENT_TYPE_CREATE_SYSTEM_ROUTING_SESSION = 2; public static final int EVENT_TYPE_RELEASE_SESSION = 3; public static final int EVENT_TYPE_SELECT_ROUTE = 4; public static final int EVENT_TYPE_DESELECT_ROUTE = 5; public static final int EVENT_TYPE_TRANSFER_TO_ROUTE = 6; public static final int EVENT_TYPE_SCANNING_STARTED = 7; public static final int EVENT_TYPE_SCANNING_STOPPED = 8; @IntDef( prefix = "EVENT_TYPE", value = { EVENT_TYPE_UNSPECIFIED, EVENT_TYPE_CREATE_SESSION, EVENT_TYPE_CREATE_SYSTEM_ROUTING_SESSION, EVENT_TYPE_RELEASE_SESSION, EVENT_TYPE_SELECT_ROUTE, EVENT_TYPE_DESELECT_ROUTE, EVENT_TYPE_TRANSFER_TO_ROUTE, EVENT_TYPE_SCANNING_STARTED, EVENT_TYPE_SCANNING_STOPPED }) @Retention(RetentionPolicy.SOURCE) public @interface EventType {} private static final String TAG = "MediaRouterMetricLogger"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final int REQUEST_INFO_CACHE_CAPACITY = 100; Loading Loading @@ -138,10 +174,11 @@ final class MediaRouterMetricLogger { * Adds a new request info to the cache. * * @param uniqueRequestId The unique request id. * @param eventType The event type. * @param eventType The routing event type. * @param routingChangeInfo The routing change request information. */ public void addRequestInfo( long uniqueRequestId, int eventType, RoutingChangeInfo routingChangeInfo) { long uniqueRequestId, @EventType int eventType, RoutingChangeInfo routingChangeInfo) { RequestInfo requestInfo = new RequestInfo(uniqueRequestId, eventType, routingChangeInfo); mRequestInfoCache.put(requestInfo.mUniqueRequestId, requestInfo); } Loading @@ -159,21 +196,24 @@ final class MediaRouterMetricLogger { /** * Logs an operation failure. * * @param eventType The event type. * @param eventType The routing event type. * @param result The result of the operation. * @param routingChangeInfo The routing change request information. */ public void logOperationFailure( int eventType, int result, RoutingChangeInfo routingChangeInfo) { @EventType int eventType, int result, RoutingChangeInfo routingChangeInfo) { logMediaRouterEvent(eventType, result, routingChangeInfo); } /** * Logs an operation triggered. * * @param eventType The event type. * @param eventType The routing event type. * @param result The result of the operation. * @param routingChangeInfo The routing change request information. */ public void logOperationTriggered( int eventType, int result, RoutingChangeInfo routingChangeInfo) { @EventType int eventType, int result, RoutingChangeInfo routingChangeInfo) { logMediaRouterEvent(eventType, result, routingChangeInfo); } Loading @@ -193,7 +233,7 @@ final class MediaRouterMetricLogger { return; } int eventType = requestInfo.mEventType; @EventType int eventType = requestInfo.mEventType; logMediaRouterEvent(eventType, result, requestInfo.mRoutingChangeInfo); removeRequestInfo(uniqueRequestId); Loading Loading @@ -384,6 +424,39 @@ final class MediaRouterMetricLogger { }; } /** * Converts {@link EventType} to the enum defined for logging. * * @param eventType the routing event type. * @return the event type as per the enum defined for logging. */ @VisibleForTesting /* package */ static int convertEventTypeForLogging(@EventType int eventType) { return switch (eventType) { case EVENT_TYPE_UNSPECIFIED -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_UNSPECIFIED; case EVENT_TYPE_CREATE_SESSION -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION; case EVENT_TYPE_CREATE_SYSTEM_ROUTING_SESSION -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SYSTEM_ROUTING_SESSION; case EVENT_TYPE_RELEASE_SESSION -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_RELEASE_SESSION; case EVENT_TYPE_SELECT_ROUTE -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SELECT_ROUTE; case EVENT_TYPE_DESELECT_ROUTE -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_DESELECT_ROUTE; case EVENT_TYPE_TRANSFER_TO_ROUTE -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_TRANSFER_TO_ROUTE; case EVENT_TYPE_SCANNING_STARTED -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SCANNING_STARTED; case EVENT_TYPE_SCANNING_STOPPED -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SCANNING_STOPPED; default -> throw new IllegalArgumentException( "No mapping found for the given event type: " + eventType); }; } @VisibleForTesting /* package */ int getRequestInfoCacheCapacity() { return mRequestInfoCache.maxSize(); Loading Loading @@ -415,7 +488,7 @@ final class MediaRouterMetricLogger { } private void logMediaRouterEvent( int eventType, int result, RoutingChangeInfo routingChangeInfo) { @EventType int eventType, int result, RoutingChangeInfo routingChangeInfo) { int entryPoint = routingChangeInfo != null ? convertEntryPointForLogging(routingChangeInfo.getEntryPoint()) Loading @@ -423,7 +496,7 @@ final class MediaRouterMetricLogger { boolean isSuggested = routingChangeInfo != null && routingChangeInfo.isSuggested(); MediaRouterStatsLog.write( MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED, eventType, convertEventTypeForLogging(eventType), result, entryPoint, isSuggested); Loading @@ -436,7 +509,7 @@ final class MediaRouterMetricLogger { /** Logs the scanning started event. */ private void logScanningStarted() { logMediaRouterEvent( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SCANNING_STARTED, EVENT_TYPE_SCANNING_STARTED, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_UNSPECIFIED, /* routingChangeInfo= */ null); } Loading @@ -444,7 +517,7 @@ final class MediaRouterMetricLogger { /** Logs the scanning stopped event. */ private void logScanningStopped() { logMediaRouterEvent( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SCANNING_STOPPED, EVENT_TYPE_SCANNING_STOPPED, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_UNSPECIFIED, /* routingChangeInfo= */ null); } Loading @@ -460,16 +533,20 @@ final class MediaRouterMetricLogger { /** Class to store request info. */ static class RequestInfo { public final long mUniqueRequestId; public final int mEventType; public final @EventType int mEventType; public final RoutingChangeInfo mRoutingChangeInfo; /** * Constructor for {@link RequestInfo}. * * @param uniqueRequestId The unique request id. * @param eventType The event type. * @param eventType The routing event type. * @param routingChangeInfo The routing change request information. */ RequestInfo(long uniqueRequestId, int eventType, RoutingChangeInfo routingChangeInfo) { RequestInfo( long uniqueRequestId, @EventType int eventType, RoutingChangeInfo routingChangeInfo) { mUniqueRequestId = uniqueRequestId; mEventType = eventType; mRoutingChangeInfo = routingChangeInfo; Loading services/tests/media/mediarouterservicetest/src/com/android/server/media/MediaRouterMetricLoggerTest.java +65 −14 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +21 −29 Original line number Diff line number Diff line Loading @@ -27,11 +27,11 @@ import static android.media.MediaRouter2Utils.getOriginalId; import static android.media.MediaRouter2Utils.getProviderId; import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_DESELECT_ROUTE; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_RELEASE_SESSION; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SELECT_ROUTE; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_TRANSFER_TO_ROUTE; import static com.android.server.media.MediaRouterMetricLogger.EVENT_TYPE_CREATE_SESSION; import static com.android.server.media.MediaRouterMetricLogger.EVENT_TYPE_DESELECT_ROUTE; import static com.android.server.media.MediaRouterMetricLogger.EVENT_TYPE_RELEASE_SESSION; import static com.android.server.media.MediaRouterMetricLogger.EVENT_TYPE_SELECT_ROUTE; import static com.android.server.media.MediaRouterMetricLogger.EVENT_TYPE_TRANSFER_TO_ROUTE; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_INVALID_COMMAND; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_INVALID_ROUTE_ID; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_INVALID_SESSION_ID; Loading Loading @@ -1514,7 +1514,7 @@ class MediaRouter2ServiceImpl { if (routerRecord == null) { mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION, EVENT_TYPE_CREATE_SESSION, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_ROUTER_RECORD_NOT_FOUND, routingChangeInfo); return; Loading @@ -1537,7 +1537,7 @@ class MediaRouter2ServiceImpl { if (manager == null || manager.mLastSessionCreationRequest == null) { Slog.w(TAG, "requestCreateSessionWithRouter2Locked: Ignoring unknown request."); mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION, EVENT_TYPE_CREATE_SESSION, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_MANAGER_RECORD_NOT_FOUND, routingChangeInfo); routerRecord.notifySessionCreationFailed(requestId); Loading @@ -1550,7 +1550,7 @@ class MediaRouter2ServiceImpl { "requestCreateSessionWithRouter2Locked: " + "Ignoring unmatched routing session."); mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION, EVENT_TYPE_CREATE_SESSION, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_INVALID_SESSION_ID, routingChangeInfo); routerRecord.notifySessionCreationFailed(requestId); Loading @@ -1569,7 +1569,7 @@ class MediaRouter2ServiceImpl { "requestCreateSessionWithRouter2Locked: " + "Ignoring unmatched route."); mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION, EVENT_TYPE_CREATE_SESSION, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_INVALID_ROUTE_ID, routingChangeInfo); routerRecord.notifySessionCreationFailed(requestId); Loading @@ -1584,7 +1584,7 @@ class MediaRouter2ServiceImpl { && !TextUtils.equals(route.getId(), defaultRouteId)) { Slog.w(TAG, "MODIFY_AUDIO_ROUTING permission is required to transfer to" + route); mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION, EVENT_TYPE_CREATE_SESSION, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_PERMISSION_DENIED, routingChangeInfo); routerRecord.notifySessionCreationFailed(requestId); Loading @@ -1594,9 +1594,7 @@ class MediaRouter2ServiceImpl { long uniqueRequestId = toUniqueRequestId(routerRecord.mRouterId, requestId); mMediaRouterMetricLogger.addRequestInfo( uniqueRequestId, MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION, routingChangeInfo); uniqueRequestId, EVENT_TYPE_CREATE_SESSION, routingChangeInfo); mMediaRouterMetricLogger.notifyRoutingChangeRequested(uniqueRequestId, routingChangeInfo); userHandler.sendMessage( obtainMessage( Loading @@ -1621,7 +1619,7 @@ class MediaRouter2ServiceImpl { if (routerRecord == null) { mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SELECT_ROUTE, EVENT_TYPE_SELECT_ROUTE, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_ROUTER_RECORD_NOT_FOUND, routingChangeInfo); return; Loading @@ -1633,7 +1631,7 @@ class MediaRouter2ServiceImpl { "selectRouteWithRouter2 | router: %s(id: %d), route: %s", routerRecord.mPackageName, routerRecord.mRouterId, route.getId())); mMediaRouterMetricLogger.logOperationTriggered( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SELECT_ROUTE, EVENT_TYPE_SELECT_ROUTE, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_UNSPECIFIED, routingChangeInfo); Loading @@ -1654,7 +1652,7 @@ class MediaRouter2ServiceImpl { if (routerRecord == null) { mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_DESELECT_ROUTE, EVENT_TYPE_DESELECT_ROUTE, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_ROUTER_RECORD_NOT_FOUND, routingChangeInfo); return; Loading @@ -1666,7 +1664,7 @@ class MediaRouter2ServiceImpl { "deselectRouteWithRouter2 | router: %s(id: %d), route: %s", routerRecord.mPackageName, routerRecord.mRouterId, route.getId())); mMediaRouterMetricLogger.logOperationTriggered( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_DESELECT_ROUTE, EVENT_TYPE_DESELECT_ROUTE, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_UNSPECIFIED, routingChangeInfo); Loading @@ -1688,7 +1686,7 @@ class MediaRouter2ServiceImpl { if (routerRecord == null) { mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_TRANSFER_TO_ROUTE, EVENT_TYPE_TRANSFER_TO_ROUTE, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_ROUTER_RECORD_NOT_FOUND, routingChangeInfo); return; Loading @@ -1700,7 +1698,7 @@ class MediaRouter2ServiceImpl { "transferToRouteWithRouter2 | router: %s(id: %d), route: %s", routerRecord.mPackageName, routerRecord.mRouterId, route.getId())); mMediaRouterMetricLogger.logOperationTriggered( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_TRANSFER_TO_ROUTE, EVENT_TYPE_TRANSFER_TO_ROUTE, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_UNSPECIFIED, routingChangeInfo); Loading Loading @@ -1763,7 +1761,7 @@ class MediaRouter2ServiceImpl { if (routerRecord == null) { mMediaRouterMetricLogger.logOperationFailure( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_RELEASE_SESSION, EVENT_TYPE_RELEASE_SESSION, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_ROUTER_RECORD_NOT_FOUND, /* routingChangeInfo= */ null); return; Loading Loading @@ -2105,9 +2103,7 @@ class MediaRouter2ServiceImpl { long uniqueRequestId = toUniqueRequestId(managerRecord.mManagerId, requestId); mMediaRouterMetricLogger.addRequestInfo( uniqueRequestId, MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SELECT_ROUTE, routingChangeInfo); uniqueRequestId, EVENT_TYPE_SELECT_ROUTE, routingChangeInfo); managerRecord.mUserRecord.mHandler.sendMessage( obtainMessage(UserHandler::selectRouteOnHandler, Loading Loading @@ -2139,9 +2135,7 @@ class MediaRouter2ServiceImpl { long uniqueRequestId = toUniqueRequestId(managerRecord.mManagerId, requestId); mMediaRouterMetricLogger.addRequestInfo( uniqueRequestId, MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_DESELECT_ROUTE, routingChangeInfo); uniqueRequestId, EVENT_TYPE_DESELECT_ROUTE, routingChangeInfo); managerRecord.mUserRecord.mHandler.sendMessage( obtainMessage(UserHandler::deselectRouteOnHandler, Loading Loading @@ -2176,9 +2170,7 @@ class MediaRouter2ServiceImpl { long uniqueRequestId = toUniqueRequestId(managerRecord.mManagerId, requestId); mMediaRouterMetricLogger.addRequestInfo( uniqueRequestId, MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_TRANSFER_TO_ROUTE, routingChangeInfo); uniqueRequestId, EVENT_TYPE_TRANSFER_TO_ROUTE, routingChangeInfo); managerRecord.mUserRecord.mHandler.sendMessage( obtainMessage( Loading
services/core/java/com/android/server/media/MediaRouterMetricLogger.java +91 −14 Original line number Diff line number Diff line Loading @@ -26,8 +26,15 @@ import static android.media.RoutingSessionInfo.TRANSFER_REASON_APP; import static android.media.RoutingSessionInfo.TRANSFER_REASON_FALLBACK; import static android.media.RoutingSessionInfo.TRANSFER_REASON_SYSTEM_REQUEST; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SYSTEM_ROUTING_SESSION; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_DESELECT_ROUTE; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_RELEASE_SESSION; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SCANNING_STARTED; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SCANNING_STOPPED; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SELECT_ROUTE; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_TRANSFER_TO_ROUTE; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_UNSPECIFIED; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_FAILED_TO_REROUTE_SYSTEM_MEDIA; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_INVALID_COMMAND; import static com.android.server.media.MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_NETWORK_ERROR; Loading @@ -47,6 +54,7 @@ import static com.android.server.media.MediaRouterStatsLog.ROUTING_CHANGE_REPORT import static com.android.server.media.MediaRouterStatsLog.ROUTING_CHANGE_REPORTED__TRANSFER_REASON__TRANSFER_REASON_SYSTEM_REQUEST; import static com.android.server.media.MediaRouterStatsLog.ROUTING_CHANGE_REPORTED__TRANSFER_REASON__TRANSFER_REASON_UNSPECIFIED; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.media.MediaRoute2ProviderService; Loading @@ -64,6 +72,8 @@ import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Logs metrics for MediaRouter2. Loading @@ -71,6 +81,32 @@ import java.io.PrintWriter; * @hide */ final class MediaRouterMetricLogger { public static final int EVENT_TYPE_UNSPECIFIED = 0; public static final int EVENT_TYPE_CREATE_SESSION = 1; public static final int EVENT_TYPE_CREATE_SYSTEM_ROUTING_SESSION = 2; public static final int EVENT_TYPE_RELEASE_SESSION = 3; public static final int EVENT_TYPE_SELECT_ROUTE = 4; public static final int EVENT_TYPE_DESELECT_ROUTE = 5; public static final int EVENT_TYPE_TRANSFER_TO_ROUTE = 6; public static final int EVENT_TYPE_SCANNING_STARTED = 7; public static final int EVENT_TYPE_SCANNING_STOPPED = 8; @IntDef( prefix = "EVENT_TYPE", value = { EVENT_TYPE_UNSPECIFIED, EVENT_TYPE_CREATE_SESSION, EVENT_TYPE_CREATE_SYSTEM_ROUTING_SESSION, EVENT_TYPE_RELEASE_SESSION, EVENT_TYPE_SELECT_ROUTE, EVENT_TYPE_DESELECT_ROUTE, EVENT_TYPE_TRANSFER_TO_ROUTE, EVENT_TYPE_SCANNING_STARTED, EVENT_TYPE_SCANNING_STOPPED }) @Retention(RetentionPolicy.SOURCE) public @interface EventType {} private static final String TAG = "MediaRouterMetricLogger"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final int REQUEST_INFO_CACHE_CAPACITY = 100; Loading Loading @@ -138,10 +174,11 @@ final class MediaRouterMetricLogger { * Adds a new request info to the cache. * * @param uniqueRequestId The unique request id. * @param eventType The event type. * @param eventType The routing event type. * @param routingChangeInfo The routing change request information. */ public void addRequestInfo( long uniqueRequestId, int eventType, RoutingChangeInfo routingChangeInfo) { long uniqueRequestId, @EventType int eventType, RoutingChangeInfo routingChangeInfo) { RequestInfo requestInfo = new RequestInfo(uniqueRequestId, eventType, routingChangeInfo); mRequestInfoCache.put(requestInfo.mUniqueRequestId, requestInfo); } Loading @@ -159,21 +196,24 @@ final class MediaRouterMetricLogger { /** * Logs an operation failure. * * @param eventType The event type. * @param eventType The routing event type. * @param result The result of the operation. * @param routingChangeInfo The routing change request information. */ public void logOperationFailure( int eventType, int result, RoutingChangeInfo routingChangeInfo) { @EventType int eventType, int result, RoutingChangeInfo routingChangeInfo) { logMediaRouterEvent(eventType, result, routingChangeInfo); } /** * Logs an operation triggered. * * @param eventType The event type. * @param eventType The routing event type. * @param result The result of the operation. * @param routingChangeInfo The routing change request information. */ public void logOperationTriggered( int eventType, int result, RoutingChangeInfo routingChangeInfo) { @EventType int eventType, int result, RoutingChangeInfo routingChangeInfo) { logMediaRouterEvent(eventType, result, routingChangeInfo); } Loading @@ -193,7 +233,7 @@ final class MediaRouterMetricLogger { return; } int eventType = requestInfo.mEventType; @EventType int eventType = requestInfo.mEventType; logMediaRouterEvent(eventType, result, requestInfo.mRoutingChangeInfo); removeRequestInfo(uniqueRequestId); Loading Loading @@ -384,6 +424,39 @@ final class MediaRouterMetricLogger { }; } /** * Converts {@link EventType} to the enum defined for logging. * * @param eventType the routing event type. * @return the event type as per the enum defined for logging. */ @VisibleForTesting /* package */ static int convertEventTypeForLogging(@EventType int eventType) { return switch (eventType) { case EVENT_TYPE_UNSPECIFIED -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_UNSPECIFIED; case EVENT_TYPE_CREATE_SESSION -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SESSION; case EVENT_TYPE_CREATE_SYSTEM_ROUTING_SESSION -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_CREATE_SYSTEM_ROUTING_SESSION; case EVENT_TYPE_RELEASE_SESSION -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_RELEASE_SESSION; case EVENT_TYPE_SELECT_ROUTE -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SELECT_ROUTE; case EVENT_TYPE_DESELECT_ROUTE -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_DESELECT_ROUTE; case EVENT_TYPE_TRANSFER_TO_ROUTE -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_TRANSFER_TO_ROUTE; case EVENT_TYPE_SCANNING_STARTED -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SCANNING_STARTED; case EVENT_TYPE_SCANNING_STOPPED -> MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SCANNING_STOPPED; default -> throw new IllegalArgumentException( "No mapping found for the given event type: " + eventType); }; } @VisibleForTesting /* package */ int getRequestInfoCacheCapacity() { return mRequestInfoCache.maxSize(); Loading Loading @@ -415,7 +488,7 @@ final class MediaRouterMetricLogger { } private void logMediaRouterEvent( int eventType, int result, RoutingChangeInfo routingChangeInfo) { @EventType int eventType, int result, RoutingChangeInfo routingChangeInfo) { int entryPoint = routingChangeInfo != null ? convertEntryPointForLogging(routingChangeInfo.getEntryPoint()) Loading @@ -423,7 +496,7 @@ final class MediaRouterMetricLogger { boolean isSuggested = routingChangeInfo != null && routingChangeInfo.isSuggested(); MediaRouterStatsLog.write( MediaRouterStatsLog.MEDIA_ROUTER_EVENT_REPORTED, eventType, convertEventTypeForLogging(eventType), result, entryPoint, isSuggested); Loading @@ -436,7 +509,7 @@ final class MediaRouterMetricLogger { /** Logs the scanning started event. */ private void logScanningStarted() { logMediaRouterEvent( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SCANNING_STARTED, EVENT_TYPE_SCANNING_STARTED, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_UNSPECIFIED, /* routingChangeInfo= */ null); } Loading @@ -444,7 +517,7 @@ final class MediaRouterMetricLogger { /** Logs the scanning stopped event. */ private void logScanningStopped() { logMediaRouterEvent( MEDIA_ROUTER_EVENT_REPORTED__EVENT_TYPE__EVENT_TYPE_SCANNING_STOPPED, EVENT_TYPE_SCANNING_STOPPED, MEDIA_ROUTER_EVENT_REPORTED__RESULT__RESULT_UNSPECIFIED, /* routingChangeInfo= */ null); } Loading @@ -460,16 +533,20 @@ final class MediaRouterMetricLogger { /** Class to store request info. */ static class RequestInfo { public final long mUniqueRequestId; public final int mEventType; public final @EventType int mEventType; public final RoutingChangeInfo mRoutingChangeInfo; /** * Constructor for {@link RequestInfo}. * * @param uniqueRequestId The unique request id. * @param eventType The event type. * @param eventType The routing event type. * @param routingChangeInfo The routing change request information. */ RequestInfo(long uniqueRequestId, int eventType, RoutingChangeInfo routingChangeInfo) { RequestInfo( long uniqueRequestId, @EventType int eventType, RoutingChangeInfo routingChangeInfo) { mUniqueRequestId = uniqueRequestId; mEventType = eventType; mRoutingChangeInfo = routingChangeInfo; Loading
services/tests/media/mediarouterservicetest/src/com/android/server/media/MediaRouterMetricLoggerTest.java +65 −14 File changed.Preview size limit exceeded, changes collapsed. Show changes