diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayPolicy.java | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayRotation.java | 7 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerConstants.java | 17 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowOrientationListener.java (renamed from services/core/java/com/android/server/policy/WindowOrientationListener.java) | 43 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java | 2 |
6 files changed, 60 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index ed97848aece7..1b20c4462333 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -168,7 +168,6 @@ import com.android.server.policy.WindowManagerPolicy; import com.android.server.policy.WindowManagerPolicy.NavigationBarPosition; import com.android.server.policy.WindowManagerPolicy.ScreenOnListener; import com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs; -import com.android.server.policy.WindowOrientationListener; import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.wallpaper.WallpaperManagerInternal; import com.android.server.wm.InputMonitor.EventReceiverInputConsumer; diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java index 6a86aeedb963..48e4df7a57ce 100644 --- a/services/core/java/com/android/server/wm/DisplayRotation.java +++ b/services/core/java/com/android/server/wm/DisplayRotation.java @@ -69,7 +69,6 @@ import com.android.internal.util.function.pooled.PooledLambda; import com.android.server.LocalServices; import com.android.server.UiThread; import com.android.server.policy.WindowManagerPolicy; -import com.android.server.policy.WindowOrientationListener; import com.android.server.statusbar.StatusBarManagerInternal; import java.io.PrintWriter; @@ -253,7 +252,7 @@ public class DisplayRotation { if (isDefaultDisplay) { final Handler uiHandler = UiThread.getHandler(); - mOrientationListener = new OrientationListener(mContext, uiHandler); + mOrientationListener = new OrientationListener(mContext, uiHandler, mService); mOrientationListener.setCurrentRotation(mRotation); mSettingsObserver = new SettingsObserver(uiHandler); mSettingsObserver.observe(); @@ -1474,8 +1473,8 @@ public class DisplayRotation { final SparseArray<Runnable> mRunnableCache = new SparseArray<>(5); boolean mEnabled; - OrientationListener(Context context, Handler handler) { - super(context, handler); + OrientationListener(Context context, Handler handler, WindowManagerService service) { + super(context, handler, service); } private class UpdateRunnable implements Runnable { diff --git a/services/core/java/com/android/server/wm/WindowManagerConstants.java b/services/core/java/com/android/server/wm/WindowManagerConstants.java index a5ebf9ac74b9..015a0fb30a5b 100644 --- a/services/core/java/com/android/server/wm/WindowManagerConstants.java +++ b/services/core/java/com/android/server/wm/WindowManagerConstants.java @@ -49,6 +49,10 @@ final class WindowManagerConstants { static final String KEY_SYSTEM_GESTURE_EXCLUSION_LOG_DEBOUNCE_MILLIS = "system_gesture_exclusion_log_debounce_millis"; + // Enable logging from the sensor which publishes accel and gyro data generating a rotation + // event + private static final String KEY_RAW_SENSOR_LOGGING_ENABLED = "raw_sensor_logging_enabled"; + private static final int MIN_GESTURE_EXCLUSION_LIMIT_DP = 200; /** @see #KEY_SYSTEM_GESTURE_EXCLUSION_LOG_DEBOUNCE_MILLIS */ @@ -58,6 +62,8 @@ final class WindowManagerConstants { /** @see AndroidDeviceConfig#KEY_SYSTEM_GESTURES_EXCLUDED_BY_PRE_Q_STICKY_IMMERSIVE */ boolean mSystemGestureExcludedByPreQStickyImmersive; + boolean mRawSensorLoggingEnabled; + private final WindowManagerGlobalLock mGlobalLock; private final Runnable mUpdateSystemGestureExclusionCallback; private final DeviceConfigInterface mDeviceConfig; @@ -133,6 +139,9 @@ final class WindowManagerConstants { case KEY_SYSTEM_GESTURE_EXCLUSION_LOG_DEBOUNCE_MILLIS: updateSystemGestureExclusionLogDebounceMillis(); break; + case KEY_RAW_SENSOR_LOGGING_ENABLED: + updateRawSensorDataLoggingEnabled(); + break; default: break; } @@ -158,6 +167,12 @@ final class WindowManagerConstants { KEY_SYSTEM_GESTURES_EXCLUDED_BY_PRE_Q_STICKY_IMMERSIVE, false); } + private void updateRawSensorDataLoggingEnabled() { + mRawSensorLoggingEnabled = DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_WINDOW_MANAGER, + KEY_RAW_SENSOR_LOGGING_ENABLED, false); + } + void dump(PrintWriter pw) { pw.println("WINDOW MANAGER CONSTANTS (dumpsys window constants):"); @@ -167,6 +182,8 @@ final class WindowManagerConstants { pw.print("="); pw.println(mSystemGestureExclusionLimitDp); pw.print(" "); pw.print(KEY_SYSTEM_GESTURES_EXCLUDED_BY_PRE_Q_STICKY_IMMERSIVE); pw.print("="); pw.println(mSystemGestureExcludedByPreQStickyImmersive); + pw.print(" "); pw.print(KEY_RAW_SENSOR_LOGGING_ENABLED); + pw.print("="); pw.println(mRawSensorLoggingEnabled); pw.println(); } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index a2abf9154909..09fbce034639 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -458,7 +458,8 @@ public class WindowManagerService extends IWindowManager.Stub */ static final float MIN_TASK_LETTERBOX_ASPECT_RATIO = 1.0f; - final WindowManagerConstants mConstants; + @VisibleForTesting + WindowManagerConstants mConstants; final WindowTracing mWindowTracing; diff --git a/services/core/java/com/android/server/policy/WindowOrientationListener.java b/services/core/java/com/android/server/wm/WindowOrientationListener.java index 17e81daa80cc..da31bb253831 100644 --- a/services/core/java/com/android/server/policy/WindowOrientationListener.java +++ b/services/core/java/com/android/server/wm/WindowOrientationListener.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.policy; +package com.android.server.wm; import static com.android.server.wm.WindowOrientationListenerProto.ENABLED; import static com.android.server.wm.WindowOrientationListenerProto.ROTATION; @@ -31,6 +31,8 @@ import android.util.Slog; import android.util.proto.ProtoOutputStream; import android.view.Surface; +import com.android.internal.util.FrameworkStatsLog; + import java.io.PrintWriter; import java.util.List; @@ -63,6 +65,7 @@ public abstract class WindowOrientationListener { private OrientationJudge mOrientationJudge; private int mCurrentRotation = -1; private final Context mContext; + private final WindowManagerConstants mConstants; private final Object mLock = new Object(); @@ -71,9 +74,11 @@ public abstract class WindowOrientationListener { * * @param context for the WindowOrientationListener. * @param handler Provides the Looper for receiving sensor updates. + * @param wmService WindowManagerService to read the device config from. */ - public WindowOrientationListener(Context context, Handler handler) { - this(context, handler, SensorManager.SENSOR_DELAY_UI); + public WindowOrientationListener( + Context context, Handler handler, WindowManagerService wmService) { + this(context, handler, wmService, SensorManager.SENSOR_DELAY_UI); } /** @@ -81,6 +86,7 @@ public abstract class WindowOrientationListener { * * @param context for the WindowOrientationListener. * @param handler Provides the Looper for receiving sensor updates. + * @param wmService WindowManagerService to read the device config from. * @param rate at which sensor events are processed (see also * {@link android.hardware.SensorManager SensorManager}). Use the default * value of {@link android.hardware.SensorManager#SENSOR_DELAY_NORMAL @@ -88,10 +94,12 @@ public abstract class WindowOrientationListener { * * This constructor is private since no one uses it. */ - private WindowOrientationListener(Context context, Handler handler, int rate) { + private WindowOrientationListener( + Context context, Handler handler, WindowManagerService wmService, int rate) { mContext = context; mHandler = handler; - mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE); + mConstants = wmService.mConstants; + mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); mRate = rate; List<Sensor> l = mSensorManager.getSensorList(Sensor.TYPE_DEVICE_ORIENTATION); Sensor wakeUpDeviceOrientationSensor = null; @@ -497,7 +505,7 @@ public abstract class WindowOrientationListener { private static final float MIN_ACCELERATION_MAGNITUDE = SensorManager.STANDARD_GRAVITY - ACCELERATION_TOLERANCE; private static final float MAX_ACCELERATION_MAGNITUDE = - SensorManager.STANDARD_GRAVITY + ACCELERATION_TOLERANCE; + SensorManager.STANDARD_GRAVITY + ACCELERATION_TOLERANCE; // Maximum absolute tilt angle at which to consider orientation data. Beyond this (i.e. // when screen is facing the sky or ground), we completely ignore orientation data @@ -1072,8 +1080,14 @@ public abstract class WindowOrientationListener { mDesiredRotation = reportedRotation; newRotation = evaluateRotationChangeLocked(); } - if (newRotation >=0) { + if (newRotation >= 0) { onProposedRotationChanged(newRotation); + if (mConstants.mRawSensorLoggingEnabled) { + FrameworkStatsLog.write( + FrameworkStatsLog.DEVICE_ROTATED, + event.timestamp, + rotationToLogEnum(reportedRotation)); + } } } @@ -1180,5 +1194,20 @@ public abstract class WindowOrientationListener { } } }; + + private int rotationToLogEnum(int rotation) { + switch (rotation) { + case 0: + return FrameworkStatsLog.DEVICE_ROTATED__PROPOSED_ORIENTATION__ROTATION_0; + case 1: + return FrameworkStatsLog.DEVICE_ROTATED__PROPOSED_ORIENTATION__ROTATION_90; + case 2: + return FrameworkStatsLog.DEVICE_ROTATED__PROPOSED_ORIENTATION__ROTATION_180; + case 3: + return FrameworkStatsLog.DEVICE_ROTATED__PROPOSED_ORIENTATION__ROTATION_270; + default: + return FrameworkStatsLog.DEVICE_ROTATED__PROPOSED_ORIENTATION__UNKNOWN; + } + } } } diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java index e1aca55762d6..2321a73fefb2 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java @@ -121,6 +121,8 @@ public class DisplayRotationTests { sMockWm = mock(WindowManagerService.class); sMockWm.mPowerManagerInternal = mock(PowerManagerInternal.class); sMockWm.mPolicy = mock(WindowManagerPolicy.class); + sMockWm.mConstants = mock(WindowManagerConstants.class); + sMockWm.mConstants.mRawSensorLoggingEnabled = true; } @AfterClass |