Loading proto/src/metrics_constants/metrics_constants.proto +10 −0 Original line number Diff line number Diff line Loading @@ -6992,6 +6992,16 @@ message MetricsEvent { // OS: Q ACTION_PANEL_INTERACTION = 1658; // ACTION: Change phone orientation // OS: Q // SUBTYPE is orientation defined in Configuration.class ACTION_PHONE_ORIENTATION_CHANGED = 1659; // CATEGORY: ACTION_PHONE_ORIENTATION_CHANGED // OS: Q // Different display can have different orientations, so need to log display id FIELD_DISPLAY_ID = 1660; // ---- End Q Constants, all Q constants go above this line ---- // Add new aosp constants above this line. // END OF AOSP CONSTANTS Loading services/core/java/com/android/server/wm/DisplayContent.java +20 −0 Original line number Diff line number Diff line Loading @@ -145,6 +145,7 @@ import android.graphics.RectF; import android.graphics.Region; import android.graphics.Region.Op; import android.hardware.display.DisplayManagerInternal; import android.metrics.LogMaker; import android.os.Binder; import android.os.Debug; import android.os.Handler; Loading Loading @@ -178,6 +179,8 @@ import android.view.WindowManager; import android.view.WindowManagerPolicyConstants.PointerEventListener; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.util.ToBooleanFunction; import com.android.internal.util.function.TriConsumer; import com.android.server.AnimationThread; Loading Loading @@ -260,6 +263,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final UnknownAppVisibilityController mUnknownAppVisibilityController; BoundsAnimationController mBoundsAnimationController; private MetricsLogger mMetricsLogger; /** * List of clients without a transtiton animation that we notify once we are done * transitioning since they won't be notified through the app window animator. Loading Loading @@ -1980,11 +1985,19 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo @Override public void onConfigurationChanged(Configuration newParentConfig) { final int lastOrientation = getConfiguration().orientation; super.onConfigurationChanged(newParentConfig); if (mDisplayPolicy != null) { mDisplayPolicy.onConfigurationChanged(); } if (lastOrientation != getConfiguration().orientation) { getMetricsLogger().write( new LogMaker(MetricsEvent.ACTION_PHONE_ORIENTATION_CHANGED) .setSubtype(getConfiguration().orientation) .addTaggedData(MetricsEvent.FIELD_DISPLAY_ID, getDisplayId())); } // If there was no pinned stack, we still need to notify the controller of the display info // update as a result of the config change. if (mPinnedStackControllerLocked != null && !hasPinnedStack()) { Loading Loading @@ -4961,4 +4974,11 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo setLayoutNeeded(); mWmService.mWindowPlacerLocked.requestTraversal(); } protected MetricsLogger getMetricsLogger() { if (mMetricsLogger == null) { mMetricsLogger = new MetricsLogger(); } return mMetricsLogger; } } services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +26 −0 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ import android.annotation.SuppressLint; import android.app.WindowConfiguration; import android.content.res.Configuration; import android.graphics.Rect; import android.metrics.LogMaker; import android.os.SystemClock; import android.platform.test.annotations.Presubmit; import android.util.DisplayMetrics; Loading @@ -71,10 +72,13 @@ import androidx.test.filters.FlakyTest; import androidx.test.filters.SmallTest; import com.android.dx.mockito.inline.extended.ExtendedMockito; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.server.wm.utils.WmDisplayCutout; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import java.util.ArrayList; import java.util.Arrays; Loading Loading @@ -669,6 +673,28 @@ public class DisplayContentTests extends WindowTestsBase { } } @Test public void testOrientationChangeLogging() { MetricsLogger mockLogger = mock(MetricsLogger.class); Configuration oldConfig = new Configuration(); oldConfig.orientation = Configuration.ORIENTATION_LANDSCAPE; Configuration newConfig = new Configuration(); newConfig.orientation = Configuration.ORIENTATION_PORTRAIT; final DisplayContent displayContent = spy(createNewDisplay()); Mockito.doReturn(mockLogger).when(displayContent).getMetricsLogger(); Mockito.doReturn(oldConfig).doReturn(newConfig).when(displayContent).getConfiguration(); displayContent.onConfigurationChanged(newConfig); ArgumentCaptor<LogMaker> logMakerCaptor = ArgumentCaptor.forClass(LogMaker.class); verify(mockLogger).write(logMakerCaptor.capture()); assertThat(logMakerCaptor.getValue().getCategory(), is(MetricsProto.MetricsEvent.ACTION_PHONE_ORIENTATION_CHANGED)); assertThat(logMakerCaptor.getValue().getSubtype(), is(Configuration.ORIENTATION_PORTRAIT)); } private boolean isOptionsPanelAtRight(int displayId) { return (mWm.getPreferredOptionsPanelGravity(displayId) & Gravity.RIGHT) == Gravity.RIGHT; } Loading Loading
proto/src/metrics_constants/metrics_constants.proto +10 −0 Original line number Diff line number Diff line Loading @@ -6992,6 +6992,16 @@ message MetricsEvent { // OS: Q ACTION_PANEL_INTERACTION = 1658; // ACTION: Change phone orientation // OS: Q // SUBTYPE is orientation defined in Configuration.class ACTION_PHONE_ORIENTATION_CHANGED = 1659; // CATEGORY: ACTION_PHONE_ORIENTATION_CHANGED // OS: Q // Different display can have different orientations, so need to log display id FIELD_DISPLAY_ID = 1660; // ---- End Q Constants, all Q constants go above this line ---- // Add new aosp constants above this line. // END OF AOSP CONSTANTS Loading
services/core/java/com/android/server/wm/DisplayContent.java +20 −0 Original line number Diff line number Diff line Loading @@ -145,6 +145,7 @@ import android.graphics.RectF; import android.graphics.Region; import android.graphics.Region.Op; import android.hardware.display.DisplayManagerInternal; import android.metrics.LogMaker; import android.os.Binder; import android.os.Debug; import android.os.Handler; Loading Loading @@ -178,6 +179,8 @@ import android.view.WindowManager; import android.view.WindowManagerPolicyConstants.PointerEventListener; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.util.ToBooleanFunction; import com.android.internal.util.function.TriConsumer; import com.android.server.AnimationThread; Loading Loading @@ -260,6 +263,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final UnknownAppVisibilityController mUnknownAppVisibilityController; BoundsAnimationController mBoundsAnimationController; private MetricsLogger mMetricsLogger; /** * List of clients without a transtiton animation that we notify once we are done * transitioning since they won't be notified through the app window animator. Loading Loading @@ -1980,11 +1985,19 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo @Override public void onConfigurationChanged(Configuration newParentConfig) { final int lastOrientation = getConfiguration().orientation; super.onConfigurationChanged(newParentConfig); if (mDisplayPolicy != null) { mDisplayPolicy.onConfigurationChanged(); } if (lastOrientation != getConfiguration().orientation) { getMetricsLogger().write( new LogMaker(MetricsEvent.ACTION_PHONE_ORIENTATION_CHANGED) .setSubtype(getConfiguration().orientation) .addTaggedData(MetricsEvent.FIELD_DISPLAY_ID, getDisplayId())); } // If there was no pinned stack, we still need to notify the controller of the display info // update as a result of the config change. if (mPinnedStackControllerLocked != null && !hasPinnedStack()) { Loading Loading @@ -4961,4 +4974,11 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo setLayoutNeeded(); mWmService.mWindowPlacerLocked.requestTraversal(); } protected MetricsLogger getMetricsLogger() { if (mMetricsLogger == null) { mMetricsLogger = new MetricsLogger(); } return mMetricsLogger; } }
services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +26 −0 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ import android.annotation.SuppressLint; import android.app.WindowConfiguration; import android.content.res.Configuration; import android.graphics.Rect; import android.metrics.LogMaker; import android.os.SystemClock; import android.platform.test.annotations.Presubmit; import android.util.DisplayMetrics; Loading @@ -71,10 +72,13 @@ import androidx.test.filters.FlakyTest; import androidx.test.filters.SmallTest; import com.android.dx.mockito.inline.extended.ExtendedMockito; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.server.wm.utils.WmDisplayCutout; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import java.util.ArrayList; import java.util.Arrays; Loading Loading @@ -669,6 +673,28 @@ public class DisplayContentTests extends WindowTestsBase { } } @Test public void testOrientationChangeLogging() { MetricsLogger mockLogger = mock(MetricsLogger.class); Configuration oldConfig = new Configuration(); oldConfig.orientation = Configuration.ORIENTATION_LANDSCAPE; Configuration newConfig = new Configuration(); newConfig.orientation = Configuration.ORIENTATION_PORTRAIT; final DisplayContent displayContent = spy(createNewDisplay()); Mockito.doReturn(mockLogger).when(displayContent).getMetricsLogger(); Mockito.doReturn(oldConfig).doReturn(newConfig).when(displayContent).getConfiguration(); displayContent.onConfigurationChanged(newConfig); ArgumentCaptor<LogMaker> logMakerCaptor = ArgumentCaptor.forClass(LogMaker.class); verify(mockLogger).write(logMakerCaptor.capture()); assertThat(logMakerCaptor.getValue().getCategory(), is(MetricsProto.MetricsEvent.ACTION_PHONE_ORIENTATION_CHANGED)); assertThat(logMakerCaptor.getValue().getSubtype(), is(Configuration.ORIENTATION_PORTRAIT)); } private boolean isOptionsPanelAtRight(int displayId) { return (mWm.getPreferredOptionsPanelGravity(displayId) & Gravity.RIGHT) == Gravity.RIGHT; } Loading