summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rupesh Bansal <brup@google.com> 2024-11-22 21:05:39 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-11-22 21:05:39 +0000
commit735f04b65b523ae47e66d760eba8a9745f410eb0 (patch)
tree127a95797b91fccf06024364833056a89d1c4365
parentfce360dada78def5ca870806414a5de22c66bdb3 (diff)
parent755dd5818cb20a3b62cfc2a7c58e9dc209979540 (diff)
Merge "Subscribing viewroot impl to only display state changes" into main
-rw-r--r--core/java/android/view/ViewRootImpl.java18
-rw-r--r--services/core/java/com/android/server/display/feature/DisplayManagerFlags.java13
-rw-r--r--services/core/java/com/android/server/display/feature/display_flags.aconfig11
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
+ }
+}