Log the saved historical HBM events.

HighBrightnessModeController saves all the previous HBM events within
the HBM time window. This CL adds those events to dumpsys.

Bug: 189384189
Test: Manually test and verify output of 'adb shell dumpsys display'
Change-Id: I3cbd83b4fb4714cf697d2e7f29a00edfe6bdb1ed
diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
index 170564d..47b2604 100644
--- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java
+++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
@@ -771,7 +771,7 @@
                     + ", transition: " + transitionPoint
                     + ", timeWindow: " + timeWindowMillis + "ms"
                     + ", timeMax: " + timeMaxMillis + "ms"
-                    + ", timeMin: " + timeMinMillis
+                    + ", timeMin: " + timeMinMillis + "ms"
                     + "} ";
         }
     }
diff --git a/services/core/java/com/android/server/display/HighBrightnessModeController.java b/services/core/java/com/android/server/display/HighBrightnessModeController.java
index b948777..57a8c4b 100644
--- a/services/core/java/com/android/server/display/HighBrightnessModeController.java
+++ b/services/core/java/com/android/server/display/HighBrightnessModeController.java
@@ -22,6 +22,7 @@
 import android.os.PowerManager;
 import android.os.SystemClock;
 import android.util.Slog;
+import android.util.TimeUtils;
 import android.view.SurfaceControlHdrLayerInfoListener;
 
 import com.android.internal.annotations.VisibleForTesting;
@@ -189,6 +190,10 @@
     }
 
     void dump(PrintWriter pw) {
+        mHandler.runWithScissors(() -> dumpLocal(pw), 1000);
+    }
+
+    private void dumpLocal(PrintWriter pw) {
         pw.println("HighBrightnessModeController:");
         pw.println("  mCurrentMin=" + getCurrentBrightnessMin());
         pw.println("  mCurrentMax=" + getCurrentBrightnessMax());
@@ -202,6 +207,29 @@
         pw.println("  mIsHdrLayerPresent=" + mIsHdrLayerPresent);
         pw.println("  mBrightnessMin=" + mBrightnessMin);
         pw.println("  mBrightnessMax=" + mBrightnessMax);
+        pw.println("  mRunningStartTimeMillis=" + TimeUtils.formatUptime(mRunningStartTimeMillis));
+        pw.println("  mEvents=");
+        final long currentTime = mClock.uptimeMillis();
+        long lastStartTime = currentTime;
+        if (mRunningStartTimeMillis != -1) {
+            lastStartTime = dumpHbmEvent(pw, new HbmEvent(mRunningStartTimeMillis, currentTime));
+        }
+        for (HbmEvent event : mEvents) {
+            if (lastStartTime > event.endTimeMillis) {
+                pw.println("    event: [normal brightness]: "
+                        + TimeUtils.formatDuration(lastStartTime - event.endTimeMillis));
+            }
+            lastStartTime = dumpHbmEvent(pw, event);
+        }
+    }
+
+    private long dumpHbmEvent(PrintWriter pw, HbmEvent event) {
+        final long duration = event.endTimeMillis - event.startTimeMillis;
+        pw.println("    event: ["
+                + TimeUtils.formatUptime(event.startTimeMillis) + ", "
+                + TimeUtils.formatUptime(event.endTimeMillis) + "] ("
+                + TimeUtils.formatDuration(duration) + ")");
+        return event.startTimeMillis;
     }
 
     private boolean isCurrentlyAllowed() {