diff options
| author | 2021-12-13 13:51:18 +0000 | |
|---|---|---|
| committer | 2021-12-13 13:51:18 +0000 | |
| commit | 9c310ef902e21b9a616666d1ad0c57e50017b010 (patch) | |
| tree | 7bc561b80f0b1d9b356721ba7db2fb63bd855ca5 | |
| parent | 85853b40a3be7dd14a613db34a7c64c25644f98f (diff) | |
| parent | b6a1d36a9ac6c22a236b0c6c356b1847c6164347 (diff) | |
Reduce cost of WindowTokenClient config change am: 778c95ce7c am: b6a1d36a9a
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16439833
Change-Id: I419e9c42305f3ad271fcb3f774e12474cdf3baaf
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 10 | ||||
| -rw-r--r-- | core/java/android/app/ContextImpl.java | 4 | ||||
| -rw-r--r-- | core/java/android/window/WindowTokenClient.java | 10 |
3 files changed, 15 insertions, 9 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 1c53fbd4de49..4806261f6dc4 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -2700,6 +2700,16 @@ public final class ActivityThread extends ClientTransactionHandler } } + void onSystemUiContextCleanup(ContextImpl context) { + synchronized (this) { + if (mDisplaySystemUiContexts == null) return; + final int index = mDisplaySystemUiContexts.indexOfValue(context); + if (index >= 0) { + mDisplaySystemUiContexts.removeAt(index); + } + } + } + public void installSystemApplicationInfo(ApplicationInfo info, ClassLoader classLoader) { synchronized (this) { getSystemContext().installSystemApplicationInfo(info, classLoader); diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index 4a7361efe4cc..885feb1f789a 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -3212,6 +3212,10 @@ class ContextImpl extends Context { final void performFinalCleanup(String who, String what) { //Log.i(TAG, "Cleanup up context: " + this); mPackageInfo.removeContextRegistrations(getOuterContext(), who, what); + if (mContextType == CONTEXT_TYPE_SYSTEM_OR_SYSTEM_UI + && mToken instanceof WindowTokenClient) { + mMainThread.onSystemUiContextCleanup(this); + } } @UnsupportedAppUsage diff --git a/core/java/android/window/WindowTokenClient.java b/core/java/android/window/WindowTokenClient.java index b331a9e81e27..4ba7ef26e9cb 100644 --- a/core/java/android/window/WindowTokenClient.java +++ b/core/java/android/window/WindowTokenClient.java @@ -15,7 +15,6 @@ */ package android.window; -import static android.window.ConfigurationHelper.diffPublicWithSizeBuckets; import static android.window.ConfigurationHelper.freeTextLayoutCachesIfNeeded; import static android.window.ConfigurationHelper.isDifferentDisplay; import static android.window.ConfigurationHelper.shouldUpdateResources; @@ -222,14 +221,7 @@ public class WindowTokenClient extends IWindowToken.Stub { () -> windowContext.dispatchConfigurationChanged(newConfig)); } - // Dispatch onConfigurationChanged only if there's a significant public change to - // make it compatible with the original behavior. - final Configuration[] sizeConfigurations = context.getResources() - .getSizeConfigurations(); - final SizeConfigurationBuckets buckets = sizeConfigurations != null - ? new SizeConfigurationBuckets(sizeConfigurations) : null; - final int diff = diffPublicWithSizeBuckets(mConfiguration, newConfig, buckets); - + final int diff = mConfiguration.diffPublicOnly(newConfig); if (shouldReportConfigChange && diff != 0 && context instanceof WindowProviderService) { final WindowProviderService windowProviderService = (WindowProviderService) context; |