Add color mode metric to ViewRootImpl
Log how long a window was in a particular color mode
Bug: 329475035
Flag: EXEMPT logging only
Test: builds
Change-Id: Idd2104f9aafe99954dba81f56691fb10a7405645
diff --git a/Android.bp b/Android.bp
index 811755d..583784a 100644
--- a/Android.bp
+++ b/Android.bp
@@ -150,6 +150,7 @@
// etc.
":framework-javastream-protos",
":statslog-framework-java-gen", // FrameworkStatsLog.java
+ ":statslog-hwui-java-gen", // HwuiStatsLog.java
":audio_policy_configuration_V7_0",
],
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 5afc7b2..b921213 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -284,6 +284,7 @@
import com.android.internal.view.RootViewSurfaceTaker;
import com.android.internal.view.SurfaceCallbackHelper;
import com.android.modules.expresslog.Counter;
+import com.android.os.coregraphics.HwuiStatsLog;
import libcore.io.IoUtils;
@@ -1228,6 +1229,8 @@
// The latest input event from the gesture that was used to resolve the pointer icon.
private MotionEvent mPointerIconEvent = null;
+ private @ActivityInfo.ColorMode int mCurrentColorMode = ActivityInfo.COLOR_MODE_DEFAULT;
+ private long mColorModeLastSetMillis = -1;
public ViewRootImpl(Context context, Display display) {
this(context, display, WindowManagerGlobal.getWindowSession(), new WindowLayout());
@@ -2646,6 +2649,7 @@
mFirstFramePresentedTimeNs = -1;
}
}
+ logColorMode(mCurrentColorMode, true);
}
@@ -6341,6 +6345,7 @@
if (mAttachInfo.mThreadedRenderer == null) {
return;
}
+
boolean isHdr = colorMode == ActivityInfo.COLOR_MODE_HDR
|| colorMode == ActivityInfo.COLOR_MODE_HDR10;
if (isHdr && !mDisplay.isHdrSdrRatioAvailable()) {
@@ -6353,6 +6358,9 @@
&& !getConfiguration().isScreenWideColorGamut()) {
colorMode = ActivityInfo.COLOR_MODE_DEFAULT;
}
+
+ logColorMode(colorMode, false);
+
float automaticRatio = mAttachInfo.mThreadedRenderer.setColorMode(colorMode);
if (desiredRatio == 0 || desiredRatio > automaticRatio) {
desiredRatio = automaticRatio;
@@ -10005,6 +10013,7 @@
mAttachInfo.mThreadedRenderer = null;
mAttachInfo.mHardwareAccelerated = false;
+ logColorMode(mCurrentColorMode, true);
}
}
@@ -13346,4 +13355,27 @@
mInfrequentUpdateCount = 0;
}
}
+
+ private void logColorMode(@ActivityInfo.ColorMode int colorMode, boolean windowStopped) {
+ if (mColorModeLastSetMillis == -1 && windowStopped) {
+ Log.d(TAG, "Skipping stats log for color mode");
+ return;
+ }
+
+ long currentTimeMillis = System.currentTimeMillis();
+
+ if (windowStopped) {
+ HwuiStatsLog.write(HwuiStatsLog.HARDWARE_RENDERER_EVENT, Process.myUid(),
+ currentTimeMillis - mColorModeLastSetMillis, mCurrentColorMode);
+ mColorModeLastSetMillis = -1;
+ } else {
+ if (mColorModeLastSetMillis > 0) {
+ HwuiStatsLog.write(HwuiStatsLog.HARDWARE_RENDERER_EVENT, Process.myUid(),
+ currentTimeMillis - mColorModeLastSetMillis, mCurrentColorMode);
+ }
+ mColorModeLastSetMillis = currentTimeMillis;
+ }
+
+ mCurrentColorMode = colorMode;
+ }
}
diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp
index 23cd3ce..266c236 100644
--- a/libs/hwui/Android.bp
+++ b/libs/hwui/Android.bp
@@ -501,6 +501,13 @@
],
}
+genrule {
+ name: "statslog-hwui-java-gen",
+ tools: ["stats-log-api-gen"],
+ cmd: "$(location stats-log-api-gen) --java $(out) --module hwui --javaPackage com.android.os.coregraphics --javaClass HwuiStatsLog",
+ out: ["com/android/os/coregraphics/HwuiStatsLog.java"],
+}
+
// ------------------------
// library
// ------------------------