Merge "Add telecom log marking shell command."
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 6873e42..6757ead 100755
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -5583,4 +5583,16 @@
             UserHandle userHandle, ConnectionServiceWrapper service) {
         mConnectionServiceRepository.setService(componentName, userHandle, service);
     }
+
+    /**
+     * Generates a log "marking".  This is a unique call event which contains a specified message.
+     * A log mark is triggered by the command: adb shell telecom log-mark MESSAGE
+     * A tester can use this when executing tests to make it very clear when a particular test step
+     * was reached.
+     * @param message the message to mark in the logs.
+     */
+    public void requestLogMark(String message) {
+        mCalls.forEach(c -> Log.addEvent(c, LogUtils.Events.USER_LOG_MARK, message));
+        Log.addEvent(null /* global */, LogUtils.Events.USER_LOG_MARK, message);
+    }
 }
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index 620378b..80bcbe0 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -1961,6 +1961,24 @@
         }
 
         @Override
+        public void requestLogMark(String message) {
+            try {
+                Log.startSession("TSI.rLM");
+                enforceShellOnly(Binder.getCallingUid(), "requestLogMark is for shell only");
+                synchronized (mLock) {
+                    long token = Binder.clearCallingIdentity();
+                    try {
+                        mCallsManager.requestLogMark(message);
+                    } finally {
+                        Binder.restoreCallingIdentity(token);
+                    }
+                }
+            } finally {
+                Log.endSession();
+            }
+        }
+
+        @Override
         public void setTestPhoneAcctSuggestionComponent(String flattenedComponentName) {
             try {
                 Log.startSession("TSI.sPASA");