diff options
author | 2024-11-22 21:05:39 +0000 | |
---|---|---|
committer | 2024-11-22 21:05:39 +0000 | |
commit | 735f04b65b523ae47e66d760eba8a9745f410eb0 (patch) | |
tree | 127a95797b91fccf06024364833056a89d1c4365 | |
parent | fce360dada78def5ca870806414a5de22c66bdb3 (diff) | |
parent | 755dd5818cb20a3b62cfc2a7c58e9dc209979540 (diff) |
Merge "Subscribing viewroot impl to only display state changes" into main
3 files changed, 39 insertions, 3 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index b6e114b3a3ca..a0feccd87a81 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1236,6 +1236,8 @@ public final class ViewRootImpl implements ViewParent, private @ActivityInfo.ColorMode int mCurrentColorMode = ActivityInfo.COLOR_MODE_DEFAULT; private long mColorModeLastSetMillis = -1; + private final boolean mIsSubscribeGranularDisplayEventsEnabled; + public ViewRootImpl(Context context, Display display) { this(context, display, WindowManagerGlobal.getWindowSession(), new WindowLayout()); } @@ -1333,6 +1335,8 @@ public final class ViewRootImpl implements ViewParent, // Disable DRAW_WAKE_LOCK starting U. mDisableDrawWakeLock = CompatChanges.isChangeEnabled(DISABLE_DRAW_WAKE_LOCK) && disableDrawWakeLock(); + mIsSubscribeGranularDisplayEventsEnabled = + com.android.server.display.feature.flags.Flags.subscribeGranularDisplayEvents(); } public static void addFirstDrawHandler(Runnable callback) { @@ -1810,14 +1814,22 @@ public final class ViewRootImpl implements ViewParent, mAccessibilityInteractionConnectionManager, mHandler); mAccessibilityManager.addHighContrastTextStateChangeListener( mExecutor, mHighContrastTextManager); + + + long eventsToBeRegistered = + (mIsSubscribeGranularDisplayEventsEnabled) + ? DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_ADDED + | DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_STATE + | DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_REMOVED + : DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_ADDED + | DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_CHANGED + | DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_REMOVED; DisplayManagerGlobal .getInstance() .registerDisplayListener( mDisplayListener, mHandler, - DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_ADDED - | DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_CHANGED - | DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_REMOVED, + eventsToBeRegistered, mBasePackageName); if (forceInvertColor()) { diff --git a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java index e273c6862fe0..45106f54cb9f 100644 --- a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java +++ b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java @@ -257,6 +257,11 @@ public class DisplayManagerFlags { Flags::displayListenerPerformanceImprovements ); + private final FlagState mSubscribeGranularDisplayEvents = new FlagState( + Flags.FLAG_SUBSCRIBE_GRANULAR_DISPLAY_EVENTS, + Flags::subscribeGranularDisplayEvents + ); + /** * @return {@code true} if 'port' is allowed in display layout configuration file. */ @@ -552,6 +557,13 @@ public class DisplayManagerFlags { } /** + * @return {@code true} if the flag for subscribing to granular display events is enabled + */ + public boolean isSubscribeGranularDisplayEventsEnabled() { + return mSubscribeGranularDisplayEvents.isEnabled(); + } + + /** * dumps all flagstates * @param pw printWriter */ @@ -605,6 +617,7 @@ public class DisplayManagerFlags { pw.println(" " + mGetSupportedRefreshRatesFlagState); pw.println(" " + mEnablePluginManagerFlagState); pw.println(" " + mDisplayListenerPerformanceImprovementsFlagState); + pw.println(" " + mSubscribeGranularDisplayEvents); } private static class FlagState { diff --git a/services/core/java/com/android/server/display/feature/display_flags.aconfig b/services/core/java/com/android/server/display/feature/display_flags.aconfig index e7ea868ca04f..3976d01d806d 100644 --- a/services/core/java/com/android/server/display/feature/display_flags.aconfig +++ b/services/core/java/com/android/server/display/feature/display_flags.aconfig @@ -478,3 +478,14 @@ flag { bug: "378385869" is_fixed_read_only: true } + +flag { + name: "subscribe_granular_display_events" + namespace: "display_manager" + description: "Enable subscription to granular display change events." + bug: "379250634" + is_fixed_read_only: true + metadata { + purpose: PURPOSE_BUGFIX + } +} |