diff options
author | Shaotang Li <shaotangli@google.com> | 2018-07-19 17:37:17 +0800 |
---|---|---|
committer | Shaotang Li <shaotangli@google.com> | 2018-09-12 11:20:15 +0800 |
commit | 03ec7ce2dd4334d7c855c03101e1a445195b4a0d (patch) | |
tree | 609723950a714afabfdbfe603602a59cc8e1104e | |
parent | b1b1c64f2228e7d46ee8b6d48ef76105f92157c5 (diff) | |
download | android_packages_services_Telecomm-03ec7ce2dd4334d7c855c03101e1a445195b4a0d.tar.gz android_packages_services_Telecomm-03ec7ce2dd4334d7c855c03101e1a445195b4a0d.tar.bz2 android_packages_services_Telecomm-03ec7ce2dd4334d7c855c03101e1a445195b4a0d.zip |
Add new telecom metrics for emergency dialer
These includes,
1. The source where user initiated the call.
2. The duration between START_CONNECTION and REQUEST_DISCONNECT.
Bug: 111818008
Test: manual and check the result of
'adb shell dumpsys telecom' for metrics data
Change-Id: I7d57ac29ad4bb6c8506b7a37b2f1bc63253fa9cb
-rw-r--r-- | proto/telecom.proto | 16 | ||||
-rw-r--r-- | src/com/android/server/telecom/Analytics.java | 40 | ||||
-rw-r--r-- | src/com/android/server/telecom/CallsManager.java | 13 | ||||
-rw-r--r-- | src/com/android/server/telecom/LogUtils.java | 4 |
4 files changed, 72 insertions, 1 deletions
diff --git a/proto/telecom.proto b/proto/telecom.proto index 9fd64dbc..5539f7f6 100644 --- a/proto/telecom.proto +++ b/proto/telecom.proto @@ -145,6 +145,7 @@ message EventTimingEntry { BLOCK_CHECK_FINISHED_TIMING = 9; FILTERING_COMPLETED_TIMING = 10; FILTERING_TIMED_OUT_TIMING = 11; + START_CONNECTION_TO_REQUEST_DISCONNECT_TIMING = 12; } // The name of the event timing. @@ -230,6 +231,18 @@ message CallLog { CONNECTION_MANAGER_NOT_SUPPORTED = 10; } + // The source where user initiated this call. + enum CallSource { + // Call source is not specified. + CALL_SOURCE_UNSPECIFIED = 0; + + // Dialpad at emergency dialer. + CALL_SOURCE_EMERGENCY_DIALPAD = 1; + + // Shortcut button at emergency dialer. + CALL_SOURCE_EMERGENCY_SHORTCUT = 2; + } + // Start time of the connection. // Rounded to the nearest 5 minute interval. optional int64 start_time_5min = 1; @@ -283,4 +296,7 @@ message CallLog { // A bitmask of the properties that were set at any point during the call. // Bits are defined by android.telecom.Connection.PROPERTY_* constants. optional int32 connection_properties = 17; + + // Call source. + optional CallSource call_source = 18; } diff --git a/src/com/android/server/telecom/Analytics.java b/src/com/android/server/telecom/Analytics.java index c7b8afdb..d524c105 100644 --- a/src/com/android/server/telecom/Analytics.java +++ b/src/com/android/server/telecom/Analytics.java @@ -141,6 +141,9 @@ public class Analytics { ParcelableCallAnalytics.EventTiming.FILTERING_COMPLETED_TIMING); put(LogUtils.Events.Timings.FILTERING_TIMED_OUT_TIMING, ParcelableCallAnalytics.EventTiming.FILTERING_TIMED_OUT_TIMING); + put(LogUtils.Events.Timings.START_CONNECTION_TO_REQUEST_DISCONNECT_TIMING, + ParcelableCallAnalytics.EventTiming. + START_CONNECTION_TO_REQUEST_DISCONNECT_TIMING); }}; public static final Map<Integer, String> sSessionIdToLogSession = new HashMap<>(); @@ -192,6 +195,9 @@ public class Analytics { public void addCallProperties(int properties) { } + + public void setCallSource(int callSource) { + } } /** @@ -225,6 +231,7 @@ public class Analytics { public List<TelecomLogClass.VideoEvent> videoEvents; public List<TelecomLogClass.InCallServiceInfo> inCallServiceInfos; public int callProperties = 0; + public int callSource = CALL_SOURCE_UNSPECIFIED; private long mTimeOfLastVideoEvent = -1; @@ -254,6 +261,7 @@ public class Analytics { this.isVideo = other.isVideo; this.videoEvents = other.videoEvents; this.callProperties = other.callProperties; + this.callSource = other.callSource; if (other.callTerminationReason != null) { this.callTerminationReason = new DisconnectCause( @@ -363,6 +371,11 @@ public class Analytics { } @Override + public void setCallSource(int callSource) { + this.callSource = callSource; + } + + @Override public String toString() { return "{\n" + " startTime: " + startTime + '\n' @@ -378,6 +391,7 @@ public class Analytics { + " inCallServices: " + getInCallServicesString() + '\n' + " callProperties: " + Connection.propertiesToStringShort(callProperties) + '\n' + + " callSource: " + getCallSourceString() + '\n' + "}\n"; } @@ -420,6 +434,8 @@ public class Analytics { videoEventProto.getVideoState()) ).collect(Collectors.toList())); + result.setCallSource(analyticsProto.getCallSource()); + return result; } @@ -446,7 +462,8 @@ public class Analytics { .setIsCreatedFromExistingConnection(createdFromExistingConnection) .setIsEmergencyCall(isEmergency) .setIsVideoCall(isVideo) - .setConnectionProperties(callProperties); + .setConnectionProperties(callProperties) + .setCallSource(callSource); result.connectionService = new String[] {connectionService}; if (callEvents != null) { @@ -510,6 +527,19 @@ public class Analytics { s.append("]"); return s.toString(); } + + private String getCallSourceString() { + switch (callSource) { + case CALL_SOURCE_UNSPECIFIED: + return "UNSPECIFIED"; + case CALL_SOURCE_EMERGENCY_DIALPAD: + return "EMERGENCY_DIALPAD"; + case CALL_SOURCE_EMERGENCY_SHORTCUT: + return "EMERGENCY_SHORTCUT"; + default: + return "UNSPECIFIED"; + } + } } public static final String TAG = "TelecomAnalytics"; @@ -525,6 +555,14 @@ public class Analytics { public static final int SIP_PHONE = ParcelableCallAnalytics.SIP_PHONE; public static final int THIRD_PARTY_PHONE = ParcelableCallAnalytics.THIRD_PARTY_PHONE; + // Constants for call source + public static final int CALL_SOURCE_UNSPECIFIED = + ParcelableCallAnalytics.CALL_SOURCE_UNSPECIFIED; + public static final int CALL_SOURCE_EMERGENCY_DIALPAD = + ParcelableCallAnalytics.CALL_SOURCE_EMERGENCY_DIALPAD; + public static final int CALL_SOURCE_EMERGENCY_SHORTCUT = + ParcelableCallAnalytics.CALL_SOURCE_EMERGENCY_SHORTCUT; + // Constants for video events public static final int SEND_LOCAL_SESSION_MODIFY_REQUEST = ParcelableCallAnalytics.VideoEvent.SEND_LOCAL_SESSION_MODIFY_REQUEST; diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java index 941259b7..e078dee6 100644 --- a/src/com/android/server/telecom/CallsManager.java +++ b/src/com/android/server/telecom/CallsManager.java @@ -1287,6 +1287,7 @@ public class CallsManager extends Call.ListenerBase } } setIntentExtrasAndStartTime(call, extras); + setCallSourceToAnalytics(call, originalIntent); if ((isPotentialMMICode(handle) || isPotentialInCallMMICode) && !needsAccountSelection) { // Do not add the call if it is a potential MMI code. @@ -3469,6 +3470,18 @@ public class CallsManager extends Call.ListenerBase call.setIntentExtras(extras); } + private void setCallSourceToAnalytics(Call call, Intent originalIntent) { + if (originalIntent == null) { + return; + } + + int callSource = originalIntent.getIntExtra(TelecomManager.EXTRA_CALL_SOURCE, + Analytics.CALL_SOURCE_UNSPECIFIED); + + // Call source is only used by metrics, so we simply set it to Analytics directly. + call.getAnalytics().setCallSource(callSource); + } + /** * Notifies the {@link android.telecom.ConnectionService} associated with a * {@link PhoneAccountHandle} that the attempt to create a new connection has failed. diff --git a/src/com/android/server/telecom/LogUtils.java b/src/com/android/server/telecom/LogUtils.java index 388ac955..4e966f02 100644 --- a/src/com/android/server/telecom/LogUtils.java +++ b/src/com/android/server/telecom/LogUtils.java @@ -151,6 +151,8 @@ public class LogUtils { public static final String BLOCK_CHECK_FINISHED_TIMING = "block_check_finished"; public static final String FILTERING_COMPLETED_TIMING = "filtering_completed"; public static final String FILTERING_TIMED_OUT_TIMING = "filtering_timed_out"; + public static final String START_CONNECTION_TO_REQUEST_DISCONNECT_TIMING = + "start_connection_to_request_disconnect"; private static final TimedEventPair[] sTimedEvents = { new TimedEventPair(REQUEST_ACCEPT, SET_ACTIVE, ACCEPT_TIMING), @@ -171,6 +173,8 @@ public class LogUtils { FILTERING_COMPLETED_TIMING), new TimedEventPair(FILTERING_INITIATED, FILTERING_TIMED_OUT, FILTERING_TIMED_OUT_TIMING, 6000L), + new TimedEventPair(START_CONNECTION, REQUEST_DISCONNECT, + START_CONNECTION_TO_REQUEST_DISCONNECT_TIMING), }; } } |