summaryrefslogtreecommitdiff
path: root/core/java/com
diff options
context:
space:
mode:
authorDarryl L Johnson <darryljohnson@google.com>2020-08-26 12:25:50 -0700
committerDarryl L Johnson <darryljohnson@google.com>2020-09-01 14:54:46 -0700
commiteb039cc64e51636a9775fead645981d9b03e01aa (patch)
tree2942172370b4f33f908c4db1f935933c72de3509 /core/java/com
parent51412036df7cc7a5cefd9bf5aed0f56cb880b98f (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.java16
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);
}