Merge "Add logging to MediaSessionStack"
diff --git a/services/core/java/com/android/server/media/MediaSessionStack.java b/services/core/java/com/android/server/media/MediaSessionStack.java
index 337d5e5..f2a39b8 100644
--- a/services/core/java/com/android/server/media/MediaSessionStack.java
+++ b/services/core/java/com/android/server/media/MediaSessionStack.java
@@ -24,6 +24,8 @@
 import android.util.Log;
 import android.util.SparseArray;
 
+import com.android.server.utils.EventLogger;
+
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
@@ -38,6 +40,8 @@
     private static final boolean DEBUG = MediaSessionService.DEBUG;
     private static final String TAG = "MediaSessionStack";
 
+    private static final int DUMP_EVENTS_MAX_COUNT = 70;
+
     /**
      * Listen the change in the media button session.
      */
@@ -57,6 +61,8 @@
     private final AudioPlayerStateMonitor mAudioPlayerStateMonitor;
     private final OnMediaButtonSessionChangedListener mOnMediaButtonSessionChangedListener;
 
+    private final EventLogger mEventLogger = new EventLogger(DUMP_EVENTS_MAX_COUNT, TAG);
+
     /**
      * The media button session which receives media key events.
      * It could be null if the previous media button session is released.
@@ -80,6 +86,11 @@
      * @param record The record to add.
      */
     public void addSession(MediaSessionRecordImpl record) {
+        mEventLogger.enqueue(EventLogger.StringEvent.from(
+                "addSession() (to bottom of stack)",
+                "record: %s",
+                record
+        ));
         mSessions.add(record);
         clearCache(record.getUserId());
 
@@ -95,6 +106,11 @@
      * @param record The record to remove.
      */
     public void removeSession(MediaSessionRecordImpl record) {
+        mEventLogger.enqueue(EventLogger.StringEvent.from(
+                "removeSession()",
+                "record: %s",
+                record
+        ));
         mSessions.remove(record);
         if (mMediaButtonSession == record) {
             // When the media button session is removed, nullify the media button session and do not
@@ -140,6 +156,11 @@
     public void onPlaybackStateChanged(
             MediaSessionRecordImpl record, boolean shouldUpdatePriority) {
         if (shouldUpdatePriority) {
+            mEventLogger.enqueue(EventLogger.StringEvent.from(
+                    "onPlaybackStateChanged() - Pushing session to top",
+                    "record: %s",
+                    record
+            ));
             mSessions.remove(record);
             mSessions.add(0, record);
             clearCache(record.getUserId());
@@ -344,6 +365,8 @@
         for (MediaSessionRecordImpl record : mSessions) {
             record.dump(pw, indent);
         }
+        pw.println(prefix + "Session stack events:");
+        mEventLogger.dump(pw, indent);
     }
 
     /**