diff options
| -rw-r--r-- | telecomm/java/android/telecom/Log.java | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/telecomm/java/android/telecom/Log.java b/telecomm/java/android/telecom/Log.java index 884dcf2dfbad..a34094ce6452 100644 --- a/telecomm/java/android/telecom/Log.java +++ b/telecomm/java/android/telecom/Log.java @@ -69,6 +69,7 @@ public class Log { private static final Object sSingletonSync = new Object(); private static EventManager sEventManager; private static SessionManager sSessionManager; + private static Object sLock = null; /** * Tracks whether user-activated extended logging is enabled. @@ -388,6 +389,19 @@ public class Log { } /** + * Sets the main telecom sync lock used within Telecom. This is used when building log messages + * so that we can identify places in the code where we are doing something outside of the + * Telecom lock. + * @param lock The lock. + */ + public static void setLock(Object lock) { + // Don't do lock monitoring on user builds. + if (!Build.IS_USER) { + sLock = lock; + } + } + + /** * If user enabled extended logging is enabled and the time limit has passed, disables the * extended logging. */ @@ -512,7 +526,10 @@ public class Log { args.length); msg = format + " (An error occurred while formatting the message.)"; } - return String.format(Locale.US, "%s: %s%s", prefix, msg, sessionPostfix); + // If a lock was set, check if this thread holds that lock and output an emoji that lets + // the developer know whether a log message came from within the Telecom lock or not. + String isLocked = sLock != null ? (Thread.holdsLock(sLock) ? "\uD83D\uDD12" : "❗") : ""; + return String.format(Locale.US, "%s: %s%s%s", prefix, msg, sessionPostfix, isLocked); } /** |