Merge "Reduce unnecessary config propagation of default display" into sc-dev am: 00a39566bb
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13610323 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I79f47a12c1b5c408fd371212aaa394e6bf1e513a
This commit is contained in:
@@ -4015,8 +4015,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
|||||||
deferWindowLayout();
|
deferWindowLayout();
|
||||||
try {
|
try {
|
||||||
if (values != null) {
|
if (values != null) {
|
||||||
changes = updateGlobalConfigurationLocked(values, initLocale, persistent, userId,
|
changes = updateGlobalConfigurationLocked(values, initLocale, persistent, userId);
|
||||||
deferResume);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!deferResume) {
|
if (!deferResume) {
|
||||||
@@ -4035,7 +4034,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
|||||||
|
|
||||||
/** Update default (global) configuration and notify listeners about changes. */
|
/** Update default (global) configuration and notify listeners about changes. */
|
||||||
int updateGlobalConfigurationLocked(@NonNull Configuration values, boolean initLocale,
|
int updateGlobalConfigurationLocked(@NonNull Configuration values, boolean initLocale,
|
||||||
boolean persistent, int userId, boolean deferResume) {
|
boolean persistent, int userId) {
|
||||||
|
|
||||||
final DisplayContent defaultDisplay =
|
final DisplayContent defaultDisplay =
|
||||||
mRootWindowContainer.getDisplayContent(DEFAULT_DISPLAY);
|
mRootWindowContainer.getDisplayContent(DEFAULT_DISPLAY);
|
||||||
@@ -4047,7 +4046,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
|||||||
// setting WindowManagerService.mWaitingForConfig to true, it is important that we call
|
// setting WindowManagerService.mWaitingForConfig to true, it is important that we call
|
||||||
// performDisplayOverrideConfigUpdate in order to send the new display configuration
|
// performDisplayOverrideConfigUpdate in order to send the new display configuration
|
||||||
// (even if there are no actual changes) to unfreeze the window.
|
// (even if there are no actual changes) to unfreeze the window.
|
||||||
defaultDisplay.performDisplayOverrideConfigUpdate(values, deferResume);
|
defaultDisplay.performDisplayOverrideConfigUpdate(values);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4095,9 +4094,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
|||||||
|
|
||||||
mTempConfig.seq = increaseConfigurationSeqLocked();
|
mTempConfig.seq = increaseConfigurationSeqLocked();
|
||||||
|
|
||||||
// Update stored global config and notify everyone about the change.
|
|
||||||
mRootWindowContainer.onConfigurationChanged(mTempConfig);
|
|
||||||
|
|
||||||
Slog.i(TAG, "Config changes=" + Integer.toHexString(changes) + " " + mTempConfig);
|
Slog.i(TAG, "Config changes=" + Integer.toHexString(changes) + " " + mTempConfig);
|
||||||
// TODO(multi-display): Update UsageEvents#Event to include displayId.
|
// TODO(multi-display): Update UsageEvents#Event to include displayId.
|
||||||
mUsageStatsInternal.reportConfigurationChange(mTempConfig, mAmInternal.getCurrentUserId());
|
mUsageStatsInternal.reportConfigurationChange(mTempConfig, mAmInternal.getCurrentUserId());
|
||||||
@@ -4116,13 +4112,10 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
|||||||
// resources have that config before following boot code is executed.
|
// resources have that config before following boot code is executed.
|
||||||
mSystemThread.applyConfigurationToResources(mTempConfig);
|
mSystemThread.applyConfigurationToResources(mTempConfig);
|
||||||
|
|
||||||
// We need another copy of global config because we're scheduling some calls instead of
|
|
||||||
// running them in place. We need to be sure that object we send will be handled unchanged.
|
|
||||||
final Configuration configCopy = new Configuration(mTempConfig);
|
|
||||||
if (persistent && Settings.System.hasInterestingConfigurationChanges(changes)) {
|
if (persistent && Settings.System.hasInterestingConfigurationChanges(changes)) {
|
||||||
final Message msg = PooledLambda.obtainMessage(
|
final Message msg = PooledLambda.obtainMessage(
|
||||||
ActivityTaskManagerService::sendPutConfigurationForUserMsg,
|
ActivityTaskManagerService::sendPutConfigurationForUserMsg,
|
||||||
this, userId, configCopy);
|
this, userId, new Configuration(mTempConfig));
|
||||||
mH.sendMessage(msg);
|
mH.sendMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4131,8 +4124,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
|||||||
final int pid = pidMap.keyAt(i);
|
final int pid = pidMap.keyAt(i);
|
||||||
final WindowProcessController app = pidMap.get(pid);
|
final WindowProcessController app = pidMap.get(pid);
|
||||||
ProtoLog.v(WM_DEBUG_CONFIGURATION, "Update process config of %s to new "
|
ProtoLog.v(WM_DEBUG_CONFIGURATION, "Update process config of %s to new "
|
||||||
+ "config %s", app.mName, configCopy);
|
+ "config %s", app.mName, mTempConfig);
|
||||||
app.onConfigurationChanged(configCopy);
|
app.onConfigurationChanged(mTempConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
final Message msg = PooledLambda.obtainMessage(
|
final Message msg = PooledLambda.obtainMessage(
|
||||||
@@ -4140,10 +4133,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
|||||||
mAmInternal, changes, initLocale);
|
mAmInternal, changes, initLocale);
|
||||||
mH.sendMessage(msg);
|
mH.sendMessage(msg);
|
||||||
|
|
||||||
// Override configuration of the default display duplicates global config, so we need to
|
// Update stored global config and notify everyone about the change.
|
||||||
// update it also. This will also notify WindowManager about changes.
|
mRootWindowContainer.onConfigurationChanged(mTempConfig);
|
||||||
defaultDisplay.performDisplayOverrideConfigUpdate(mRootWindowContainer.getConfiguration(),
|
|
||||||
deferResume);
|
|
||||||
|
|
||||||
return changes;
|
return changes;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -141,6 +141,10 @@ public abstract class ConfigurationContainer<E extends ConfigurationContainer> {
|
|||||||
mChangeListeners.get(i).onMergedOverrideConfigurationChanged(
|
mChangeListeners.get(i).onMergedOverrideConfigurationChanged(
|
||||||
mMergedOverrideConfiguration);
|
mMergedOverrideConfiguration);
|
||||||
}
|
}
|
||||||
|
dispatchConfigurationToChildren();
|
||||||
|
}
|
||||||
|
|
||||||
|
void dispatchConfigurationToChildren() {
|
||||||
for (int i = getChildCount() - 1; i >= 0; --i) {
|
for (int i = getChildCount() - 1; i >= 0; --i) {
|
||||||
final ConfigurationContainer child = getChildAt(i);
|
final ConfigurationContainer child = getChildAt(i);
|
||||||
child.onConfigurationChanged(mFullConfiguration);
|
child.onConfigurationChanged(mFullConfiguration);
|
||||||
|
|||||||
@@ -5467,9 +5467,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
|||||||
// apply the correct override config.
|
// apply the correct override config.
|
||||||
changes = mAtmService.updateGlobalConfigurationLocked(values,
|
changes = mAtmService.updateGlobalConfigurationLocked(values,
|
||||||
false /* initLocale */, false /* persistent */,
|
false /* initLocale */, false /* persistent */,
|
||||||
UserHandle.USER_NULL /* userId */, deferResume);
|
UserHandle.USER_NULL /* userId */);
|
||||||
} else {
|
} else {
|
||||||
changes = performDisplayOverrideConfigUpdate(values, deferResume);
|
changes = performDisplayOverrideConfigUpdate(values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5487,7 +5487,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
|||||||
return kept;
|
return kept;
|
||||||
}
|
}
|
||||||
|
|
||||||
int performDisplayOverrideConfigUpdate(Configuration values, boolean deferResume) {
|
int performDisplayOverrideConfigUpdate(Configuration values) {
|
||||||
mTempConfig.setTo(getRequestedOverrideConfiguration());
|
mTempConfig.setTo(getRequestedOverrideConfiguration());
|
||||||
final int changes = mTempConfig.updateFrom(values);
|
final int changes = mTempConfig.updateFrom(values);
|
||||||
if (changes != 0) {
|
if (changes != 0) {
|
||||||
|
|||||||
@@ -649,6 +649,20 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
|
|||||||
onConfigurationChanged(newConfiguration);
|
onConfigurationChanged(newConfiguration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void dispatchConfigurationToChildren() {
|
||||||
|
final Configuration configuration = getConfiguration();
|
||||||
|
for (int i = getChildCount() - 1; i >= 0; i--) {
|
||||||
|
final DisplayContent displayContent = getChildAt(i);
|
||||||
|
if (displayContent.isDefaultDisplay) {
|
||||||
|
// The global configuration is also the override configuration of default display.
|
||||||
|
displayContent.performDisplayOverrideConfigUpdate(configuration);
|
||||||
|
} else {
|
||||||
|
displayContent.onConfigurationChanged(configuration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConfigurationChanged(Configuration newParentConfig) {
|
public void onConfigurationChanged(Configuration newParentConfig) {
|
||||||
prepareFreezingTaskBounds();
|
prepareFreezingTaskBounds();
|
||||||
|
|||||||
Reference in New Issue
Block a user