Bug 1757410 - Ensure MobileViewportManager::UpdateSizesBeforeReflow gets called with up-to-date app-units-per-dev-pixel and CV bounds in UIResolutionChangedInternal. r=emilio

Before this change, BrowserChild::RecvUIResolutionChanged calls
UIResolutionChangedSync first, then updates CV bounds. With the setup, when
UIResolutionChangedInternal gets called, the CV bounds hasn't yet been updated
so that UpdateSizesBeforeReflow doesn't get the proper metrics.

This change consists of three parts;

1) Use UIResolutionChangedSync instead of UIResolutionChanged in
   nsDocumentViewer::SetBoundsWithFlags which calls
   nsPresContext::AppUnitsPerDevPixel which needs to be actually updated by
   UIResolutionChangedSync.
2) Move the UIResolutionChangedSync call in RecvUIResolutionChanged after
   the SetPositionAndSize in the function.
3) Add a UpdateSizesBeforeReflow call in UIResolutionChangedInternal

As for 1), nsDocumentViewer::SetBoundsWithFlags  calls
nsPresContext::AppUnitsPerDevPixel so that UIResolutionChangedInternal needs to be
called synchronously rather than asynchronously.

As for 2), SetPositionAndSize gets called only if the BrowserChild size is changed,
so we need to call UIResolutionChangedSync in other cases.

Differential Revision: https://phabricator.services.mozilla.com/D153687
This commit is contained in:
Hiroyuki Ikezoe
2022-08-15 03:39:20 +00:00
parent 576b4030b0
commit 37c90736d3
3 changed files with 14 additions and 9 deletions

View File

@@ -1980,7 +1980,7 @@ nsDocumentViewer::SetBoundsWithFlags(const nsIntRect& aBounds,
// of windows/widgets competing to handle the notifications.
// (See bug 1154125.)
if (mPresContext->DeviceContext()->CheckDPIChange()) {
mPresContext->UIResolutionChanged();
mPresContext->UIResolutionChangedSync();
}
int32_t p2a = mPresContext->AppUnitsPerDevPixel();