diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 30bb2bbd33852..dfb7e8974824d 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -2026,9 +2026,18 @@ public final class ViewRootImpl implements ViewParent, mDisplay.getRealSize(size); desiredWindowWidth = size.x; desiredWindowHeight = size.y; + } else if (lp.width == ViewGroup.LayoutParams.WRAP_CONTENT + || lp.height == ViewGroup.LayoutParams.WRAP_CONTENT) { + // For wrap content, we have to remeasure later on anyways. Use size consistent with + // below so we get best use of the measure cache. + desiredWindowWidth = dipToPx(config.screenWidthDp); + desiredWindowHeight = dipToPx(config.screenHeightDp); } else { - desiredWindowWidth = mWinFrame.width(); - desiredWindowHeight = mWinFrame.height(); + // After addToDisplay, the frame contains the frameHint from window manager, which + // for most windows is going to be the same size as the result of relayoutWindow. + // Using this here allows us to avoid remeasuring after relayoutWindow + desiredWindowWidth = frame.width(); + desiredWindowHeight = frame.height(); } // We used to use the following condition to choose 32 bits drawing caches: