diff options
| author | Darryl L Johnson <darryljohnson@google.com> | 2020-08-26 12:25:50 -0700 |
|---|---|---|
| committer | Darryl L Johnson <darryljohnson@google.com> | 2020-09-01 14:54:46 -0700 |
| commit | eb039cc64e51636a9775fead645981d9b03e01aa (patch) | |
| tree | 2942172370b4f33f908c4db1f935933c72de3509 /core/java/com | |
| parent | 51412036df7cc7a5cefd9bf5aed0f56cb880b98f (diff) | |
Prevent DecorContext from creating DisplayContext for default display.
The previous implementation of createDisplayContext() was essentially a
noop within ResourcesManager when the default display was passed. However,
the current implementation always overrides the configuration with the provided
display's metrics so when a DecorContext with the default display is
created a new ResourcesImpl object is also created due to the difference in
configuration. This CL changes the DecorContext logic to match the
previous implemenation where the configuration is only overriden for a
non-default display thus only creating a new ResourcesImpl object for
non-default displays.
Bug: 166174272
Test: atest google/perf/app-startup/benchmark-app-hermetic/cold-dropcache-test -v
Test: atest com.android.internal.policy.DecorContextTest
Change-Id: I05920c4f7987ffcaec8b197e8636606c04b418d4
Diffstat (limited to 'core/java/com')
| -rw-r--r-- | core/java/com/android/internal/policy/DecorContext.java | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/core/java/com/android/internal/policy/DecorContext.java b/core/java/com/android/internal/policy/DecorContext.java index 51b41198e272..5e34c15c42e2 100644 --- a/core/java/com/android/internal/policy/DecorContext.java +++ b/core/java/com/android/internal/policy/DecorContext.java @@ -20,8 +20,10 @@ import android.content.AutofillOptions; import android.content.ContentCaptureOptions; import android.content.Context; import android.content.res.AssetManager; +import android.content.res.Configuration; import android.content.res.Resources; import android.view.ContextThemeWrapper; +import android.view.Display; import android.view.contentcapture.ContentCaptureManager; import com.android.internal.annotations.VisibleForTesting; @@ -47,9 +49,17 @@ public class DecorContext extends ContextThemeWrapper { public DecorContext(Context baseContext, PhoneWindow phoneWindow) { super(null /* base */, null); setPhoneWindow(phoneWindow); - final Context displayContext = baseContext.createDisplayContext( - // TODO(b/149790106): Non-activity context can be passed. - phoneWindow.getContext().getDisplayNoVerify()); + // TODO(b/149790106): Non-activity context can be passed. + final Display display = phoneWindow.getContext().getDisplayNoVerify(); + final Context displayContext; + if (display.getDisplayId() == Display.DEFAULT_DISPLAY) { + // TODO(b/166174272): Creating a display context for the default display will result + // in additional resource creation. + displayContext = baseContext.createConfigurationContext(Configuration.EMPTY); + displayContext.updateDisplay(Display.DEFAULT_DISPLAY); + } else { + displayContext = baseContext.createDisplayContext(display); + } attachBaseContext(displayContext); } |
